This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC110L:CC110L 达到未知的 MARCSTATE

Guru**** 2812305 points

Other Parts Discussed in Thread: CC110L

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/850595/cc110l-cc110l-reaches-unknown-marcstate

器件型号:CC110L

我有两个定制板(每个板一个 CC110L)、它们通过发送和接收如下所示的数据包进行通信:

(为解释起见,我将把他们称为 Board1和 Board2)

  1. Board1启动、初始化所有内容并从 N 个传感器读取值、并等待 EVENT SEND_DATA 将数据传输到 Board2
  2. Board2会启动、初始化所有内容并等待、直至 CC110L 发出 IRQ、这意味着它接收到某些内容、CRC 正常。
  3. Board2解析 dt pkt,检索数据并返回与 ACK 相同的 pkt. 所有 pkts 的长度均为32字节。
  4. Board1从 Board2获取 ACK、并等待 N 秒以读取数据并再次传输。

到目前为止都很好、没有问题。 现在、我面临的问题是、在一段随机时间后、Board2会达到未知状态、我无法退出/恢复、除非关闭器件电源(可能是我在执行重置时发生错误?)。

我的以下(调试) foo 返回一个 bool、指出何时达到了我不喜欢的状态并且需要重新启动 CC110L

bprintATE __attribute__((optimize ("-O0")) cc110l:::printkState (b110ool wait){
//void cc110l:::printkState (bool wait){
uint8_t state;
uint8_t old_state;

bool is_ok = true;

#ifndef debug
return;#cc1004




("0xtend_break)











:0xccs_r (0xt_dle_ct):0xtout:0x0004 ("ccf_break):0xctron (0xtle_dle_ctron (0xtle_ctron);0xtle_ctron (0xtle_dle_dle_debug_dle_dle_ct);0xtle_ctron (0xtle_dle_dle_dle_ctron (0xtenf):0xtle_ctron (0xtle_dle_

Debug_printf ("CC110L:MANCAL_n");
break;
case 0x06:
debug_printf ("CC110L:VCOON\n");
break;
case 0x07:
debug_printf ("CC110L:REGON\n");
break;
case 0x110CON_printf
("CC110L:"CC110_printf:

















");case 0x110n";debug:0_printf ("CC110n";case:CC110n_printf:CC110n";case:tdebug:0xFF_printf:0_printf:0xFF";case:0_printf:0xFF_TREND";case:0xFF_TRD:0xFF_TREND";case:0xFF_TRD:0xFF_TRD:0xFF_TREND";case:0xFF_TRD:0xFF_TREND";case:0xFF_TREND";case:0xFF_TREND";case:0xFF_TRD:0xFF_TRD:0xFF_TREND"

案例0x0F:
debug_printf ("CC110L:Rx_RST\n");
break;
case 0x10:
debug_printf ("CC110L:TXRX_switch\n");
break;
case 0x11:
debug_printf ("CC110L:RXFIFO_OVERF\n");// de verf ("CC110L:



0xFF_TRUNCf








:0xFF_TRUNC12";case


:0x110FF_TRUNCf:0xFF_TRUNCf:0xFF_TRUNC12_TRUNCTRUNCTRUNCTRUNCf:0xFF_TRUNCTRUNCTRUNCf ("0xFF_TRUNCTRUNCTRD:0xFF_TRUNCTRUNCTRUNCTRF";case:0x13";case:0xFF_TRUNCTRUNCTRUNCTRUNCTRUNCTRUNCTRF";case:0xFF_TRUNCTRUNCTRUNCTRUNCTRUNCTRU // Ha de mandver false
is_ok = false;
break;
default:
debug_printf ("CC110L:未知状态0x%x\n"、state);// Ha de mandverfalse
is_ok = false;
break;
}
old_state = state;
if (wait){
osDelay (2);
state = readRegCS (REG_OST_ATE = false

);
}while (return);}nstate= state!}

在我的代码中多次调用此 foo、只是为了打印 CC110L 的状态。

现在、想象一下我想进入空闲状态。 我将其称为 foo:

void cc110l::idleMode(){sendCMD(cmd_siddle
);//转至空闲模式。
如果(!printkState()){
debug_printf ("重新启动 CC110L\n");
sendCMD (CMD_SRES);
osDelay (5);
sendCMD (CMD_SFRX);
sendCMD (CMD_SFTX);
sendCMD (CMD_sidle);
}

如果不是由于该输出而导致的、则该 foo 不需要 if 语句:

(笑声)

IRQ:天线
CC110L:未知状态0x1f
CC110L:未知状态0x17
IRQ:天线
CC110L:未知状态0x1f
正在重启 CC110L
IRQ:天线

(笑声)

根据 CC110L 参考文档、MARCSTATE 的状态值为0x00至0x16、因为位7:5不被使用。 如果是、我为什么会获得这些状态值、以及如何避免它们/正确地复位 CC110L?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我从未听说过从 MARCSTATE 的3 MSB 中读取过除000b 以外的其他内容的任何情况。 您是否确保:

    • 您的 SPI 符合规格。 所有时序要求时会出现什么情况?
    • 您正在启动时执行正确的复位(如果 不满足第4.12节中的要求、则需要手动复位、如数据表中的第5.19.1.2节中所述)
    • 您始终记得在启动 SPI 时钟之前等待 CHIP_RDYn 信号变为低电平吗?
    • 您在代码中正确处理错误状态(例如 、如果您最终进入 上溢或下溢状态、FIFO 是否按应有的方式刷新?
    • 您不会在 溢出/下溢状态或空闲状态之外的其他状态发送清除命令

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于缺乏反馈、此案例已关闭。 如果发布了附加信息、则会重新打开该视图。