最近正在調(diào)試一個(gè)芯片的評(píng)估板,其中配置寄存器使用的是SPI通信協(xié)議。其實(shí)很多芯片寄存器的配置都用到了SPI通信協(xié)議,我們今天就需要實(shí)現(xiàn)這個(gè)SPI通信協(xié)議。
首先,我們需要了解SPI協(xié)議的基本內(nèi)容,SPI主要有四根傳輸線,分別為SPI_CLK, SPI_EN, SPI_DI, SPI_DO。
主設(shè)備會(huì)將數(shù)據(jù)時(shí)鐘通過(guò)SPI_CLK傳送給從設(shè)備,從設(shè)備根據(jù)SPI_CLK進(jìn)行接收發(fā)送工作;SPI需要注意的是極性CPOL和相位CPHA;CPOL指的是時(shí)鐘極性,CPHA指的是時(shí)鐘相位。一個(gè)時(shí)鐘周期內(nèi),會(huì)有兩個(gè)跳變沿,它既有可能是上升沿也有可能是下降沿;CPOL的值決定了SPI數(shù)據(jù)時(shí)鐘在空閑狀態(tài)下保持為高電平(CPOL=1)還是低電平(CPOL=0),CPHA的值決定了SPI的采樣邊沿是第一個(gè)邊沿(CPHA=0)還是第二個(gè)邊沿(CPHA=1)。
舉個(gè)例子,從某芯片手冊(cè)上看,該芯片手冊(cè)SPI的時(shí)序圖如下:

芯片SPI寫時(shí)序
可以看到,SPI_CLK在開(kāi)始和結(jié)束時(shí)都保持了低電平狀態(tài),所以CPOL=0,而每次SPI_DI在SPI_CLK的上升沿改變電平值,在SPI_CLK的下降沿保持電平不變,所以可以推斷,SPI的采樣邊沿是第二個(gè)邊沿,CPHA=1;
從圖中我們還可以知道,SPI需要工作的時(shí)候,SPI_ENB需要拉低,這就是SPI的片選信號(hào),由于SPI沒(méi)有尋址機(jī)制,所以需要使用片選信號(hào)選擇總線上不同的設(shè)備。
所以說(shuō),SPI_EN的工作最為輕松,在需要發(fā)送數(shù)據(jù)的時(shí)候?qū)PI_EN反相,在發(fā)送結(jié)束后再反相回來(lái);SPI_CLK就是在不斷地發(fā)送周期性方波;SPI_DI則是在恰當(dāng)?shù)臅r(shí)機(jī)根據(jù)要發(fā)送的數(shù)據(jù)進(jìn)行高低電平轉(zhuǎn)換,然后保持不變。

芯片SPI讀時(shí)序
這里簡(jiǎn)單說(shuō)一下這個(gè)芯片SPI的協(xié)議內(nèi)容,發(fā)送的第一位(MSB)決定了SPI讀寫操作,為1是寫入,為0是讀??;接下來(lái)發(fā)送5位0,接著發(fā)送10位的寄存器地址;如果SPI是寫操作,繼續(xù)寫入8位數(shù)據(jù),否則開(kāi)始接收SPI_DO上的數(shù)據(jù)。

指令解釋
這里我列出了狀態(tài)機(jī)跳轉(zhuǎn)的狀態(tài):

首先狀態(tài)機(jī)不管在任何狀態(tài)都會(huì)回到IDLE空閑狀態(tài),在IDLE空閑狀態(tài)下,接收到發(fā)送數(shù)據(jù)的命令就會(huì)跳轉(zhuǎn)到WRITE_ADDR寫地址狀態(tài),在寫完前16位數(shù)據(jù)后,根據(jù)第一位的值決定是跳轉(zhuǎn)到WRITE_DATA狀態(tài)接著向芯片寄存器寫入數(shù)據(jù)還是轉(zhuǎn)向READ狀態(tài)讀取寄存器的值;操作結(jié)束后最終狀態(tài)機(jī)回到IDLE空閑狀態(tài)。
其實(shí)只需要理解芯片手冊(cè)上SPI的時(shí)序圖,并用verilog將其描述出來(lái),就已經(jīng)成功了一大半。這里我們實(shí)操前的準(zhǔn)備工作都做完了,接下來(lái)就是開(kāi)始碼verilog代碼并進(jìn)行仿真,上板測(cè)試等等。待我整理出來(lái)之后,再與大家一同討論吧。
-
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129943 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
499瀏覽量
29132 -
SPI通信
+關(guān)注
關(guān)注
0文章
40瀏覽量
11969 -
Verilog語(yǔ)言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8790 -
MSB
+關(guān)注
關(guān)注
0文章
14瀏覽量
8529
發(fā)布評(píng)論請(qǐng)先 登錄
Verilog設(shè)計(jì)寄存器
fpga與spi通信協(xié)議
SPI通信協(xié)議
SPI通信協(xié)議
對(duì)串口中斷的通信協(xié)議理解與應(yīng)用
SPI是什么?SPI通信協(xié)議說(shuō)明
STM32如何模擬SPI通信協(xié)議
SPI通信協(xié)議
通信協(xié)議:SPI
通信協(xié)議(SPI)
plc通信協(xié)議 plc通信原理
SPI通信協(xié)議原理是什么
scon寄存器在串口通信中的實(shí)際應(yīng)用
配置芯片寄存器的SPI通信協(xié)議的verilog實(shí)現(xiàn)
評(píng)論