1. 程式人生 > >nrf52832用I2C和SPI兩種方式驅動LIS2DS12

nrf52832用I2C和SPI兩種方式驅動LIS2DS12

本來在這裡寫了些牢騷話,但是想想這是記錄技術文件,還是廢話少說為好

直奔主題

先介紹下LIS2DS12,ST公司出的gsensor,內部自帶mcu ,可以輸出步數、敲擊、翻腕等行為結果,還提供了一個256級的FIFO(可以儲存256組三軸資料),FIFO具有多種模式,具體參照datasheet設定

LIS2DS12的具體驅動方法不細緻描述了,這裡只記個大概,提個醒。

晶片支援兩種通訊方式:I2C 和 SPI 。其中SPI又分為三線SPI 和四線SPI

用CS引腳來決定使用哪種方式:
CS接高電平,則使用I2C
CS接低電平,則使用SPI
這裡寫圖片描述

注意使用SPI 時,不要把CS的電平給固定住,CS引腳由SPI驅動控制就OK(我之前理解錯了,將其用GPIO固定低電平。。折騰半天瞎懵逼還在想為什麼能讀出device ID但是不能操作暫存器)

採用I2C驅動時,沒什麼好說的,引腳定義參照datasheet就好,注意SCL和SDA要掛外部上拉電阻。
I2C的器件地址是可以設定的,demo code中的地址是其中一種8位地址,在填入I2C驅動時要先右移1位再加上R/W bit
這裡寫圖片描述

採用SPI驅動時,需要注意晶片支援的是SPI_MODE3 也就是SCK常態為高電平,並且在SCK的上升沿採集資料

在寫資料時,對暫存器地址做點處理: bit7 代表本次操作型別是讀還是寫

MSB傳輸方式--暫存器地址的bit7就是圖中的bit0(RW)

其他部分就是中規中矩的參照datasheet就能完成

我的程式碼修改:
這裡寫圖片描述

修改完成後,讀取device ID測試,並且對暫存器進行操作,寫入數值再讀出來檢視是否寫入成功