有些433M芯片不支持载波侦听,但是至少支持RSSI信道检测,即使不支持信道检测,至少可以接收数据。
假设一款芯片不支持CCA和RSSI,至少可以采用以下方法。
在主控芯片上开辟一个定时器中断,定时时间为T。
设置一个全局标准位RxFlag,只要接收到数据就置1,最好是在接收中断里面置1,收到帧头就置1。
发送函数不去触发TX状态,只是把数据写入到芯片的FIFO中。如果芯片没有FIFO,就只是保存在主控的RAM中。
设置一个全局变量TxRandom和TxCounter。
调用发送函数的时候,把TxRandom设置为1~4的一个随机数,TxCounter设置为3。
定时器中断的时候,去检测TxRandom是否为0,如果不为0,则减1,减到0的时候,就去读RxFlag,如果RxFlag不为1,就转TX状态,如果RxFlag为1,清零RxFlag,然后TxCounter减1,TxRandom设置为1~8的随机数,然后等TxRandom减到0的时候再去判断RxFlag,为0发送,为1则TxCounter减1。TxRandom第一次为1~4,第二次为1~8,第三次为1~16,第四次1~32……反正随机数以2的N次方递增。
如果TxCounter减到0也不能发送,则算发送失败,清空FIFO
|