spi 是英語serial peripheral inte***ce的縮寫,顧名思義就是序列外圍裝置介面。是motorola首先在其mc68hcxx系列處理器上定義的。c1101的引腳為 vcc gnd csn si so sck gd00 gd02 後兩個貌似可以不接,他們能產生中斷
spi,是一種高速的,全雙工,同步的通訊匯流排,並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為pcb的布局上節省空間,提供方便,主要應用在 eeprom,flash,實時時鐘,ad轉換器,還有數字訊號處理器和數碼訊號解碼器之間。
spi介面一般使用4條線通訊:
miso 主裝置資料輸入,從裝置資料輸出。
mosi 主裝置資料輸出,從裝置資料輸入。
sclk時鐘訊號,由主裝置產生。
cs從裝置片選訊號,由主裝置控制。
spi工作原理總結:
硬體上為4根線。
主機和從機都有乙個序列移位暫存器,主機通過向它的spi序列暫存器寫入乙個位元組來發起一次傳輸。
序列移位暫存器通過mosi訊號線將位元組傳送給從機,從機也將自己的序列移位暫存器中的內容通過miso訊號線返回給主機。這樣,兩個移位暫存器中的內容就被交換。
外設的寫操作和讀操作是同步完成的。如果只進行寫操作,主機只需忽略接收到的位元組;反之,若主機要讀取從機的乙個位元組,就必須傳送乙個空位元組來引發從機的傳輸。
程式配置過程:
w25q128(w25q64)將16m(8m)的容量分為256(128)個塊(block),每個塊大小為64k位元組,每個塊又分為16個扇區(sector),每個扇區4k個位元組。w25qxx的最小擦除單位為乙個扇區,也就是每次必須擦除4k個位元組。這樣我們需要給w25qxx開闢乙個至少4k的快取區,這樣對sram要求比較高,要求晶元必須有4k以上sram才能很好的操作。①配置相關引腳的復用功能,使能spix時鐘
void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);
②初始化spix,設定spix工作模式
void spi_init(spi_typedef* spix, spi_inittypedef* spi_initstruct);
③使能spix
void spi_cmd(spi_typedef* spix, functionalstate newstate);
④spi傳輸資料
void spi_i2s_senddata(spi_typedef* spix, uint16_t data);
uint16_t spi_i2s_receivedata(spi_typedef* spix) ;
⑤檢視spi傳輸狀態
spi_i2s_getflagstatus(spi2, spi_i2s_flag_rxne);
void spi2_init(void)
//spi 速度設定函式
//speedset:
//spi_baudrateprescaler_2 2分頻
//spi_baudrateprescaler_8 8分頻
//spi_baudrateprescaler_16 16分頻
//spi_baudrateprescaler_256 256分頻
void spi2_setspeed(u8 spi_baudrateprescaler)
//spix 讀寫乙個位元組
//txdata:要寫入的位元組
//返回值:讀取到的位元組
u8 spi2_readwritebyte(u8 txdata)
spi_i2s_senddata(spi2, txdata); //通過外設spix傳送乙個資料
retry=0;
while (spi_i2s_getflagstatus(spi2, spi_i2s_flag_rxne) == reset) //檢查指定的spi標誌位設定與否:接受快取非空標誌位
return spi_i2s_receivedata(spi2); //返回通過spix最近接收的資料
}
STM32之間SPI通訊
這幾天實驗室比較忙,所以部落格這邊停了一下,繼續吧。繼串列埠中斷後,大家可以嘗試微控制器間串列埠通訊,這裡就不再多贅述。串列埠完了之後,我接著學的就是spi通訊了,作為hello moto公司推出的這種4線全雙工通訊,很節約pcb布局空間,但缺點就是沒有指定的流控制,沒有應答機制來確定訊號收到與否,...
STM32 快速上手SPI
基本的部分前文 stm32 spi 已經介紹過了,這裡只記怎麼用。stm32f103zet6的三個spi的引腳分別為 spi1在apb1時鐘下,spi2和spi3在apb2時鐘下。void spi i2s deinit spi typedef spix void spi init spi typed...
FPGA與STM32 模擬32位SPI通訊(二)
1 下午又繼續實驗,發現fpga不輸出資料了,但是sck訊號還有,情況比上午還糟,用signaltap 了一陣也沒有結果,後來發現是杜邦線松了。教訓是以後接線時鬆的線務必不要將就,尤其是在接比較密集的杜邦線,線鬆動了會很難排查,熟悉了signaltap的 但仿不出全部的32個sck訊號,取樣率設到6...