⑴ 關於spi模式的命令
7 SPI模式
7.1 介紹
SPI模式由一個由基於快閃記憶體SD存儲卡提供的次要通信協議組成.此模式是SD存儲卡協議的子集。此介面在上電(CMD0)後的每一個復位命令期間被選擇。
SPI標准只定義物理鏈接,而不提供數據傳輸協議。SD存儲卡SPI執行利用SD存儲卡協議和命令集的子集。
7.2 SPI匯流排協定
SD卡是基於命令和數據流,這些命令和數據流以一個起始位開始,以停止位結束的.SPI通道是面向位元組的.每個命令或數據塊都是由多個8位位元組構成,且每個位元組與CS片選信號對齊(例如:此長度是8時鍾周期的倍數)。
類似於SD存儲卡協議,SPI簡訊是由命令,響應和數據塊環組成。所有的通信都由主機控制,主機通過拉低CS來啟動每個匯流排事務。
SPI模式下的響應行為有三個方面和SD模式不同:
1、被選擇的卡總是回應命令。
2、使用附加的(8位)響應結構。
3、當卡遇到一個數據檢索問題時,它會用一個響應錯誤來回應(替換預期的數據塊),而不是SD模式中的超時。
除了命令響應之外,每一個在寫操作期間發送到卡的數據塊將以一個特殊的數據響應令牌來被響應。一個數據塊可能和一個寫塊(WRITE_BL_LEN)一樣大,也可能和一個信號字一樣小。部分塊的讀/寫操作都被卡中CSD寄存器中所敘述的被選擇的項使能。
7.2.1 模式選擇
SD卡從SD模式中喚醒。如果CS信號在復位命令(CMD0)被接收期間被拉低,並進入空閑模式,如果認為是SD模式被需求則不會響應此命令,仍在SD模式下。如果SPI模式被需求,則卡將會切換到SPI,且用SPI模式R1響應。
唯一返回SD模式的方法是進入上電周期。在SPI模式下,SD存儲卡協議狀態機不被遵守。所有的在SPI模式下被支持的SD存儲卡命令總是可用的。
7.2.2 匯流排傳輸保護
每個在匯流排上傳輸的SD存儲卡令牌被CRC位保護。在SPI模式下,SD存儲卡提供一個非保護模式。此模式使系統用可靠的數據鏈接來建立,以排除(否定)硬體或軟體需要執行CRC生成和校驗功能。
在非保護模式下,命令、響應和數據令牌的CRC位在令牌中仍被需要,盡管,對於發送器,它們被定義成「don't care」,且被接收器忽略。
在非保護模式下,SPI介面被初始化。盡管,RESET命令用於使卡切換到SPI模式,但它是在SD模式下被卡接收,所以,必須有一個有效的CRC域。
因為CMD0沒有參數,所有的域的內容(包括CRC域)都是常數,不需要在運行時間計算出來。一個有效的復位命令是:
0x40,0x0, 0x0, 0x0, 0x0,0x95
主機可以用CRC_ON_OFF命令(CMD59)開關卡的CRC選項。
7.2.3 讀數據
SPI支持單塊讀和多塊讀操作(在SD存儲卡協議中的CMD17 OR CMD18)。當接收一個有效的讀命令後卡將在一個在SET_BLOCK_LEN(CMD16)定義了長度的數據令牌之後,用一個響應令牌作出回復。(參考Figure41)
Figure41 單塊讀操作
一個有效的數據塊被添加了一個16位CRC,此CRC由CCITT標准多項式X16+X12+X5+1生成。
能被READ_BL_LEN給出的最大的塊的的長度大CSD中定義了。如果片塊被允許,塊長度可以是1~MAX塊大小之間的任何長度。否則,數據讀的有效塊長度只是在READ_BL_LEN中給出的值。
起始地址可以是在卡的有效地址范圍內的任何位元組地址。但是,每一個塊,必須包含入一個單一的物理卡扇區中。
如發生一個可修復錯誤,卡不會傳輸任何數據,而是發送一個特定的數據錯誤令牌到主機。
Figure42:讀操作-數據錯誤
⑵ nrf24l01模塊中c程序spi問題 reg_val = SPI_RW(0);
不是的
,spi_rw(reg)返回的值不是a的值,這里返回的值沒有意義是被丟棄掉了的,緊接著下一次spi_rw(0)返回的才是。
一次spi操作一般在cs(片選)的一個周期進行,
在讀取寄存器值時一般需要調用2次以上的spi_rw,
比如讀取寄存器reg,
首先
拉低cs線(片選)->調用spi_rw(reg),這里的reg實際上是0...1111按位與上reg,因為reg這個地址沒有用到最高位,最高位為0代表讀地址操作,1代表寫地址操作。->再次調用spi_rw(0)
,這里為0是因為讀操作,如果是寫那麼就是寫地址reg的值,即spi_rw(val)
->拉高cs線結束spi操作。
spi讀寫時是先寫地址與操作或命令的一個byte,再讀寫值的一個byte,也就是clk周期是2個byte也就是2*
8bit
=
16個周期的。
地址與操作的一個byte:這個位元組的最高位是控制讀寫的,讀寫分別為
0b0xxxxxxx或0b1xxxxxxx
的形式,
xxxxxxx中的最後幾位是地址。中間幾位是spi命令。
值的一個byte:
如果是讀,那麼全為0,如果是寫,那麼就是要寫的值。如果是命令就看命令的定義了。
在時鍾線電平的上升yuan寫1位,的在時鍾下降yuan讀1位的,當這8個時鍾周期完結那麼就得到了8位正好一個位元組。當然如果寄存器的數據寬度是2個位元組時,相應的這里就要是16個時鍾周期2個位元組。
沒用過nrf24l01模塊,但一般spi的過程就是這樣,關鍵要看你要訪問的模塊的spec文檔,裡面都描述了這些讀寫,控制的時序圖。
⑶ 單片機的SPI通信怎麼用
一個前提,就是時鍾線始終是主機來產生的如果你是使用單片機內部SPI模塊的話只要往主機的發送寄存器裡面放入一個位元組,主機會在時鍾線自動產生8個脈沖,當主機的時鍾線,產生8個脈沖的時候,那麼此時 主機 從機發送寄存器發出一個位元組 接收寄存器接收到主機發送的位元組接收寄存器接收從機發送的一個位元組 發送寄存器發出一個位元組至於哪些數據是你要的,哪些數據是不要的,這個就根據你的數據通訊規范來選取了一般來說,主機在發送給從機的命令的時候,此時主機接收寄存器的接收到的數據是沒有用的,那就不去出來,如果要讓從機發送一個數據回來,那就隨便往發送寄存器裡面寫入一個數據,讓時鍾線自動產生8個脈沖,從而讓從機把他發送寄存器的數據移動主機的接收寄存器來
⑷ CAD中spI是什麼命令
樓上不對
spline的abbr是spL,不是spI,SPi是螺旋線命令 即三維建模環境中的helix
如圖