nRF24L01晶片驅動記錄
學習完了usb,瞭解了部分元器件的功能以及用途後,打算在端午假期用一天的時間完成一個小目標,不過實際上是花了一天半才成功實現,現將驅動nRF24L01晶片的整個過程記錄下來。
小目標
驅動nRF24L01晶片,實現nRF24L01晶片之間的通訊
在淘寶問客服找驅動程式碼
這個過程一言難盡,一開始因為貪便宜,我買晶片的店鋪不是官方店鋪,屬於私營的店鋪,賣的東西也很雜。雖然便宜了幾塊錢,但是資料相對來說會不全,而且比較老舊(都是10年11年的程式碼),在商家描述裡面,資料裡面有上位機,我把整個壓縮檔案翻了一遍又一遍,我找了半天也找不到,後面去問客服,客服說稍等技術現在沒有空,過了半個小時再問,客服說技術已經下班了,讓我明天再問。當時就差點和客服吵起來了。
後面自己去別的淘寶店鋪那裡蹭到了上位機的下載連結,這樣我的nRF24L01的一端可以用電腦來代替,而且確保沒有錯誤。我只需要在mcu上實現nRF24L01的收或者發,另一端在上位機進行發和收就可以進行通訊了。
後面整理了一下客服的驅動程式碼,沒有一個是我可以直接拿來用的,而且驅動程式碼的晶片都是10年11年的老晶片,我個人覺得為了學一個驅動去學習一款過時的晶片在時間成本和收益上都很不理想,所以我也沒去看原始碼,只是大概的看了一眼。
在github上找驅動程式碼
最後我是在github上找到了我這個晶片的驅動程式碼,不過也是很久之前的程式碼,不過寫的也是比較好的,雖然也是十多年前的程式碼,但是和淘寶客服給的資料完全不是一個檔次的,這個程式碼就像之前技術總監給我的ST7789的驅動庫一樣,直接include進來,自己配置一些GPIO就可以直接拿來用了,而mcu和nRF24L01之間的通訊完全不需要我操心和了解,直到現在目標完成了,裡面的原始碼我也只是看了70%。
這裡有個小插曲
/* ----------------------------------------------------------------------------
* “THE COFFEEWARE LICENSE” (Revision 1):
* <ihsan@kehribar.me> wrote this file. As long as you retain this notice you
* can do whatever you want with this stuff. If we meet some day, and you think
* this stuff is worth it, you can buy me a coffee in return.
* -----------------------------------------------------------------------------/
大概內容是,你可以拿這個檔案來做你想做的任何事情,如果有一天我們相遇了,你覺得我對你有所幫助的話,你可以請我喝一杯咖啡作為回報。我屁顛屁顛在淘寶找商家,網上找資源,最後在github找,找了好久好久都沒找到適合的。最後終於找到了,然後看到這個版權宣告,當時真的感觸很深,很感動,大概只有同樣經歷的人才能感同身受吧。
配置GPIO,初次失敗
當配置好GPIO之後,我就直接上電執行,不出我的所料,第一次失敗了(當時也沒想著能成)。
配置地址,第二次失敗
然後開始看main函式,從初始化到配置到通訊,都看了然後發現地址碼需要進行配置,我就開始配置RX_address和TX_address,配置完上位機的地址之後,在工程裡面配置地址。配置完地址之後我就開始了第二次的上電測試,不過還是失敗了。
配置引數,第三次失敗
這時候我發現了中文手冊裡面有很多東西都是不全的(僅僅只有26頁),於是就開始開啟了英文手冊(有78頁!),配合著中文手冊和有道翻譯來食用,讀完英文手冊之後,我發現有很多的配置是需要收發端一一對應的,並不是用一臺nRF24L01裝置發出訊號另一臺nRF24L01裝置就可以直接讀取到。
雖然他們都是基於2.4Ghz的頻段,但是2.4Ghz頻段裡面有很多子頻段,而且還有通訊速率什麼的。於是我興沖沖的配置完了,心裡想著這一次,總算能成功了吧。但是現實還是給了我當頭一棒,還是通訊失敗了。這時候第一天已經接近尾聲,不過我覺得已經離真相越來越近了。
抓取上位機資料,第四次失敗
這時候我想著用邏輯分析儀抓取nRF24L01插入電腦那一刻的初始化資料,看看他是怎麼配置的,然後在我的工程專案裡面使用一樣的配置。在抓取資料的時候我發現,有一些引數的配置,居然在上位機裡面已經寫死了(比如RX payload上位機寫死的是32個位元組),而我的工程專案裡面是2個位元組。修改完之後進行上電執行,結果還是失敗了。
抓取mcu資料,終於成功了!
後面我再抓取mcu的資料,發現我的RX地址和TX地址好像設定反了,於是進行修改,終於成功了。
坑點總結
以下是這兩天踩坑的一些總結:
- 最好選晶片的官方店鋪,這樣售後的服務和樣例程式碼能得到保障
- github / CSDN上面也有不錯的樣例程式碼,有的時候可以花一點時間來找一下,如果找到了會達到事半功倍的效果。如果我自己寫SPI驅動nRF24L01,我需要配置SPI,而且我也不知道他們通訊的具體過程是什麼樣的,這樣我可能需要花大量時間來閱讀整整78頁的英文手冊來尋找答案,而且直到了通訊過程,通訊過程的實現也不一定正確。而且時間開銷也會很大。
- 中文手冊可能是最簡單易懂的,但是大機率不是最準確詳細的。有中文手冊的話可以先看中文手冊,看完之後再花2分鐘時間大概過一下英文手冊,知道英文手冊中有哪些東西是中文手冊沒有的,這時候需要用的時候就可以針對性的去看英文手冊了,而且在看過中文手冊的情況下,讀英文手冊看過的部分也會輕鬆不少(對於我這種英語不太好的人來說)。
- 當自我感覺配置已經好了的時候,用邏輯分析儀抓取傳送端和接收端的配置,檢查是否符合預期