久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5988|回復: 3
打印 上一主題 下一主題
收起左側

發現nRF24L01P與SI24R1竟然完美兼容替換

[復制鏈接]
跳轉到指定樓層
樓主
ID:364163 發表于 2018-9-10 11:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
近期有空找出時間把nRF24L01P的數據手冊全部看完了。

總的說來,發現一個新一代nRF24L01P與上一代nRF24L01相比寄存器沒有太大的變化,但是有幾個關于通信管道和ACK的寄存器的配置還是與上一代不同的。另外,個人理解shockburst和enhanced shockburst的區別就在于enhanced shockburst可以在接收機回復ACK時掛上1到32字節的數據包,這樣就實現了所謂的“全雙工”通信。然而實際探查這項功能發現它的作用其實有限,因為是ACK附加數據包,因此它的傳輸可靠性無法由射頻芯片的校驗重發機制保證,只能在接收機軟件上做改進,而這有時還不如讓接收發送機依照發送次序輪流進入發送/接收狀態來的方便。只適合回傳一些實時性要求高,對傳輸可靠性要求不嚴格的數據。


所謂知易行難,在著手做最基礎的SPI通信時就接連遇到了問題。首先是AVR的硬SPI無輸出。經過查找,最終問題是SPI設定為主機時,SS口要么設置為輸出,要么設置為輸入時接上拉,否則當SS為輸入又懸空或者低電平就會進入從機模式,自然沒有輸出。這個問題解決了,接下來遇到了一個更基本的問題,SPI的通信機制。一般說來另外兩種常見的通信方式中,UART是有收、發兩個數據寄存器,I2C則是通過數據包頭來區分接收和發送的數據。而SPI只有一個SPDR寄存器,而且只有寫入的時候啟動SPI產生SCK信號,怎么去讀MISO的數據?要自己做外部中斷讀取嗎?后來才明白,SPI的主機和從機各自的一個SPDR通過MOSI和MISO串聯成一個類似環形的大移位寄存器。主機的SPDR中的數據從MOSI每移除一位,從機就在相同的SCK上升沿或下降沿通過MISO將一位數據發送給主機。這樣,當SCK八個周期后,主機中的SPDR的數據全部移出了而被從機發送來的數據填充,從機則反之,這樣,在一字節的通信結束后再讀取SPDR,所返回的數據也就是從機發送來的數據。


解決了這個問題后與nRF24L01P的通信也就變得簡單了,先將SS拉低,告知nRF24L01P即將啟動SPI通信,當通過MOSI第一次向射頻芯片寫入任何字節時,MISO上都會有一個字節傳送給主機,這個就是芯片默認的0X07狀態寄存器里的數據,如果我們在第一次寫入讀取0X01寄存器的數據,那么0X01寄存器的數據只有在下一字節的通信中才會通過MISO回傳給主機,而發起下一輪字節通信就需要主機繼續發送數據,那么問題來了,讀命令已經發送了,那么接下來我該發送什么。在nRF24L01P的數據手冊中給出的建議是發送0XFF,這個命令對射頻芯片沒有任何意義,其實也可以再隨便發送其他任意一個數,只是為了避免產生不必要的麻煩而發送0XFF.發送0X00也可以,而且網上的絕大多數例程都是這樣用的,但是這實際上是讀0X00寄存器指令。讀取完畢后,將SS拉高,本輪通信結束。當下一次SS再次拉低時,一切又重新開始。也就是如果上一輪通信的最后MOSI上發送的是0X00,在這一輪第一次發送指令時MISO上移入的并不是0X00寄存器的狀態,而依舊是默認的0X07狀態寄存器的狀態。


有些繞,但是仔細看手冊就會發現原來規則很簡單。學習就是一個先將書本學厚,再將書本學薄的過程。


此外,MISO和IRQ信號雖然理論上和實際試驗都可以達到AVR的0.7VDD的高電平檢測電壓,但是在實際應用時必須要做3.3V到5V的電平轉換,否則極容易被干擾。而且對芯片的初始化也要等到開機后500毫秒在進行,以免因為芯片上電后還未穩定工作而配置不正常,事實也的確證明,芯片從上電到穩定的確存在一個比較長的時間。
但近年來國產芯片的替代品出來后,有理由項目國產芯片在支持產品本身需求的前提下,的卻能降低成本。nRF24L01P的國產替代SI24R1也是有一同測試,確實是還可以 。

評分

參與人數 1黑幣 +15 收起 理由
凌凈清河 + 15 經驗之談,彌足珍貴!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:243366 發表于 2018-12-18 10:30 | 只看該作者
好貼啊,受益匪淺,多謝樓主~~!!!
回復

使用道具 舉報

板凳
ID:243366 發表于 2018-12-18 13:24 | 只看該作者
但是我覺得樓主帖子中可能有個地方說的不太準確。
原帖里“而且網上的絕大多數例程都是這樣用的,但是這實際上是讀0X00寄存器指令”
我覺得這里0x00并不是讀取0x00寄存器指令,因為此輪通訊還沒有結束,也就是說SS還沒有拉高。從機不會認為是讀取0x00寄存器指令,而會認為是無用的數據,只是為了讓MISO產生數據傳輸。只有當SS被拉高后,結束此輪通訊。當再次拉低SS,下一輪通訊開始,首個字節為0x00時,從機才會認為是要讀取0x00寄存器數據。
手冊上說:Every new instruction must be started by a high to low transition on CSN. (CSN就是樓主帖子中所說的SS)

評分

參與人數 1黑幣 +15 收起 理由
凌凈清河 + 15 有理

查看全部評分

回復

使用道具 舉報

地板
ID:478263 發表于 2019-4-12 10:29 | 只看該作者
感謝樓主,講的非常細
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品久久精品久久精品 | 亚洲欧美激情网 | 黄色片免费看 | 国产中的精品av涩差av | 九九热精品视频在线观看 | 国产精品日韩欧美一区二区三区 | 国产高清精品一区二区三区 | 自拍偷拍欧美 | 国产精品小视频在线观看 | 亚洲精彩免费视频 | 日韩中文在线视频 | 欧美日韩国产一区二区三区 | 特黄级国产片 | 成人免费在线观看 | 国产片一区二区三区 | 亚洲欧美国产精品久久 | 欧美日韩在线视频观看 | 午夜精品久久久久久久久久久久 | 请别相信他免费喜剧电影在线观看 | 97精品久久 | ww 255hh 在线观看 | 国产一区二区自拍 | 伊人春色在线观看 | 精品一区二区三区四区在线 | 91麻豆精品一区二区三区 | 91久久国产综合久久91精品网站 | 久久久国产一区二区三区四区小说 | 亚洲精品福利在线 | 天天干免费视频 | 日韩国产在线 | 九九热精品视频 | 日本在线黄色 | 精品网| 自拍偷拍中文字幕 | 范冰冰一级做a爰片久久毛片 | 久草成人网 | 久久久久久国产精品久久 | 国产精品视频综合 | 少妇午夜一级艳片欧美精品 | 国产精品1区2区3区 欧美 中文字幕 | 一二三在线视频 |