最近使用了433MHZ的模塊進行了一個通訊項目,選用的是SX1208模塊,對接了RTOS和Linux兩個操作系統,使用心得如下:
1. 首先要拿來datasheet看一遍,通攬一下它的功能。可以得到一些信息,比如
- 它支持硬件AES加密,甚至可以作為硬件AES引擎使用,注意限制64Byte長度,夠用了。
- 它支持溫度的測量,在高低溫箱里面我測試了一天,發現它線性度很好。一般來說數據相差1就是相差一度。初始化要校准。
- 因為它是SPI通訊,所以用GPIO模擬就可以了,反正速率不高。跨芯片平台起來很方便。
- 他有RSSI測量的功能,在中斷里面讀取就可以了,這功能輔助距離測量,打點log是可以的
2.因為它這個datasheet東西很多,物理層的很多參數也可以調整。所以拿現成的代碼拿來修改比較快,可以大大加快開發進度。在網上找到了類似的代碼,把它看懂一遍然后重寫。發現它里面有一個邏輯有問題,死循環讀取TX中斷腳的電平來判斷數據有沒有發送完,我在RTOS上面還是可以正常跑的,但是linux下面就掛死了,因為中斷里面不能卡太久的(while死循環), 會把linux內核搞瘋掉的。所以還是要進行中斷和TX線程做分離的。對於RST腳是一定要用到的, 不然會不穩定。底層的緩存隊列也要搞好。
下圖是中斷腳的映射關系,一般來說,DIO0就可以搞定了。
3.當底層TRX代碼弄好,性能測試完畢之后,就開始自己寫一個MAC協議了。當然這個MAC協議參考下WiFi的幀格式,把WiFi協議精簡做一下就好了。自己實現完這個MAC的時候做一下壓力測試,TRX同時打,跑了幾天還算穩定的,跑的時候要用不同的datarate跑,收集下原始數據,這個階段是比較重要的,因為協議設計的不好會把速率拖慢的。。要注意的MAC層是一定要做random backoff,不然根據實測結果是會陷入死區,數據永遠發送不成功。實測四五個SX1208在環境里面跑數據完全是沒問題的。當然不要給它太大的數據吞吐量,本來就不是為了性能而准備的。額外提一下,AES加密和物理頭過濾一定要做,不然別人收到你的數據就不好了。做一下也不難的,因為是硬件實現,所以沒有負擔。和WiFi配網類似,這里也要做一個私有的配網。加入按鈕和LED之后也可以很簡單地做起來,實測OK。
4.當MAC層實現好之后就可以做應用層了。這個就是各自發揮的步驟了,不再贅述。對於linux下面需要做成驅動,對於buildroot來說可以放在一個軟件包里面搞成ko的形式,比較方便,這樣就不要去編譯內核了。對於應用來說,這個模塊占用了RST,中斷和SPI 四個腳之后腳可能不夠用,拿一個芯片做一下GPIO擴展,老板說買74HC595,那就買個直插的74HC595(便宜),自己焊個電路,修改下外設代碼,一天內也很快可以搞定了。加了這個芯片還可以多出幾個腳,等以后產品形態變了再使用也不遲。
5.硬件上來說,拿到的模塊沒有屏蔽殼,驗證,焊接,吹電路容易搞壞還是要小心一點,這個東西需要天線匹配。讓硬件PCB弄好,最后拿矢網搞定一下。
6.展望:這東西有好幾個信道可以用,后面考慮在Master端做下跳頻,也就是auto channel selection功能。