Spi控制器及其通信方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及外圍串行總線SPI接口,尤其涉及SPI控制器及利用該控制器實(shí)現(xiàn)的通信方法。
【背景技術(shù)】
[0002]隨著超大規(guī)模集成電路的發(fā)展,SOC (System on Chip,系統(tǒng)級(jí)芯片)設(shè)計(jì)越來(lái)越復(fù)雜。IP核(Intellectual Property core)是一段具有特定電路功能的硬件描述語(yǔ)言程序,該程序與集成電路工藝無(wú)關(guān),可以移植到不同的半導(dǎo)體工藝中去生產(chǎn)集成電路芯片。IP核具有規(guī)范的接口協(xié)議,良好的可移植性與可測(cè)試性,為系統(tǒng)開發(fā)提供了可靠的保證。研宄IP復(fù)用技術(shù)具有重要意義。
[0003]SPI接口是Motorola公司推出的一種同步串行接口技術(shù)。SPI具有結(jié)構(gòu)簡(jiǎn)單、通訊速度快等顯著優(yōu)點(diǎn),可以實(shí)現(xiàn)CPU與各種外圍設(shè)備(如FLASH、IXD顯示驅(qū)動(dòng)器、網(wǎng)絡(luò)控制器、AD轉(zhuǎn)換器、DA轉(zhuǎn)換器和其他CPU等)以串行方式進(jìn)行通信。如果能將CPU的各種外圍設(shè)備視為不同的IP核,視為各種IP核的設(shè)備基于SPI協(xié)議與CPU進(jìn)行通信,將大大簡(jiǎn)化芯片的設(shè)計(jì)難度。但是目前SPI接口設(shè)計(jì)還不夠靈活,一是當(dāng)接口傳輸?shù)乃俣认鄬?duì)于CPU較慢時(shí),接口和CPU的操作時(shí)序就會(huì)不一致,導(dǎo)致SPI接口適用范圍比較窄;二是在通信過(guò)程中很容易出現(xiàn)數(shù)據(jù)傳輸錯(cuò)位和丟失的錯(cuò)誤,得到的數(shù)據(jù)并不是實(shí)際需要的數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0004]針對(duì)現(xiàn)有技術(shù)存在的缺陷,為了既保證接口操作的高速性,也滿足了慢速接口器件的操作時(shí)序的要求。根據(jù)本發(fā)明的一個(gè)方面,提出了一種SPI控制器,所述控制器分別與CPU和外部串行設(shè)備相連,所述控制器包括:接口模塊、寄存器組模塊、時(shí)鐘分頻模塊、發(fā)送數(shù)據(jù)緩沖器、接收數(shù)據(jù)緩沖器、延時(shí)發(fā)送模塊、發(fā)送/接收控制邏輯模塊、中斷產(chǎn)生模塊,其中,
[0005]接口模塊配置為根據(jù)總線的時(shí)序?qū)拇嫫鹘M模塊讀寫,以按邏輯完成接口模塊與CPU之間的通信;
[0006]寄存器組模塊配置為通過(guò)接口模塊讀寫操作,完成所述控制器的控制參數(shù)的配置;
[0007]時(shí)鐘分頻模塊配置為根據(jù)寄存器組模塊中的預(yù)分頻系數(shù)和再分頻系數(shù)產(chǎn)生串行輸出時(shí)鐘;
[0008]發(fā)送數(shù)據(jù)緩沖器配置為緩存通過(guò)接口模塊寫入的待傳輸數(shù)據(jù),直到外部串行設(shè)備通過(guò)發(fā)送/接收控制邏輯模塊將所述待傳輸數(shù)據(jù)讀出;
[0009]接收數(shù)據(jù)緩沖器配置為用于緩存來(lái)自發(fā)送/接收控制邏輯模塊從外部串行設(shè)備發(fā)送的數(shù)據(jù),直到CPU通過(guò)接口模塊將所述發(fā)送的數(shù)據(jù)讀出;
[0010]中斷產(chǎn)生模塊配置為根據(jù)接收數(shù)據(jù)緩沖器的狀態(tài)信息產(chǎn)生接收數(shù)據(jù)緩沖器的服務(wù)中斷、接收數(shù)據(jù)緩沖器的溢出中斷,根據(jù)發(fā)送數(shù)據(jù)緩沖器的狀態(tài)信息產(chǎn)生發(fā)送數(shù)據(jù)緩沖器的服務(wù)中斷。
[0011]本發(fā)明的SPI控制器能夠滿足不同串行外圍設(shè)備接口的時(shí)序要求,使得主機(jī)可以和連接有不同處理速度的串行外圍設(shè)備快速通信,適應(yīng)范圍更廣泛。
[0012]在一些實(shí)施方式中,寄存器組模塊包括控制寄存器、數(shù)據(jù)寄存器、校驗(yàn)控制寄存器、中斷控制寄存器、延時(shí)發(fā)送寄存器、DMA (Direct Memory Access,直接內(nèi)存訪問(wèn))控制寄存器、狀態(tài)寄存器和時(shí)鐘分頻寄存器。
[0013]在一些實(shí)施方式中,延時(shí)發(fā)送模塊包括指令解析模塊和倒計(jì)時(shí)計(jì)數(shù)器模塊,
[0014]所述指令解析模塊配置為解析來(lái)自寄存器組模塊的延時(shí)發(fā)送寄存器、發(fā)送數(shù)據(jù)緩沖器、發(fā)送/接收控制邏輯模塊的命令,并把命令解析結(jié)果發(fā)送給倒計(jì)時(shí)計(jì)數(shù)器模塊。
[0015]所述倒計(jì)時(shí)計(jì)數(shù)器模塊配置為根據(jù)指令解析模塊命令解析結(jié)果,對(duì)發(fā)送數(shù)據(jù)緩沖器中數(shù)據(jù)發(fā)送到間間隔進(jìn)行控制。
[0016]在一些實(shí)施方式中,發(fā)送/接收控制邏輯模塊包括:發(fā)送控制邏輯模塊和接收控制邏輯模塊,
[0017]發(fā)送控制邏輯模塊包括:CRC(Cyclic Redundancy Check,循環(huán)冗余校驗(yàn))編碼模塊、并轉(zhuǎn)串邏輯模塊和傳輸結(jié)束控制模塊,
[0018]接收控制邏輯模塊包括:數(shù)據(jù)緩存區(qū)模塊、串轉(zhuǎn)并邏輯模塊、CRC校驗(yàn)?zāi)K和接收超時(shí)控制模塊。
[0019]在一些實(shí)施方式中,所述的控制器,還包括:
[0020]DMA接口,設(shè)置為通過(guò)接口模塊與DMA交互數(shù)據(jù)。
[0021]根據(jù)本發(fā)明的另一個(gè)方面,提出了一種利用SPI控制器通信的方法,包括以下步驟:
[0022]I)將上述控制器分別與CPU與外部串行設(shè)備通信連接;
[0023]2)基于CPU和外部串行設(shè)備的接口時(shí)序,設(shè)置所述控制器的延時(shí)的控制參數(shù);
[0024]3)所述控制器接收CPU的并行數(shù)據(jù),并根據(jù)所述延時(shí)的控制參數(shù)將所述并行數(shù)據(jù)轉(zhuǎn)化為串行數(shù)據(jù)后發(fā)送給外部串行設(shè)備;
[0025]4)所述控制器將接收的外部串行設(shè)備的串行數(shù)據(jù),并將所述串行數(shù)據(jù)轉(zhuǎn)化成并行數(shù)據(jù),以供CPU接收。
[0026]在一些實(shí)施方式中,上述步驟2)還包括:
[0027]設(shè)置所述控制器的校驗(yàn)參數(shù);
[0028]上述步驟3)還包括:
[0029]所述控制器根據(jù)所述校驗(yàn)參數(shù),將發(fā)送數(shù)據(jù)緩沖器中的數(shù)據(jù)發(fā)送到發(fā)送控制邏輯模塊中的CRC編碼模塊進(jìn)行CRC編碼,生成第一 CRC編碼,再將所述數(shù)據(jù)和第一 CRC編碼一并轉(zhuǎn)換成串行數(shù)據(jù)輸出至所述外部串行設(shè)備;
[0030]上述步驟4)還包括:
[0031]所述控制器根據(jù)所述校驗(yàn)參數(shù),將外部串行設(shè)備的數(shù)據(jù)和所述第一 CRC編碼一并發(fā)送到接收控制邏輯模塊中的串轉(zhuǎn)并邏輯模塊,同時(shí)將串行數(shù)據(jù)的數(shù)據(jù)部分發(fā)送到接收控制邏輯模塊中的CRC校驗(yàn)?zāi)K,并在CRC校驗(yàn)?zāi)K內(nèi)進(jìn)行CRC編碼,生成第二 CRC編碼,所述數(shù)據(jù)和所述第一 CRC編碼經(jīng)過(guò)串轉(zhuǎn)并邏輯模塊轉(zhuǎn)換成并行數(shù)據(jù)后,數(shù)據(jù)部分發(fā)送到數(shù)據(jù)緩沖區(qū)模塊,同時(shí)第一 CRC編碼發(fā)送到CRC校驗(yàn)?zāi)K;
[0032]比較所述第一 CRC編碼和所述第二 CRC編碼,
[0033]當(dāng)二者一致時(shí),將所述數(shù)據(jù)緩沖區(qū)模塊中的數(shù)據(jù)發(fā)送到接收數(shù)據(jù)緩沖器以供CPU接收,否則產(chǎn)生CRC錯(cuò)誤中斷。
[0034]在一些實(shí)施方式中,所述控制器的控制參數(shù)是通過(guò)對(duì)寄存器組模塊的讀寫操作,對(duì)所述控制器的工作模式、移位時(shí)鐘的極性、移位時(shí)鐘的相位、時(shí)鐘頻率、數(shù)據(jù)長(zhǎng)度、中斷功能、DMA功能、延時(shí)發(fā)送控制、CRC校驗(yàn)使能參數(shù)中的至少一者進(jìn)行設(shè)置。
[0035]本發(fā)明的提出的SPI控制器支持可編程的延時(shí)發(fā)送控制功能和CRC校驗(yàn)功能,保證了接口操作的高速性,也滿足了慢速接口器件的操作時(shí)序的要求,并且也能保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性和可靠性,適應(yīng)范圍更廣泛。
【附圖說(shuō)明】
[0036]圖1為本發(fā)明一實(shí)施方式的SPI控制器的結(jié)構(gòu)示意圖;
[0037]圖2為本發(fā)明一實(shí)施方式的SPI控制器的延時(shí)發(fā)送寄存器的幀格式示意圖;
[0038]圖3為本發(fā)明一實(shí)施方式的SPI控制器的延時(shí)發(fā)送寄存器各個(gè)位域功能示意圖;
[0039]圖4為本發(fā)明一實(shí)施方式的SPI控制器的發(fā)送控制邏輯模塊和與其連接的其它模塊的結(jié)構(gòu)示意圖;
[0040]圖5為本發(fā)明一實(shí)施方式的SPI控制器的接收控制邏輯模塊和與其連接的其它模塊的結(jié)構(gòu)示意圖;
[0041]圖6為本發(fā)明一實(shí)施方式的SPI控制器發(fā)送數(shù)據(jù)的流程示意圖;
[0042]圖7為本發(fā)明一實(shí)施方式的SPI控制器接收數(shù)據(jù)的流程示意圖;
[0043]圖8為本發(fā)明一實(shí)施方式的SPI控制器的接口時(shí)序示意圖。
【具體實(shí)施方式】
[0044]下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
[0045]圖1為本發(fā)明一實(shí)施方式的SPI控制器的結(jié)構(gòu)示意圖。如圖1所示,SPI控制器包括接口模塊I (該接口模塊可以根據(jù)總線類型,例如APB(Advanced Peripheral Bus,外圍總線)或者AHB (Advanced High performance Bus,系統(tǒng)總線)等協(xié)議,配置為APB接口模塊、AHB接口模塊等形式)、寄存器組模塊2、時(shí)鐘分頻模塊3、發(fā)送數(shù)據(jù)緩沖器4、接收數(shù)據(jù)緩沖器5、中斷產(chǎn)生模塊8、DMA接口 9這幾個(gè)常規(guī)接口模塊,以及功能模塊:延時(shí)發(fā)送模塊6、發(fā)送/接收控制邏輯模塊7 (該模塊包括發(fā)送控制邏輯模塊71和接收控制邏輯模塊72)。SPI控制器通過(guò)接口模塊I與CPU 11 (本實(shí)施例中的CPU也可以由單片機(jī)或者SOC芯片代替)和/或DMA 12相連,并通過(guò)發(fā)送/接收控制邏輯模塊7與外部串行設(shè)備10相連,使得CPU 11和/或DMA 12與外部串行設(shè)備10交互通信。其中:
[0046]CPU 11接口模塊I配置為根據(jù)總線的時(shí)序?qū)拇嫫鹘M模塊2讀寫,按邏輯完成總線與SPI控制器連接的CPU 11之間的通信。
[0047]寄存器組模塊2配置為根據(jù)接口模塊I發(fā)來(lái)的讀寫寄存器的控制信號(hào),通過(guò)對(duì)寄存器組模塊2中的寄存器進(jìn)行讀寫操作,完成系統(tǒng)對(duì)SPI接口控制參數(shù)的配置,如主從模式配置、時(shí)鐘的極性配置、時(shí)鐘相位配置、數(shù)據(jù)長(zhǎng)度(4-16位)配置、CRC校驗(yàn)使能配置、DMA功能使能配置、發(fā)送延時(shí)配置等,以及標(biāo)示SPI的工作狀態(tài)。
[0048]寄存器組模塊2包括控制寄存器21、數(shù)據(jù)寄存器22、CRC控制寄存器23、中斷控制寄存器24、延時(shí)發(fā)送寄存器25、DMA控制寄存器26、狀態(tài)寄存器27、時(shí)鐘分頻寄存器28。
[0049]其中,控制寄存器21用來(lái)設(shè)置工作模式(主從模式)、時(shí)鐘的