1. 程式人生 > >SPI通訊邏輯分析儀測試總結

SPI通訊邏輯分析儀測試總結

1  今天測試的時候發現數據很怪測試的時鐘訊號不對其他的訊號 DI 和DO也不對此時應該檢查軟體設定是否正確。

邏輯分析儀需要設定好如下幾個地方

1 取樣頻率需要提高 

2  SPI通訊模式是否設定正確,因為SPI有四種通訊模式當spi通訊的時候只能選擇其中一種,邏輯分析儀的通訊設定也只能是設定為其中的一種(程式設計的時候選擇的那一種)


3 需要弄清楚是在時鐘的下降沿進行資料的輸入還是上升沿進行資料的輸入。


SPI四種模式區別

 

spi四種模式SPI的相位(CPHA)和極性(CPOL)分別可以為0或1,對應的4種組合構成了SPI的4種模式(mode)


Mode 0 CPOL=0, CPHA=0 
Mode 1 CPOL=0, CPHA=1
Mode 2 CPOL=1, CPHA=0 
Mode 3 CPOL=1, CPHA=1

時鐘極性CPOL: 即SPI空閒時,時鐘訊號SCLK的電平(1:空閒時高電平; 0:空閒時低電平)
時鐘相位CPHA: 即SPI在SCLK第幾個邊沿開始取樣(0:第一個邊沿開始; 1:第二個邊沿開始)

sd卡的spi常用的是mode 0 和mode 3,這兩種模式的相同的地方是都在時鐘上升沿取樣傳輸資料,區別這兩種方式的簡單方法就是看空閒時,時鐘的電平狀態,低電平為mode 0 ,高電平為mode 3。

(注意紅色框) 如果CPOL=0, CPHA=0 ,則miso資料是0x83(10000011) 如果CPOL=0, CPHA=1 ,則miso資料是0x07(00000111) 在用核心自帶的linux-kernel/xlnx-4.0/Documentation/spi/spidev_test.c例子,讀寫核心的spidev.c裝置的時候, /spidev_test -r 69 -w 7 寫入地址69暫存器,數值7 ./spidev_test -r 69 讀出地址69暫存器數值:0x83,以為程式程式碼有bug
./spidev_test -H -r 69 讀出地址69暫存器數值:0x07,應該在SCLK第2個邊沿開始取樣(帶H引數表示CPOL=0, CPHA=1),這才讀對了。 在除錯ad9631時,用預設spi mode讀寫總返回0x83,以為程式有問題,查查spi mode原理後,再對比波形圖,才知道ad9631的mode=1