搞nRF24L01已经有三天了,前两天感觉还好,看得特尔洗特,了解了工作模式,但是还是有好多细节忽略掉了,网上查才看到好多要注意的东西。
然后就是看牛人写的程序。比对着看,感觉有些地方有很多不解的地方,甚至觉得是错的(以前用1-Wire读ds1302时就是被书本上错误程序给搞怕了,亏那本书封面还做的那么好,叫人心生敬意:权威啊)。
今天开始用结合硬件调程序,结果问题一大堆。因为是和51通信,需要5V和3.3转换,用了TI的一个芯片,就是不知道硬件有没设计好。看电平匹配芯片的数据手册,发现自己电路的驱动能力不够,但是加了上拉发现是一样的,没加也能通信,真是费解。
现在有很多问题:
复位几次MCU后,nRF就不能正确配置了(直观现象是配置寄存器的值读出来有问题,也不知道是通信问题还是真的没配置好),重新给nRF上电,就又能配置了。
使能AutoAck后,试验发射部分,MAX_RT能置位(把我高兴了一下),然后打开接收,发现还是置位,说明没收到ACK;于是关掉AutoAck,发现并不能置位TX_DS,郁闷。
datasheet上说写寄存器时必须置低CE,但是我试过置位CE再读寄存器,嘿,一样行,不知道为什么。
不断的实验,发现使用了TxPacket函数后会造成复位不能配置的问题,原因不明。
现在有些途径可以尝试:改进电源,现在电源是直接从MCU降压过来的,不知道会不会影响,网上有说430与nRF共电结果工作不好的情况;严格操作CE端;另外就是电平芯片TXB0108了,如果真的是这个芯片在作怪,那么请苍天原谅我,我的确无计可施了(当然可以花半个月废寝忘食来研究430,如果430驱动行了,也就证明它的确不行了)。
昨晚郁闷到凌晨4点,还不知道今晚郁闷到什么时候,现在是23:49,just keep moving!
解决一个问题。CE信号控制果然很重要,“上电怪题”就是它引起的。试验的程序里用了TxPacket,而nRF的发送是用CE置位来启动的。进入中断服务程序后直接写状态寄存器,没按通信协议进行,应该先置低CE;但是读寄存器似乎没影响。oh yeah,现在0:15,有点困了。
好消息,呵呵,TX_DS能置位了,估计发送端能工作了。还有个小问题,刚才读发送端地址时有点无厘头,但是是每次都一样,可是又和定义的不一样(条件是配置时没写地址,用的复位值E7E7E7E7E7,发送函数里写了地址,再次复位后值就不对了)。现在是0:27,越来越困了。
又回来了。这个问题还没搞太明白。发现在发送时必须加一定的延时(不是CE启动要求的130us,而是较长的一段时间,估计是用作数据包的发送的)。试验程序里发送了之后直接进入中断读状态寄存器,结果出来的又是每次都一样的无厘头数据。怀疑是发送时不应该读取寄存器(但记得datasheet说是可以的)。然后在进入中断后马上延时,发现还是有两个数据错了,这下就不懂了(怀疑和51寄存器组有关。有时间试验一下,制定寄存器组试试)。北京时间0:44。
不小心的发现,恰好网上看见有人在问这个。STATUS和FIFO_STATUS两个寄存器中都有TX_FIFO标志位,其值与冲洗寄存器和发送状况有关,下面是实验结果。(没有接收端,则EN_AA数据没发出)。都1:22了
EN_AA: (发送不成功,若不冲洗,数据保留,否则数据清除)
不BLUSH_TX STATUS 中 TX_FULL 1 , FIFO_STATUS 中 TX_FULL 1;
BLUSH_TX STATUS 中 TX_FULL 0 , FIFO_STATUS 中 TX_EMPTY 1;
dis EN_AA: (发送成功,虽然收不到,数据都被清除了)
不BLUSH_TX STATUS 中 TX_FULL 0 , FITO_STATUS 中 TX_EMPTY 1;
BLUST_TX STATUS 中 TX_FULL 0 , FIFO_STATUS 中 TX_EMPTY 1;
LALALA,LALALA,LALALA,我是卖报的小行家。。。。呵呵,居然调通了,居然收到数据了。苍天无眼啊,居然被我给调通了(只不过是部分)。但是使能AutoAck还有点问题。哎,太累了,休息下。明天再开始吧。幸福啊。
北京时间2:32。