近來一直在研究無線項目,其中的重點就是無線收發芯片,可以正常的發送接收數據了,無線項目的大難題也就解決了。于是開始收集各種無線收發芯片的資料,例如NRF24L01,CC1101,一些LoRa模塊還有一些超外差無線模塊等等,但是他們有著相同的問題,一是例如NRF24L01和CC1101之類的使用QFN封裝的模塊在自制上存在焊接困難度的問題,再就是這些模塊普遍都有著過于繁雜的外圍電路(一些電感電容),無法將其做到很小的體積。于是在查閱了很多資料后,有一款小巧的無線模塊進入我的眼簾,就是LT8920。
先不談他的各項參數指標相對其他模塊有什么優劣,光是這個采用了SSOP16的引腳封裝就使得其焊接容易了許多。并且其簡潔的外圍電路著實易于制作,只需要一個晶振一個電容即可,這確實在焊接難度和外圍電路成本上秒殺其他芯片。于是我開始對這個芯片進行了學習,希望可以使用它做出一些項目。調試起來還是廢了一番周折,因為廠家給出的數據手冊并不清楚,所以很多東西都是摸著石頭過河,在前前后后調試了大概3天左右,終于可以正常的收發數據,下面我就分享一些學習的過程。
拿到一個新的芯片,想要了解他就一定要去下載數據手冊,一般在網上都可以找到,有中文的有英文的,遇到英文的數據手冊就需要具備一定的英語閱讀能力才可以理解清楚意思。這個芯片的數據手冊我也會放到文章的最后,大家可以下載來學習。
1.基本介紹
這款芯片使用的是2.4G頻段進行通信,可以設置通信頻率,發射速率以及發射功率,電源使用2.2V到3.6V的電壓都可以,發射時電流在20毫安左右,接受電流在18毫安左右,可以說比較省電的一款芯片。芯片內置倍頻電路,但是沒有內置晶振,所以需要外接一顆12Mhz的晶振,晶振的補償電容芯片已經內置了,所以無需外接。對于芯片與MCU的通信方面,使用的是SPI總線協議,最高支持10Mhz的速度。為了更好的兼容一些低速的MCU,這款芯片內置FIFO緩存器。
如下圖給出了典型應用電路:
2.通信代碼編寫
看完了這些參數,我對這款芯片也有了一些了解,下面要做的就是編寫程序進行通信了。我使用的是STC8單片機來對這個芯片進行控制,由于模塊采用的是4線的SPI總線通信,盡管一些STC的單片機上帶有硬件的SPI總線接口,但是為了程序的可移植性,整個程序使用軟件模擬SPI總線協議來進行與LT8920的通信。
既然是使用SPI通信,那么肯定數據手冊里面就有一些關于通信時序的說明,我在數據手冊里面找到如下:
可以看到芯片是在時鐘的下降沿讀取MOSI線上的數據和在MISO線上發送數據,并且先發送高位,再發送低位。并且可以看出一次需要讀取2字節(16位)的數據,看完這個時序圖,我就很容易的寫出了SPI接口的寫入函數。
對于從LT8920上讀取寄存器數據,需要注意的一點是每次SPI通信的地址最高位是讀寫標志位,寫入的時候是0,讀取的時候是1,所以在SPI讀取函數中,所有的地址都需要加0x80,如圖:
寫完這兩個函數之后,寄存器的配置就可以使用這兩個函數了,但是我注意到手冊中說到,對于FIFO寄存器(就是存儲發射和接受數據的寄存器),可以采用單字節讀取或者寫入,那么我就又寫了兩個函數,一次讀取和寫入分別都是單字節的,如圖:
寫完這兩個函數,基本的SPI通信就沒問題了,下面我就開始對LT8920的寄存器進行逐一的了解與設置,這耗費了較多的時間。
3.寄存器設置與初始化
對于在LT8920中的寄存器,其地址和其寄存器的編號相同,這就給了編寫代碼時的便利性,需要操作那個寄存器只需要知道其的編號即可,在LT8920中,一共有近50多個寄存器,對這些寄存器的逐個配置,就可以使用LT8920來收發數據了。但是遺憾的是,手冊中并沒有逐個逐個說明寄存器的作用,而是只說明了幾個重要的寄存器的作用以及配置,但是在手冊最后給出了所有寄存器的推薦配置值,于是我參考了手冊最后的推薦值以及一些網絡上的調試經驗,給出了每個寄存器的初值,如圖:
可以看出,上電之后先給LT8920進行復位,然后延時5ms,等待晶振輸出頻率穩定之后就可以開始初始化端口了,我默認使用的都是準雙向口,所以將端口設置為1的時候也是作為輸入模式。下面是LT8920的初始化時序:
4.接受數據程序
初始化完畢之后就可以開始發送接收數據了,這個芯片有一個外置引腳PKT來指示芯片的FIFO緩存中是否有數據,當有數據的時候,整個外置引腳會被置1,沒有的時候則會被置0。所以在編寫接受數據的程序時,我只需要不停地判斷這個引腳是不是高電平,如果是,那么就進入處理函數,不是就不進入。
對于從LT8920的FIFO中讀取接受到的數據,其第一字節表示的是整個數據的長度,單位是字節,所以我在從LT8920的FIFO中讀取數據時,先讀取一個字節,那么這個字節表示的就是整個數據的長度。具體實現的程序如下:
5.發射數據程序
Lt8920的發射其實也比較簡單,向FIFO中寫入數據,然后打開發射器等待發射完成(PKT置1),之后讀取自動應答寄存器,如果收到應答的話,就代表一次通信成功,實現的代碼如下:
發射程序和接受程序都介紹完畢,如果您是使用的其他單片機,如stm32或者arduino,應該整體的配置思路我都講解的比較清晰,也比較容易就調試好這款模塊。所以大家如果有什么關于這個模塊的問題,歡迎來咨詢我,我的QQ:2877137721。在近期準備使用這個模塊來做一些小巧的項目,請大家期待。
全部datasheet資料51hei下載地址:
C77997_LT8920編帶_2016-10-09.zip
(923.57 KB, 下載次數: 443)
2019-4-14 16:37 上傳
點擊文件名下載附件
|