搞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。
|