本發(fā)明屬于總線通信技術(shù)領(lǐng)域,更具體的說,尤其涉及一種基于FPGA的總線通信控制器及總線通信控制方法。
背景技術(shù):
如同大多數(shù)網(wǎng)絡(luò)通信一樣,F(xiàn)F(Foudation Field,基金會(huì)現(xiàn)場(chǎng))總線通信在數(shù)據(jù)鏈路層及物理層所需要的總線驅(qū)動(dòng)、數(shù)據(jù)編碼、時(shí)鐘同步和幀檢驗(yàn)等工作需要通過軟硬件結(jié)合來完成。
目前控制FF現(xiàn)場(chǎng)總線通信的方式有:在MCU(Micro Control Unit,微控制器)中集成總線數(shù)據(jù)的通信模塊來實(shí)現(xiàn)對(duì)FF現(xiàn)場(chǎng)總線通信的控制,但是若使用MCU編寫軟件來控制FF現(xiàn)場(chǎng)總線通信的話,會(huì)在MCU中加入FF總線上數(shù)據(jù)的收發(fā)功能,而這一功能會(huì)影響MCU對(duì)接收到的數(shù)據(jù)進(jìn)行處理的效率,進(jìn)而為提高數(shù)據(jù)處理效率,需要采用核心頻率較高的MCU,而這一方式又會(huì)增加芯片成本。
又或者使用中國(guó)科學(xué)院沈陽(yáng)自動(dòng)化研究所的專利《FF總線幀類型識(shí)別器》來控制FF現(xiàn)場(chǎng)總線通信,F(xiàn)F總線幀類型識(shí)別器可以在接收到幀信號(hào)后,對(duì)幀信號(hào)的類型進(jìn)行識(shí)別存儲(chǔ)和上送,但是FF總線幀類型識(shí)別器并不是一款底層的通信控制芯片,不能對(duì)FF現(xiàn)場(chǎng)總線的收發(fā)進(jìn)行調(diào)度。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種基于FPGA的總線通信控制器及總線通信控制方法,用于降低芯片成本且實(shí)現(xiàn)對(duì)FF總線的數(shù)據(jù)收發(fā)進(jìn)行調(diào)度。技術(shù)方案如下:
本發(fā)明提供一種基于現(xiàn)場(chǎng)可編程門陣列FPGA的總線通信控制器,所述總線通信控制器包括:寄存器管理模塊、中斷管理模塊、控制模塊、現(xiàn)場(chǎng)總線信號(hào)控制模塊和接口模塊;
所述寄存器管理模塊中有多種類型的寄存器,且所述寄存器管理模塊與微控制器相連,用于通過所述微控制器控制多種類型的寄存器的取值,以使所述微控制器基于多種類型的寄存器的取值監(jiān)控所述總線通信控制器的工作過程;
中斷管理模塊,用于將基金會(huì)現(xiàn)場(chǎng)FF總線上數(shù)據(jù)的收發(fā)情況反饋給所述微控制器;
所述控制模塊,用于當(dāng)所述寄存器管理模塊中多種類型的寄存器的取值指示所述總線通信控制器處于數(shù)據(jù)發(fā)送狀態(tài)時(shí),控制所述現(xiàn)場(chǎng)總線信號(hào)控制模塊對(duì)將要發(fā)送的數(shù)據(jù)進(jìn)行處理,以及用于當(dāng)所述寄存器管理模塊中多種類型的寄存器的取值指示所述總線通信控制器處于數(shù)據(jù)接收狀態(tài)時(shí),控制所述現(xiàn)場(chǎng)總線信號(hào)控制模塊對(duì)接收的總線數(shù)據(jù)進(jìn)行處理;
所述現(xiàn)場(chǎng)總線信號(hào)控制模塊,用于通過FF總線協(xié)議對(duì)所述將要發(fā)送的數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換,得到符合FF總線協(xié)議格式的信號(hào),并通過所述接口模塊發(fā)送到FF總線上,以及用于通過所述接口模塊接收總線數(shù)據(jù),對(duì)所述總線數(shù)據(jù)進(jìn)行數(shù)據(jù)采樣、數(shù)據(jù)解碼和數(shù)據(jù)校驗(yàn),并保存校驗(yàn)正確的所述總線數(shù)據(jù)。
優(yōu)選地,所述總線通信控制器還包括:第一存儲(chǔ)器和第二存儲(chǔ)器;
所述第一存儲(chǔ)器,用于存儲(chǔ)所述將要發(fā)送的數(shù)據(jù),且所述現(xiàn)場(chǎng)總線信號(hào)控制模塊,用于在接收到所述微控制器指示的所述將要發(fā)送的數(shù)據(jù)的長(zhǎng)度后,從所述第一存儲(chǔ)器中獲取與所述長(zhǎng)度相對(duì)應(yīng)的數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換;
所述第二存儲(chǔ)器,用于存儲(chǔ)所述校驗(yàn)正確的所述總線數(shù)據(jù)。
優(yōu)選地,所述現(xiàn)場(chǎng)總線信號(hào)控制模塊,用于采用第一時(shí)鐘進(jìn)行編碼轉(zhuǎn)換,并采用第二時(shí)鐘進(jìn)行發(fā)送,其中所述第一時(shí)鐘高于所述第二時(shí)鐘。
優(yōu)選地,所述現(xiàn)場(chǎng)總線信號(hào)控制模塊,用于通過查找信號(hào)跳變端取中間值的方法進(jìn)行數(shù)據(jù)采樣。
優(yōu)選地,所述總線通信控制器還包括:重配置模塊,所述重配置模塊具備在線燒寫功能,用于通過所述在線燒寫功能對(duì)所述總線通信控制器中的各個(gè)模塊進(jìn)行在線升級(jí)。
優(yōu)選地,所述總線通信控制器的管腳至少包括:與所述微控制器連接相關(guān)的第一管腳、與外部的閃存連接相關(guān)的第二管腳和與FF總線連接相關(guān)的第三管腳:
所述第一管腳,用于使所述總線通信控制器與所述微控制器進(jìn)行通信,且所述第一管腳至少包括:讀寫使能端、多路數(shù)據(jù)線、多路地址線和中斷輸出端,所述讀寫使能端用于控制所述總線通信控制器與所述微控制器之間的讀寫操作,所述中斷輸出端,用于連接所述微控制器的中斷輸入端,以向所述微控制器發(fā)送中斷信號(hào),所述中斷信號(hào)用于指示所述總線通信控制器的工作狀態(tài),所述工作狀態(tài)為數(shù)據(jù)發(fā)送狀態(tài)或數(shù)據(jù)接收狀態(tài);
所述第二管腳,用于通過介質(zhì)連接單元MAU與FF總線相連接,且所述第二管腳至少包括:一個(gè)輸入端、一個(gè)輸出端和一個(gè)使能控制端,所述使能控制端用于對(duì)所述輸出端的對(duì)外輸出進(jìn)行使能控制;
所述第三管腳,用于與外部的閃存連接,通過所述重配置模塊對(duì)所述閃存中內(nèi)部數(shù)據(jù)的修改來在線升級(jí)所述總線通信控制器中的各個(gè)模塊。
優(yōu)選地,所述第一管腳還包括片選端,用于對(duì)所述多路地址線和多路數(shù)據(jù)線進(jìn)行復(fù)用,以實(shí)現(xiàn)對(duì)不同F(xiàn)F總線的選擇。
優(yōu)選地,所述接口模塊,用于將接收到的信號(hào)轉(zhuǎn)換為所述總線通信控制器可使用的信號(hào),以及用于根據(jù)所述片選端的取值來調(diào)用對(duì)應(yīng)的所述現(xiàn)場(chǎng)總線信號(hào)控制模塊。
優(yōu)選地,所述寄存器管理模塊包括:地址識(shí)別子模塊、寄存器寫入子模塊和寄存器輸出子模塊;
所述地址識(shí)別子模塊,用于識(shí)別所述微控制器的當(dāng)前操作對(duì)應(yīng)的地址,并基于所述微控制器的當(dāng)前操作對(duì)應(yīng)的地址,查找對(duì)應(yīng)的寄存器;
所述寄存器寫入子模塊,用于當(dāng)所述微控制器的當(dāng)前操作為寫入操作時(shí),將所述微控制器輸入的值寫入到對(duì)應(yīng)的寄存器中;
所述寄存器輸出子模塊,用于當(dāng)所述微控制器的當(dāng)前操作為讀取操作時(shí),將對(duì)應(yīng)的寄存器的取值發(fā)送給所述微控制器,以實(shí)現(xiàn)對(duì)所述總線通信控制器的工作過程的監(jiān)控。
本發(fā)明還提供一種總線通信控制方法,所述方法應(yīng)用于上述總線通信控制器中,所述方法包括:
在所述總線通信控制器的片選端使能后,接收微控制器在所述總線通信控制器的多路地址線上傳輸?shù)男盘?hào);
從所述多路地址線上傳輸?shù)男盘?hào)中識(shí)別出微控制器的當(dāng)前操作指向的地址;
接收微控制器在所述總線通信控制器的多路數(shù)據(jù)線上傳輸?shù)臄?shù)據(jù),并將所述多路數(shù)據(jù)線上傳輸?shù)臄?shù)據(jù)寫入到對(duì)應(yīng)的地址,以改變所述總線通信控制器中多種類型的寄存器的取值;
當(dāng)基于所述多種類型的寄存器的取值指示所述總線通信控制器的工作狀態(tài)為數(shù)據(jù)發(fā)送狀態(tài)時(shí),控制所述總線通信控制器通過所述多路數(shù)據(jù)線接收所述微控制器傳輸?shù)膶⒁l(fā)送的數(shù)據(jù);
對(duì)所述將要發(fā)送的數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換,得到符合基金會(huì)現(xiàn)場(chǎng)FF總線協(xié)議格式的信號(hào),并將符合FF總線協(xié)議格式的信號(hào)發(fā)送到FF總線上;
當(dāng)基于所述多種類型的寄存器的取值指示所述總線通信控制器的工作狀態(tài)為數(shù)據(jù)接收狀態(tài)時(shí),接收FF總線上發(fā)送的總線數(shù)據(jù);
對(duì)所述總線數(shù)據(jù)進(jìn)行數(shù)據(jù)采樣、數(shù)據(jù)解碼和數(shù)據(jù)校驗(yàn),并保存校驗(yàn)正確的所述總線數(shù)據(jù),以使所述微控制器從所述總線通信控制器中獲取到校驗(yàn)正確的所述總線數(shù)據(jù)。
與現(xiàn)有技術(shù)相比,本發(fā)明提供的上述技術(shù)方案具有如下優(yōu)點(diǎn):
從上述技術(shù)方案可知,本發(fā)明提供的技術(shù)方案可以基于寄存器管理模塊中多種類型的寄存器的取值指示總線通信控制器處于數(shù)據(jù)發(fā)送狀態(tài)或者數(shù)據(jù)接收狀態(tài)時(shí),由控制模塊來控制現(xiàn)場(chǎng)總線信號(hào)控制模塊執(zhí)行對(duì)應(yīng)的操作,實(shí)現(xiàn)對(duì)FF總線上數(shù)據(jù)發(fā)送和數(shù)據(jù)接收的調(diào)度,即實(shí)現(xiàn)對(duì)FF總線的數(shù)據(jù)收發(fā)調(diào)度。并且從本發(fā)明提供的技術(shù)方案可知,MCU并未參與FF總線上數(shù)據(jù)發(fā)送和數(shù)據(jù)接收的處理過程,因此無(wú)需在MCU中加入處理算法,這樣MCU就無(wú)需采用核心頻率較高的MCU,降低成本。并且上述總線通信控制器可以基于FPGA實(shí)現(xiàn),降低總線通信控制器對(duì)國(guó)外芯片的依賴性,進(jìn)一步降低成本。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例提供的基于FPGA的總線通信控制器的一種結(jié)構(gòu)示意圖;
圖2是圖1中寄存器管理模塊的結(jié)構(gòu)示意圖;
圖3是圖1所示基于FPGA的總線通信控制器的流程圖;
圖4是FF總線上發(fā)送的報(bào)文幀的結(jié)構(gòu)圖;
圖5是本發(fā)明實(shí)施例提供的基于FPGA的總線通信控制器的另一種結(jié)構(gòu)示意圖;
圖6是本發(fā)明實(shí)施例提供的基于FPGA的總線通信控制器的再一種結(jié)構(gòu)示意圖;
圖7是本發(fā)明實(shí)施例提供的基于FPGA的總線通信控制器中各個(gè)管腳的示意圖;
圖8是本發(fā)明實(shí)施例提供的基于FPGA的總線通信控制器判定當(dāng)前操作的流程圖;
圖9是本發(fā)明實(shí)施例的總線通信控制方法的流程圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
請(qǐng)參閱圖1,其示出了本發(fā)明實(shí)施例提供的基于現(xiàn)場(chǎng)可編程門陣列(Field-Programmable Gate Array,F(xiàn)PGA)的總線通信控制器的結(jié)構(gòu)示意圖,用于基于FPGA實(shí)現(xiàn)對(duì)不同F(xiàn)F總線上數(shù)據(jù)發(fā)送和數(shù)據(jù)接收的調(diào)度,以降低成本。具體地,上述圖1所示的基于FPGA的總線通信控制器可以包括:寄存器管理模塊11、中斷管理模塊12、控制模塊13、現(xiàn)場(chǎng)總線信號(hào)控制模塊14和接口模塊15。
其中寄存器管理模塊11中有多種類型的寄存器,且寄存器管理模塊11與MCU相連,用于通過MCU控制多種類型的寄存器的取值,以使MCU基于多種類型的寄存器的取值監(jiān)控總線通信控制器的工作過程。
在本發(fā)明實(shí)施例中,寄存器管理模塊11是總線通信控制器的中心,具體地,位于總線通信控制器外部的MCU只能連接到寄存器管理模塊,而無(wú)法直接去調(diào)度總線通信控制器中的其他模塊,若MCU需要調(diào)度總線通信控制器中的其他模塊,則需要控制寄存器管理模塊11中的多種類型的寄存器的取值來控制總線通信控制器中各個(gè)模塊,以實(shí)現(xiàn)監(jiān)控總線通信控制器的工作過程。
為實(shí)現(xiàn)對(duì)寄存器管理模塊11中多種類型的寄存器的取值進(jìn)行控制,本發(fā)明實(shí)施例為每種寄存器分配一個(gè)地址,這樣MCU就可以基于每種寄存器的地址來向寄存器寫入對(duì)應(yīng)的值或者基于地址讀取寄存器的取值。為此本發(fā)明實(shí)施例提供的寄存器管理模塊11的結(jié)構(gòu)如圖2所示,可以包括:地址識(shí)別子模塊111、寄存器寫入子模塊112和寄存器輸出子模塊113。
地址識(shí)別子模塊111,用于識(shí)別MCU的當(dāng)前操作對(duì)應(yīng)的地址,并基于MCU的當(dāng)前操作對(duì)應(yīng)的地址,查找對(duì)應(yīng)的寄存器。
寄存器寫入子模塊112,用于當(dāng)MCU的當(dāng)前操作為寫入操作時(shí),將MCU輸入的值寫入到對(duì)應(yīng)的寄存器中。
寄存器輸出子模塊113,用于當(dāng)MCU的當(dāng)前操作為讀取操作時(shí),將對(duì)應(yīng)的寄存器的取值發(fā)送給MCU,以實(shí)現(xiàn)對(duì)總線通信控制器的工作過程的監(jiān)控。
中斷管理模塊12,用于將FF總線上數(shù)據(jù)的收發(fā)情況反饋給MCU,并且中斷管理模塊12在產(chǎn)生中斷信號(hào)時(shí)對(duì)各種類型的寄存器的操作是完全并行的,且中斷寄存器的取值在讀取后會(huì)馬上被清除,具體地,向下由總線通信控制器內(nèi)所存在的狀態(tài)寄存器決定中斷產(chǎn)生的必要性,向上由MCU控制中斷使能寄存器來管理中斷產(chǎn)生的前提條件,使得只有當(dāng)MCU開啟中斷功能且總線通信控制器的內(nèi)部達(dá)到中斷產(chǎn)生的條件后才會(huì)有中斷產(chǎn)生,而MCU也是通過改寫中斷使能寄存器的值來控制中斷,防止中斷的不必要產(chǎn)生。其中中斷使能寄存器管理所有中斷可否產(chǎn)生,MCU通過中斷使能寄存器保證在接收過程中不會(huì)再次產(chǎn)生重復(fù)的接收中斷等可能操作。
在本發(fā)明實(shí)施例中,中斷管理模塊12的操作機(jī)制如下:
1)中斷管理模塊12產(chǎn)生中斷信號(hào)給MCU,其中中斷信號(hào)包括兩個(gè)信號(hào),一個(gè)總中斷信號(hào)表示中斷,一個(gè)副中斷信號(hào)表示哪一個(gè)現(xiàn)場(chǎng)總線信號(hào)控制模塊14;
2)MCU接收到總中斷信號(hào),進(jìn)入中斷請(qǐng)求0(Interrupt Request,IRQ)的中斷程序;
3)MCU根據(jù)副中斷信號(hào)判別調(diào)用哪一路中斷函數(shù),其中中斷函數(shù)的作用是反饋信號(hào)至MCU使得MCU知道產(chǎn)生哪種中斷,如接收到前導(dǎo)碼中斷,接收完成中斷,發(fā)送完成中斷、時(shí)鐘定時(shí)中斷等。;
4)中斷管理模塊12等待MCU讀取總線通信控制器來中斷狀態(tài)寄存器0(對(duì)應(yīng)數(shù)據(jù)接收和數(shù)據(jù)發(fā)送)、中斷狀態(tài)寄存器2(對(duì)應(yīng)時(shí)鐘),并根據(jù)中斷狀態(tài)寄存器對(duì)應(yīng)的中斷位是否被置1來判斷產(chǎn)生哪一個(gè)中斷(數(shù)據(jù)接收還是數(shù)據(jù)發(fā)送);
5)置該中斷操作標(biāo)志,同時(shí)清空該中斷位;
在本發(fā)明實(shí)施例中中斷寄存器有兩種,分別是中斷狀態(tài)寄存器和中斷使能寄存器,當(dāng)中斷狀態(tài)寄存器被下位機(jī)置值而中斷使能寄存器被MCU置值后才會(huì)在中斷引腳上產(chǎn)生指示FF總線上數(shù)據(jù)的收發(fā)情況的中斷信號(hào)。相應(yīng)的中斷管理模塊12通過操作機(jī)制中的步驟5)來讀寫寄存器管理模塊中的中斷狀態(tài)寄存器的取值來工作的。
6)總線通信控制器等待下一次中斷操作標(biāo)志被置位再開啟相應(yīng)的中斷產(chǎn)生操作。
控制模塊13,用于當(dāng)寄存器管理模塊11中多種類型的寄存器的取值指示總線通信控制器處于數(shù)據(jù)發(fā)送狀態(tài)時(shí),控制現(xiàn)場(chǎng)總線控制模塊14對(duì)將要發(fā)送的數(shù)據(jù)進(jìn)行處理,以及用于當(dāng)寄存器管理模塊11中多種類型的寄存器的取值指示總線通信控制器處于數(shù)據(jù)接收狀態(tài)時(shí),控制現(xiàn)場(chǎng)總線信號(hào)控制模塊14對(duì)接收的總線數(shù)據(jù)進(jìn)行處理。
其中寄存器管理模塊11中至少包括控制寄存器以及中斷狀態(tài)寄存器,通過至少這兩個(gè)寄存器的取值來管理整個(gè)收發(fā)過程的調(diào)度工作,整個(gè)機(jī)制分為接收和發(fā)送兩塊,不再數(shù)據(jù)發(fā)送狀態(tài)下都會(huì)自動(dòng)跳轉(zhuǎn)回?cái)?shù)據(jù)接收狀態(tài)等待數(shù)據(jù)的接收,具體如下所述:
數(shù)據(jù)發(fā)送機(jī)制:
1)MCU判斷FF總線未處于數(shù)據(jù)接收狀態(tài)時(shí),則等待數(shù)據(jù)接收狀態(tài);
2)MCU清空控制寄存器的取值為0;
3)MCU清空中斷狀態(tài)寄存器0的發(fā)送完成位;
4)MCU開啟發(fā)送中斷,關(guān)閉接收中斷(寫寄存器);
5)MCU先后寫控制寄存器0和控制寄存器1的取值;
6)MCU寫發(fā)送緩沖區(qū)地址(無(wú)用);
7)MCU寫發(fā)送數(shù)據(jù)長(zhǎng)度高低字節(jié);
8)MCU寫發(fā)送使能;
9)FPGA根據(jù)控制寄存器0、控制寄存器1和發(fā)送使能來開啟數(shù)據(jù)發(fā)送;
10)數(shù)據(jù)發(fā)送完成則返回完成中斷。
數(shù)據(jù)接收機(jī)制:
1)MCU清空中斷狀態(tài)寄存器0值;
2)MCU開啟接收部分中斷,關(guān)閉發(fā)送中斷(寫寄存器);
3)MCU先后寫控制寄存器0和控制寄存器1的取值;
4)現(xiàn)場(chǎng)總線控制器通過控制寄存器0和控制寄存器1的取值開啟接收;
5)在數(shù)據(jù)接收過程中,現(xiàn)場(chǎng)總線控制器會(huì)返回接收到前導(dǎo)碼中斷和接收到完成中斷(收到幀尾,校驗(yàn)結(jié)束);
6)MCU接收到前導(dǎo)碼中斷后開始等待;
7)MCU等待到接收完成中斷后讀取接收狀態(tài)寄存器值,判斷是否收到幀頭、幀尾以及校驗(yàn)是否正確;
8)當(dāng)MCU確定接收狀態(tài)寄存器的取值正確后,更新用于數(shù)據(jù)接收的RAM的地址,并讀取相關(guān)數(shù)據(jù);當(dāng)反饋接收完成的中斷信號(hào)后,實(shí)際數(shù)據(jù)解析可能發(fā)現(xiàn)校驗(yàn)錯(cuò)誤,字節(jié)不對(duì)齊等錯(cuò)誤,就會(huì)將狀態(tài)寫在接收狀態(tài)寄存器中,MCU讀取接收狀態(tài)寄存器的取值,若取值指示數(shù)據(jù)沒有錯(cuò)誤則說明數(shù)據(jù)是可用的;在本發(fā)明實(shí)施例中寄存器管理模塊11中還包括發(fā)送狀態(tài)寄存器,用于指示數(shù)據(jù)發(fā)送情況,而接收狀態(tài)寄存器和發(fā)送狀態(tài)寄存器隸屬于狀態(tài)寄存器。
9)當(dāng)MCU確定接收狀態(tài)寄存器的取值錯(cuò)誤則不進(jìn)行地址更新,忽略這一次獲取的數(shù)據(jù)。
現(xiàn)場(chǎng)總線信號(hào)控制模塊14,用于通過FF總線協(xié)議對(duì)將要發(fā)送的數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換,得到符合FF總線協(xié)議格式的信號(hào),并通過接口模塊15發(fā)送到FF總線上,以及用于通過接口模塊15接收總線數(shù)據(jù),對(duì)總線數(shù)據(jù)進(jìn)行數(shù)據(jù)采樣、數(shù)據(jù)解碼和數(shù)據(jù)校驗(yàn),并保存校驗(yàn)正確的總線數(shù)據(jù)。
在本發(fā)明實(shí)施例中,現(xiàn)場(chǎng)總線信號(hào)控制模塊14,用于通過查找信號(hào)跳變端取中間值的方法進(jìn)行數(shù)據(jù)采樣。即通過檢測(cè)信號(hào)的跳變,即上升沿或者下降沿,當(dāng)檢測(cè)到后則開始計(jì)數(shù),如每一個(gè)高或低電平持續(xù)16us,當(dāng)?shù)竭_(dá)8us中間值和23us持續(xù)電平中間值時(shí)進(jìn)行一次采樣,若在對(duì)數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換時(shí)按照曼徹斯特編碼特性有可能有兩個(gè)連續(xù)的電平,現(xiàn)場(chǎng)總線信號(hào)控制模塊14采樣兩次。對(duì)應(yīng)的在進(jìn)行數(shù)據(jù)解碼和數(shù)據(jù)校驗(yàn)時(shí)可以采用曼徹斯特解碼和CRC校驗(yàn),其中CRC校驗(yàn)為16位CRC編碼,而曼徹斯特編碼可以采用反演編碼方式,使用一個(gè)一個(gè)線性反饋寄存器LFSR實(shí)現(xiàn)。
基于本發(fā)明實(shí)施例提供的總線通信控制器,其對(duì)應(yīng)的流程圖如圖3所示,可以包括以下步驟:
當(dāng)總線通信控制器上電后會(huì)重置自身內(nèi)部的所有寄存器的取值,使得自身置于一個(gè)不工作的空閑等待狀態(tài),以完成MCU啟動(dòng)。
當(dāng)MCU啟動(dòng)完成后對(duì)總線通信控制器進(jìn)行一個(gè)初始化工作,具體則是將總線通信控制器從空閑狀態(tài)轉(zhuǎn)移進(jìn)入一個(gè)工作的狀態(tài),此時(shí)總線通信控制器就可以自我調(diào)度完成對(duì)總線數(shù)據(jù)的監(jiān)控工作。
MCU在初始化時(shí)開啟總線通信控制器中所需要的中斷操作(通過寫入控制寄存器和中斷狀態(tài)寄存器的取值),于是總線通信控制器就會(huì)在監(jiān)控總線數(shù)據(jù)時(shí)將對(duì)應(yīng)的狀態(tài)以中斷信號(hào)的形式返回給MCU。
當(dāng)開啟了數(shù)據(jù)接收狀態(tài)后,控制現(xiàn)場(chǎng)總線信號(hào)控制模塊進(jìn)行數(shù)據(jù)接收,注意如果現(xiàn)場(chǎng)總線信號(hào)控制模塊以前處于數(shù)據(jù)發(fā)送狀態(tài)且未完成時(shí),總線通信控制器在開啟數(shù)據(jù)接收狀態(tài)后依然會(huì)中斷當(dāng)前的數(shù)據(jù)發(fā)送狀態(tài),直接跳轉(zhuǎn)回?cái)?shù)據(jù)接收狀態(tài)的接收等待狀態(tài)。
進(jìn)入到接收等待狀態(tài)后,總線通信控制器開始對(duì)總線數(shù)據(jù)進(jìn)行根據(jù)跳變中間值實(shí)現(xiàn)的數(shù)據(jù)采樣,并會(huì)一直等待符合前導(dǎo)碼數(shù)據(jù)格式的信號(hào),即曼徹斯特編碼100110011001,在沒有等到該信號(hào)前若收到數(shù)據(jù)發(fā)送需求信號(hào)仍可以直接從數(shù)據(jù)接收狀態(tài)跳轉(zhuǎn)到數(shù)據(jù)發(fā)送狀態(tài)。
當(dāng)接收到符合前導(dǎo)碼格式的信號(hào)后,接收狀態(tài)機(jī)(指示數(shù)據(jù)接收狀態(tài)過程中所處階段)跳轉(zhuǎn),開始等待幀頭信號(hào),同時(shí)會(huì)產(chǎn)生一個(gè)數(shù)據(jù)接收開始的中斷信號(hào)給MCU。
開始等待幀頭信號(hào)后,若等待到一個(gè)連續(xù)6字節(jié)以上的持續(xù)電平,則判斷本次接收失敗,返回給MCU一個(gè)接收失敗的中斷信號(hào)并回到等待前導(dǎo)碼的狀態(tài);若等待到幀頭信號(hào),則置相應(yīng)的數(shù)據(jù)接收狀態(tài)位為接收幀頭完成,之后接收到的為數(shù)據(jù)區(qū)數(shù)據(jù),并開始解碼以及校驗(yàn)過程(例如曼徹斯特解碼以及CRC校驗(yàn)),在進(jìn)行解碼以及校驗(yàn)過程的同時(shí),根據(jù)幀頭的格式不同判斷整個(gè)數(shù)據(jù)幀格式是原碼還是反碼,若是反碼則對(duì)之后的數(shù)據(jù)進(jìn)行取反的操作。在剛進(jìn)入數(shù)據(jù)處理狀態(tài)時(shí),現(xiàn)場(chǎng)總線信號(hào)控制模塊會(huì)鎖存接收到的第一個(gè)數(shù)據(jù)字節(jié)的信息,該信息為幀類型碼的取值,通過判斷幀類型碼的取值,將鎖存一個(gè)幀類型的信號(hào)給MCU。
在數(shù)據(jù)處理狀態(tài)內(nèi),若在解碼過程中發(fā)現(xiàn)數(shù)據(jù)格式不符合現(xiàn)場(chǎng)總線信號(hào)控制模塊預(yù)設(shè)的編碼規(guī)則,則判斷本次接收失敗,返回給MCU一個(gè)接收失敗的中斷信號(hào)并回到等待前導(dǎo)碼的狀態(tài),正確的情況下存儲(chǔ)轉(zhuǎn)換得到的數(shù)據(jù)。比如在本發(fā)明實(shí)施例中采用曼徹斯特解碼,若數(shù)據(jù)格式不符合曼徹斯特編碼規(guī)則則判斷本次接收失敗。在本發(fā)明實(shí)施例中,數(shù)據(jù)接收狀態(tài)下現(xiàn)場(chǎng)總線信號(hào)控制模塊的工作時(shí)鐘高于數(shù)據(jù)發(fā)送狀態(tài)下現(xiàn)場(chǎng)總線信號(hào)控制模塊的工作時(shí)鐘,以便在數(shù)據(jù)處理的開始和結(jié)尾時(shí)可以無(wú)等待的進(jìn)行之后的狀態(tài)切換以及處理工作。并且在數(shù)據(jù)處理狀態(tài)內(nèi),解碼和校驗(yàn)都是以16字節(jié)為單位進(jìn)行,在數(shù)據(jù)接收過程中首先判斷數(shù)據(jù)格式是否符合幀尾的格式,若檢測(cè)到符合,則數(shù)據(jù)并不會(huì)被解碼以及校驗(yàn),并提取校驗(yàn)結(jié)果值,與現(xiàn)場(chǎng)總線信號(hào)控制模塊中預(yù)留的期望值進(jìn)行比較,若比較符合則接收完成,返回接收完成信號(hào),并置校驗(yàn)結(jié)果值對(duì)應(yīng)的寄存器的取值為1,并更新用于接收數(shù)據(jù)的RAM的地址;若是校驗(yàn)不通過,依舊返回接收完成信號(hào),但是置校驗(yàn)結(jié)果值對(duì)應(yīng)的寄存器的取值為0,不更新接收數(shù)據(jù)的RAM的地址,下次接收會(huì)重新從原地址覆蓋寫入接收到的值。
在接收完成后接收狀態(tài)機(jī)自動(dòng)跳回最初的等待接收前導(dǎo)碼的狀態(tài),此時(shí)總線通信控制器可以接收發(fā)送信號(hào)的請(qǐng)求,若是有發(fā)送信號(hào)的需求,則跳轉(zhuǎn)進(jìn)入數(shù)據(jù)發(fā)送狀態(tài)開始數(shù)據(jù)的發(fā)送。
開始數(shù)據(jù)發(fā)送后現(xiàn)場(chǎng)總線信號(hào)控制模塊會(huì)按照16us一位的速率先發(fā)送2字節(jié)前導(dǎo)碼,完畢后再發(fā)送2字節(jié)的幀頭信號(hào),并對(duì)數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換,例如現(xiàn)場(chǎng)總線信號(hào)控制模塊中可以包括曼徹斯特編碼子模塊和CRC數(shù)據(jù)編碼子模塊,通過這兩個(gè)編碼子模塊進(jìn)行數(shù)據(jù)的編碼轉(zhuǎn)換操作。編碼轉(zhuǎn)換操作以16字節(jié)為單位,編碼轉(zhuǎn)換完成后的數(shù)據(jù)以16us一位的速率進(jìn)行發(fā)送,當(dāng)發(fā)送數(shù)據(jù)長(zhǎng)度達(dá)到需發(fā)送的數(shù)據(jù)長(zhǎng)度后,提取CRC數(shù)據(jù)編碼子模塊的結(jié)果值,并以同樣的方法進(jìn)行發(fā)送。
最后再發(fā)送2字節(jié)幀尾,數(shù)據(jù)發(fā)送完成后回復(fù)MCU一個(gè)發(fā)送完成中斷,接收狀態(tài)機(jī)跳轉(zhuǎn)回等待接收前導(dǎo)碼的狀態(tài)。
從上述圖3所示流程圖,可知在FF總線上發(fā)送的報(bào)文幀結(jié)構(gòu)如圖4所示,其中報(bào)文幀由6部分組成,其中前導(dǎo)碼最低為2個(gè)字節(jié),高的能有8個(gè)字節(jié),我們發(fā)送的幀為前4個(gè)字節(jié);
幀前定解碼長(zhǎng)2個(gè)字節(jié),緊跟前導(dǎo)碼;
幀類型碼長(zhǎng)1個(gè)字節(jié),實(shí)際為數(shù)據(jù)區(qū)第一個(gè)字節(jié),表示這一幀的類型;
數(shù)據(jù)區(qū)長(zhǎng)度不一定,總幀長(zhǎng)度一般不超過256字節(jié);
數(shù)據(jù)區(qū)后接2個(gè)字節(jié)長(zhǎng)度的CRC校驗(yàn)碼;
校驗(yàn)碼結(jié)束為幀尾,長(zhǎng)度也為2字節(jié)。
從上述技術(shù)方案可知,本發(fā)明提供的技術(shù)方案可以基于寄存器管理模塊中多種類型的寄存器的取值產(chǎn)生中斷信號(hào),并當(dāng)中斷信號(hào)指示總線通信控制器處于數(shù)據(jù)發(fā)送狀態(tài)或者數(shù)據(jù)接收狀態(tài)時(shí),由控制模塊來控制現(xiàn)場(chǎng)總線信號(hào)控制模塊執(zhí)行對(duì)應(yīng)的操作,實(shí)現(xiàn)對(duì)FF總線上數(shù)據(jù)發(fā)送和數(shù)據(jù)接收的調(diào)度,即實(shí)現(xiàn)對(duì)FF總線的數(shù)據(jù)收發(fā)調(diào)度。并且從本發(fā)明提供的技術(shù)方案可知,MCU并未參與FF總線上數(shù)據(jù)發(fā)送和數(shù)據(jù)接收的處理過程,因此無(wú)需在MCU中加入處理算法,這樣MCU就無(wú)需采用核心頻率較高的MCU,降低成本。并且上述總線通信控制器可以基于FPGA實(shí)現(xiàn),降低總線通信控制器對(duì)國(guó)外芯片的依賴性,進(jìn)一步降低成本。
而MCU通過控制寄存器管理模塊11中諸如控制寄存器和中斷使能寄存器在內(nèi)的各類寄存器來實(shí)現(xiàn)對(duì)整個(gè)通信控制器的數(shù)據(jù)收發(fā)狀態(tài)的控制,基于FPGA的總線通信控制器通過狀態(tài)寄存器、中斷寄存器在內(nèi)的各類寄存器實(shí)現(xiàn)向MCU反饋中斷信號(hào)。
此外,在本發(fā)明實(shí)施例中,現(xiàn)場(chǎng)總線信號(hào)控制模塊14可以為數(shù)據(jù)發(fā)送狀態(tài)和數(shù)據(jù)接收狀態(tài)分別設(shè)置對(duì)應(yīng)的結(jié)構(gòu),如圖5所示。相對(duì)應(yīng)的,總線通信控制器還包括:第一存儲(chǔ)器16和第二存儲(chǔ)器17。第一存儲(chǔ)器16,用于存儲(chǔ)將要發(fā)送的數(shù)據(jù),且現(xiàn)場(chǎng)總線信號(hào)控制模塊14用于在接收到MCU指示的將要發(fā)送的數(shù)據(jù)的長(zhǎng)度后,從第一存儲(chǔ)器16中獲取與長(zhǎng)度相對(duì)應(yīng)的數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換。
也就是說,第一存儲(chǔ)器16對(duì)應(yīng)現(xiàn)場(chǎng)總線信號(hào)控制模塊14的數(shù)據(jù)發(fā)送狀態(tài),作為數(shù)據(jù)發(fā)送的RAM存儲(chǔ)將要發(fā)送的數(shù)據(jù),在接收到指示的將要發(fā)送的數(shù)據(jù)的長(zhǎng)度后從第一存儲(chǔ)器16中獲取與長(zhǎng)度相對(duì)應(yīng)的數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換,如經(jīng)過CRC編碼子模塊和曼徹斯特編碼子模塊進(jìn)行編碼轉(zhuǎn)換。
而第二存儲(chǔ)器17用于存儲(chǔ)校驗(yàn)正確的總線數(shù)據(jù),即第二存儲(chǔ)器17可以作為數(shù)據(jù)接收的RAM,在經(jīng)過曼徹斯特解碼子模塊和CRC校驗(yàn)子模塊后,將正確的數(shù)據(jù)存儲(chǔ)到第二存儲(chǔ)器17中。
在本發(fā)明實(shí)施例中,現(xiàn)場(chǎng)總線信號(hào)控制模塊14,用于采用第一時(shí)鐘進(jìn)行編碼轉(zhuǎn)換,并采用第二時(shí)鐘進(jìn)行發(fā)送,其中第一時(shí)鐘高于第二時(shí)鐘,也就是在進(jìn)入數(shù)據(jù)發(fā)送狀態(tài),需要MCU傳遞一個(gè)發(fā)送數(shù)據(jù)的長(zhǎng)度,由現(xiàn)場(chǎng)總線信號(hào)控制模塊直接從第一存儲(chǔ)器中讀取數(shù)據(jù),并對(duì)其進(jìn)行編碼和發(fā)送,且現(xiàn)場(chǎng)總線信號(hào)控制模塊14采用高時(shí)鐘計(jì)算低時(shí)鐘發(fā)送方式,保證編碼過程不會(huì)拖慢數(shù)據(jù)的發(fā)送。并且數(shù)據(jù)接收狀態(tài)下現(xiàn)場(chǎng)總線信號(hào)控制模塊的工作時(shí)鐘高于數(shù)據(jù)發(fā)送狀態(tài)下現(xiàn)場(chǎng)總線信號(hào)控制模塊的工作時(shí)鐘,以便在數(shù)據(jù)處理的開始和結(jié)尾時(shí)可以無(wú)等待的進(jìn)行之后的狀態(tài)切換以及處理工作。
基于上述總線通信控制器,可以在總線通信控制器中集成多個(gè)現(xiàn)場(chǎng)總線信號(hào)控制模塊14,以使得每個(gè)現(xiàn)場(chǎng)總線信號(hào)控制模塊14對(duì)應(yīng)一路FF總線,這樣當(dāng)上述各個(gè)模塊集成到FPGA時(shí),可以通過一個(gè)FPGA實(shí)現(xiàn)對(duì)多路FF總線的數(shù)據(jù)收發(fā)調(diào)度。并且整個(gè)接收和發(fā)送數(shù)據(jù)的獲得和寫入通過FPGA內(nèi)部的兩個(gè)存儲(chǔ)器實(shí)現(xiàn),而不需要外置的存儲(chǔ)器,而MCU直接將要發(fā)送數(shù)據(jù)的長(zhǎng)度輸入到FPGA中,由FPGA自主通過FF總線協(xié)議對(duì)數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換,變成符合協(xié)議格式的信號(hào)發(fā)送到FF總線上;對(duì)于接收到的總線數(shù)據(jù),F(xiàn)PGA自身將其進(jìn)行解碼校驗(yàn),將校驗(yàn)正確的數(shù)據(jù)存入第二存儲(chǔ)器18中,MCU只需要直接讀取數(shù)據(jù)就可以使用,并不需要關(guān)心底層的操作步驟。
請(qǐng)參閱圖6,其示出了本發(fā)明實(shí)施例提供的基于FPGA的總線通信控制器的再一種結(jié)構(gòu)示意圖,在圖1基礎(chǔ)上還可以包括:重配置模塊18,其中重配置模塊18具備在線燒寫功能,用于通過在線燒寫功能對(duì)總線通信控制器中的各個(gè)模塊進(jìn)行在線升級(jí),使得總線通信控制器具有在線燒寫模式和JTAG下載模式,在線燒寫模式實(shí)現(xiàn)在線升級(jí),即不需要打開硬件來用JTAG修改代碼的方式進(jìn)行升級(jí),JTAG下載模式則是通過JTAG接口下載升級(jí)代碼的方式來升級(jí)總線通信控制器中的各個(gè)模塊。
其中,重配置模塊18包括:重配置寄存器操作子模塊、重配置控制調(diào)度子模塊和緩存RAM,MCU用于對(duì)重配置寄存器操作子模塊中相關(guān)寄存器進(jìn)行讀寫控制,重配置控制調(diào)度子模塊則根據(jù)重配置寄存器操作子模塊中相關(guān)寄存器的取值來實(shí)現(xiàn)對(duì)外部的閃存(FLASH)的相關(guān)操作,具體過程則是:
1)MCU向緩存RAM寫入數(shù)據(jù);
2)MCU寫命令長(zhǎng)度的高字節(jié)和低字節(jié),并啟動(dòng)對(duì)FLASH的相關(guān)操作;
3)總線通信控制器收到命令后開始發(fā)送數(shù)據(jù)到FLASH;
4)總線通信控制器產(chǎn)生時(shí)鐘信號(hào),并根據(jù)時(shí)鐘信號(hào)的上升沿更新的原則發(fā)送數(shù)據(jù);
5)數(shù)據(jù)發(fā)送完成后總線通信控制器置重配置寄存器操作子模塊中相關(guān)寄存器的取值以示數(shù)據(jù)發(fā)送完成;
6)在數(shù)據(jù)發(fā)送過程中MCU以1ms的間隔讀取重配置寄存器操作子模塊中相關(guān)寄存器的取值進(jìn)行監(jiān)測(cè);
7)MCU讀取到正確的寄存器的取值后完成本次操作,并清空寄存器的取值;
8)總線通信控制器等待下一次命令;
9)等完成所有的數(shù)據(jù)傳輸后MCU發(fā)送重啟命令使總線通信控制器從FLASH中獲取用于在線升級(jí)各個(gè)模塊的代碼進(jìn)行重載操作,以實(shí)現(xiàn)在線升級(jí)。
相應(yīng)的,為實(shí)現(xiàn)總線通信控制器中各個(gè)模塊與外部的通信,總線通信控制器的管理至少包括:與MCU連接相關(guān)的第一管腳、與FF總線連接相關(guān)的第二管腳和與外部的FLASH連接相關(guān)的第三管腳,如圖7所示。
其中第一管腳,用于使總線通信控制器與MCU進(jìn)行通信,且第一管腳至少包括:讀寫使能端、多路數(shù)據(jù)線、多路地址線和中斷輸出端,讀寫使能端用于控制總線通信控制器與MCU之間的讀寫操作,中斷輸出端,用于連接MCU的中斷輸入端,以向MCU發(fā)送中斷信號(hào),中斷信號(hào)用于指示總線通信控制器的工作狀態(tài),工作狀態(tài)為數(shù)據(jù)發(fā)送狀態(tài)或數(shù)據(jù)接收狀態(tài)。
比如在圖7中,包括8路的雙向數(shù)據(jù)線管理數(shù)據(jù)的雙向通信,即8路的雙向數(shù)據(jù)線負(fù)責(zé)將總線通信控制器中狀態(tài)寄存器的取值、第二存儲(chǔ)器中的數(shù)據(jù)等傳遞到MCU的指定地址中,或者由MCU對(duì)總線通信控制器中控制寄存器的取值、第一存儲(chǔ)器中的數(shù)據(jù)進(jìn)行修改的操作。而讀或?qū)懙呐袆e則由WR/RD這兩個(gè)讀寫使能端來決定。
總線通信控制器在數(shù)據(jù)接收和數(shù)據(jù)發(fā)送中不同狀態(tài)的轉(zhuǎn)換會(huì)反饋到相應(yīng)的狀態(tài)寄存器中,并產(chǎn)生相應(yīng)的中斷信號(hào),而MCU在接收到中斷信號(hào)后通過讀取相應(yīng)的狀態(tài)寄存器的取值來了解當(dāng)前總線通信控制器的工作狀態(tài),并進(jìn)行相應(yīng)的操作,中斷輸出端即是實(shí)現(xiàn)這一功能的管腳,與MCU上對(duì)應(yīng)的中斷輸入端相連。
第二管腳,用于通過MAU與FF總線相連,且第二管腳至少包括一個(gè)輸入端(如圖7中的總線端口2)、一個(gè)輸出端(如圖7中的總線端口1)和一個(gè)使能控制端,使能控制端用于對(duì)輸出端的外部輸出進(jìn)行使能控制,如圖7中的PO_TACTB,且PO_TACTB的取值由中斷使能寄存器管理。其中MAU負(fù)責(zé)為總線通信控制器提供相關(guān)電壓信號(hào)的穩(wěn)壓濾波等功能,當(dāng)對(duì)外輸出口使能之后輸出端上的數(shù)據(jù)才能被正確的傳輸出去,否則輸出端會(huì)被強(qiáng)制保持在一個(gè)電平上。
第三管腳,用于與外部的FLASH連接,通過重配置模塊18對(duì)FLASH中內(nèi)部數(shù)據(jù)的修改來在線升級(jí)總線通信控制器中的各個(gè)模塊,在對(duì)FLASH中內(nèi)部數(shù)據(jù)進(jìn)行修改后,當(dāng)總線通信控制器重啟后會(huì)通過與FLASH相連的第三管腳將修改后的數(shù)據(jù)(可以是升級(jí)代碼)寫入到總線通信控制器,完成升級(jí)總線通信控制器中的各個(gè)模塊的在線升級(jí)。
此外,本發(fā)明實(shí)施例提供的總線通信控制器可以集成在一塊FPGA實(shí)現(xiàn)多路的FF總線的控制,但是FPGA與MCU之間的地址線和數(shù)據(jù)線卻是復(fù)用的,因此第一管腳還包括多個(gè)片選端(如圖7中的CS1和CS2),用于對(duì)多路地址線和多路數(shù)據(jù)線進(jìn)行復(fù)用來實(shí)現(xiàn)對(duì)不同路FF總線的選擇。
上述各個(gè)管腳可以集成到接口模塊15中,接口模塊通過對(duì)地址的判別和片選端上傳輸?shù)男盘?hào)的判別來決定當(dāng)前操作時(shí)對(duì)應(yīng)于重配置模塊還是哪一路的FF總線(每路FF總線對(duì)應(yīng)一個(gè)現(xiàn)場(chǎng)總線信號(hào)控制模塊14),如果需要增減多路的復(fù)用,只需要增加一個(gè)片選端,其余都不用變化;若是管腳不夠用,也可以像識(shí)別重配置模塊一樣,用識(shí)別地址線高位的辦法來判斷開啟哪一路的FF總線對(duì)應(yīng)的現(xiàn)場(chǎng)總線信號(hào)控制模塊,而在反饋中斷信號(hào)時(shí)可以使用同一中斷輸出端進(jìn)行反饋,MCU在收到中斷信號(hào)后通過讀取相應(yīng)的寄存器來知道中斷來源于哪些現(xiàn)場(chǎng)總線信號(hào)控制模塊,再一一進(jìn)行處理,當(dāng)然如果管腳多余可以使用多個(gè)中斷輸出端,省去寄存器的識(shí)別操作,更快捷。
通過對(duì)地址的判別和片選端上傳輸?shù)男盘?hào)的判別來決定當(dāng)前操作時(shí)對(duì)應(yīng)于重配置模塊還是哪一路的FF總線的過程如圖8所示,可以包括以下步驟:
1)對(duì)外部信號(hào)進(jìn)行同步,以通過內(nèi)部時(shí)鐘對(duì)數(shù)據(jù)線和地址線的值進(jìn)行同步的采樣,來保證同步性和可靠性;
2)判斷地址高位是否有效,如果無(wú)效輸出高阻態(tài),如果有效則判斷是否符合重配置模塊的地址;
地址線提供地址的取值,15根地址線高電平則為1,低電平則為0,表示長(zhǎng)度15位的地址值,在本發(fā)明實(shí)施例中規(guī)定了一定范圍內(nèi)的地址值,當(dāng)?shù)刂肪€上傳輸?shù)臄?shù)據(jù)指示的地址值在所規(guī)定范圍內(nèi)時(shí)才是有效的,比如以內(nèi)部64M時(shí)鐘采樣獲得數(shù)據(jù)后判斷地址值是否在規(guī)定范圍內(nèi),比如0x2000-0x4000有效,則二進(jìn)制只需判斷13和14位的值即可。
由于地址線是通用的,連接到除了集成總線通信控制器的FPGA之外還有許多外部的芯片上,而每個(gè)芯片都有自己的地址可用范圍,F(xiàn)PGA只使用其中一部分地址,重配置模塊使用這部分中的部分,需要根據(jù)地址值的不同判斷運(yùn)行哪一個(gè)模塊。比如0x2000-0x2020是各個(gè)寄存器,0x3000到0x4000是重配置模塊,其余地址中有512字節(jié)給RAM。
3)如果符合,運(yùn)行重配置模塊;如果不符合,則判斷片選端,以確定哪路FF總線后,獲取和控制所確定的FF總線對(duì)應(yīng)的總線通信控制器;
4)向MCU進(jìn)行中斷反饋,MCU通過寄存器的取值來判斷中斷信號(hào)的來源。
從上述技術(shù)方案可知,接口模塊15還可以將接收到的信號(hào)轉(zhuǎn)換為總線通信控制器可使用的信號(hào),以及根據(jù)片選端的取值來調(diào)用對(duì)應(yīng)的現(xiàn)場(chǎng)總線信號(hào)控制模塊14。如為MCU讀寫寄存器以及緩存提供邏輯轉(zhuǎn)換,并對(duì)異步的外部信號(hào)進(jìn)行同步的轉(zhuǎn)換輸入給總線通信控制器中的各個(gè)子模塊使用,以及根據(jù)獲取的片選端的取值,對(duì)多個(gè)現(xiàn)場(chǎng)總線信號(hào)控制模塊進(jìn)行選擇性的調(diào)度操作,具體則是哪個(gè)CS端使能則調(diào)用哪個(gè)現(xiàn)場(chǎng)總線信號(hào)控制模塊。
在這里需要說明的一點(diǎn)是:圖5和圖6中CRC編碼子模塊、曼徹斯特編碼子模塊、曼徹斯特解碼子模塊和CRC校驗(yàn)子模塊為現(xiàn)場(chǎng)總線信號(hào)控制模塊14中對(duì)數(shù)據(jù)進(jìn)行處理的子模塊,且在圖5和圖6中以一個(gè)FPGA中集成兩套對(duì)FF總線進(jìn)行控制的模塊,集成的兩套模塊采用同一個(gè)接口模塊通信為例進(jìn)行說明,當(dāng)然在本發(fā)明實(shí)施例中一個(gè)FPGA中還可以集成更多的模塊來對(duì)FF總線進(jìn)行控制。
此外,上述總線通信控制器可以使用外部的晶振單元所產(chǎn)生的時(shí)鐘信號(hào)進(jìn)行工作,而內(nèi)部鎖相環(huán)會(huì)對(duì)輸入的時(shí)鐘信號(hào)進(jìn)行處理提供給對(duì)應(yīng)的各個(gè)模塊,如外部的晶振單元產(chǎn)生18M的時(shí)鐘信號(hào),而內(nèi)部鎖相環(huán)將其倍化為32M、64M以及降為1M的時(shí)鐘信號(hào)提供給各個(gè)模塊使用。
在總線通信控制器中則會(huì)配置一個(gè)計(jì)時(shí)模塊,其負(fù)責(zé)產(chǎn)生一個(gè)以1/32ms為單位的時(shí)鐘計(jì)時(shí)器,若MCU開啟計(jì)時(shí)中斷,總線通信控制器則會(huì)根據(jù)時(shí)鐘計(jì)時(shí)器的計(jì)時(shí)值定時(shí)產(chǎn)生定時(shí)中斷以完成鏈路層的計(jì)算工作,并可以根據(jù)計(jì)時(shí)值完成獨(dú)立的定時(shí)工作,具體定時(shí)過程如下:
1)MCU讀取當(dāng)前時(shí)鐘計(jì)時(shí)器的計(jì)時(shí)值(先高后低,有鎖存);
2)MCU禁止定時(shí)中斷(寫寄存器);
3)MCU輸入定時(shí)時(shí)間(先高后低);
4)MCU開啟定時(shí)中斷(寫寄存器);
5)FPGA回復(fù)定時(shí)中斷;
6)MCU收到定時(shí)中斷;
7)MCU禁止定時(shí)中斷(寫寄存器)。
與上述裝置實(shí)施例相對(duì)應(yīng)的,本發(fā)明實(shí)施例還提供一種總線通信控制方法,應(yīng)用于上述總線通信控制器中,如圖9所示,可以包括以下步驟:
901:在總線通信控制器的片選端使能后,接收MCU在總線通信控制器的多路地址線上傳輸?shù)男盘?hào)。
902:從多路地址線上傳輸?shù)男盘?hào)中識(shí)別出微控制的當(dāng)前操作指向的地址。
903:接收MCU在總線通信控制器的多路數(shù)據(jù)線上傳輸?shù)臄?shù)據(jù),并將多路數(shù)據(jù)線上傳輸?shù)臄?shù)據(jù)寫入到對(duì)應(yīng)的地址,以改變總線通信控制器中多種類型的寄存器的取值。
904:當(dāng)基于多種類型的寄存器的取值指示總線通信控制器的工作狀態(tài)為數(shù)據(jù)發(fā)送狀態(tài)時(shí),控制總線通信控制器通過多路數(shù)據(jù)線接收MCU傳輸?shù)膶⒁l(fā)送的數(shù)據(jù)。
905:對(duì)將要發(fā)送的數(shù)據(jù)進(jìn)行編碼轉(zhuǎn)換,得到符合FF總線協(xié)議格式的信號(hào),并將符合FF總線協(xié)議格式的信號(hào)發(fā)送到FF總線上。
906:當(dāng)基于多種類型的寄存器的取值指示總線通信控制器的工作狀態(tài)為數(shù)據(jù)接收狀態(tài)時(shí),接收FF總線上發(fā)送的總線數(shù)據(jù)。
907:對(duì)總線數(shù)據(jù)進(jìn)行數(shù)據(jù)采樣、數(shù)據(jù)解碼和數(shù)據(jù)校驗(yàn),并保存校驗(yàn)正確的總線數(shù)據(jù),以使MCU從總線通信控制器中獲取到校驗(yàn)正確的總線數(shù)據(jù)。
上述各個(gè)步驟的具體過程可以參閱上述裝置實(shí)施例中的相關(guān)說明,對(duì)此本方法實(shí)施例不再闡述。
需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對(duì)于方法實(shí)施例而言,由于其與裝置實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見裝置實(shí)施例的部分說明即可。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。