Other Parts Discussed in Thread: CC110L
我有两个定制板(每个板一个 CC110L)、它们通过发送和接收如下所示的数据包进行通信:
(为解释起见,我将把他们称为 Board1和 Board2)
- Board1启动、初始化所有内容并从 N 个传感器读取值、并等待 EVENT SEND_DATA 将数据传输到 Board2
- Board2会启动、初始化所有内容并等待、直至 CC110L 发出 IRQ、这意味着它接收到某些内容、CRC 正常。
- Board2解析 dt pkt,检索数据并返回与 ACK 相同的 pkt. 所有 pkts 的长度均为32字节。
- 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?