1、先查看也硬件電路,一般都是單片機作為master,其他芯片作為slave。單片機的MOSI對應從機的SI,單片機的MISO對應從機的SO,如果兩個引腳接反了,那是怎么調試都沒有效果的。
2、單片機硬件spi的配置,spi我們有四種模式,模式要和芯片的模式一直,比如:mcp2515,支持高速SPI接口(10MHz):
支持 0,0 和 1,1 的 SPI 模式,這個可以網上找找,我這里也用圖說明一下
說明如下
CPOL CPHA
MODE0 0 0
MODE1 0 1
MODE2 1 0
MODE3 1 1
CPOL: SPI空閑時的時鍾信號電平(1:高電平, 0:低電平)
CPHA: SPI在時鍾第幾個邊沿采樣(1:第二個邊沿開始, 0:第一個邊沿開始)
MODE0和MODE3最常用。
3、spi的速度,有的芯片,spi的速度有最低速度的要求,比如ads1259,不能太低,我使用的stm32配置為2.25Mbits/s,有的spi芯片是可以低速的。
4、調試的時候,可以先看看有沒有clk,和自己配置是否相同。
5、然后單片機先把外設spi芯片復位后,先別着急寫,可以看看讀取芯片的寄存器是否和datasheet的默認值一致,如果一致,說明讀取基本沒有問題。
6、spi讀取函數,要查看數據手冊,在數據手冊中,摘取了讀取指令時序如下:
幾個注意點:
1、紅色的地方是不用添加任何延時的,寫c語句的時候,直接spi發送即可。
2、cs的地方,數據手冊建議是:先拉高,后拉低,再次寫入數據,這樣就可以做到時序上的同步,能快速的寫入。
7、mcp2515還有一個快速讀取指令,不用寫地址,就可以讀取的,紅色的地方,如果還想繼續讀取的,就不用拉高cs線,
比如我用can的時候,統一使用8個字節,那么發送完寫的指令(比如0x91)后,連續讀取8個數據,保存存到數組中,最后才拉高cs線。這樣就可以加快spi的讀取速度。