陽樂凱
(廣州致遠(yuǎn)電子股份有限公司,廣東 廣州 510641)
我們知道,強(qiáng)大的網(wǎng)絡(luò)可以為系統(tǒng)的穩(wěn)定運(yùn)行提供可靠的保障,通信網(wǎng)絡(luò)可以認(rèn)為是控制系統(tǒng)的中樞神經(jīng)系統(tǒng)。CAN 總線控制系統(tǒng)的網(wǎng)絡(luò)搭建應(yīng)在早期給予足夠的重視,做到網(wǎng)絡(luò)總體規(guī)劃,合理設(shè)計(jì)及安裝,總的來說,網(wǎng)絡(luò)搭建需要做好以下幾個(gè)步驟的工作才能保障總線長期穩(wěn)定的運(yùn)行。
本產(chǎn)品實(shí)現(xiàn)8 通道CAN 集線器功能,實(shí)現(xiàn)8 個(gè)通道CAN 幀接收、緩存、幀映射、幀轉(zhuǎn)發(fā)等功能。通過UART(USB 或RS232)使用類似ModBus 協(xié)議與上位機(jī)通信,實(shí)現(xiàn)CAN 集線器的功能配置。CAN 集線器能實(shí)現(xiàn)多個(gè)CAN 網(wǎng)絡(luò)的透明連接,可以在總線級別實(shí)現(xiàn)復(fù)雜結(jié)構(gòu)的多點(diǎn)連接;CAN 集線器使得主干網(wǎng)絡(luò)沒有支線長度限制,網(wǎng)絡(luò)中任意兩個(gè)節(jié)點(diǎn)可以到達(dá)協(xié)議距離,該設(shè)備具有8 個(gè)通信端口,每個(gè)端口都有獨(dú)立的CAN 收發(fā)器,能倍增節(jié)點(diǎn)數(shù)目,因此,在提供自由的布線方式的同時(shí),也解除了系統(tǒng)總線上CAN 收發(fā)器最大節(jié)點(diǎn)數(shù)驅(qū)動(dòng)限制。每個(gè)端口還具備檢測總線活躍及總線故障指示燈,方便觀察CAN 總線網(wǎng)絡(luò)工作狀態(tài)。CAN 集線器可用于波特率高達(dá)1Mbps 的CAN 網(wǎng)絡(luò),所有通道均可在不同的波特率下工作,其符合CAN 規(guī)范2.0A(11 位CAN 標(biāo)識符)和2.0B(29 位CAN 標(biāo)識符),支持透明的,協(xié)議獨(dú)立的CAN 消息傳輸,使其適用于多種應(yīng)用。[1]
整個(gè)系統(tǒng)采用FPGA+SJF1000 方式,F(xiàn)PGA 負(fù)責(zé)將SJA1000 的CAN 數(shù)據(jù)波特率、路由表、濾波表、幀映射的規(guī)則進(jìn)行各路之間的轉(zhuǎn)發(fā),通過FPGA 的串口實(shí)現(xiàn)產(chǎn)品的配置和監(jiān)控。本設(shè)計(jì)主要實(shí)現(xiàn)8 通道CAN 的集線器功能,實(shí)現(xiàn)8 通道之間的轉(zhuǎn)發(fā)和幀映射功能,實(shí)現(xiàn)框圖見圖1。主要由wishbone 仲裁部分和AXI 互連部分各模塊組成。
圖1 內(nèi)部設(shè)計(jì)框圖
wishbone 部分各模塊實(shí)現(xiàn)8 通道sja1000 的管理。LocalBus 主要實(shí)現(xiàn)與8 通道sja1000 的通信;中斷控制實(shí)現(xiàn)對sja1000 中斷的接收和管理;錯(cuò)誤處理模塊實(shí)現(xiàn)各通道的錯(cuò)誤自動(dòng)處理;接收控制和發(fā)送控制配合集線器邏輯實(shí)現(xiàn)本設(shè)計(jì)的核心功能——幀緩存、幀映射和路由等功能;axi2wb 模塊為通過AXI 配置各通道sja1000 提供接口,實(shí)現(xiàn)Microblaze 對各通道sja1000 的配置。[2]
AXI 互連部分主要實(shí)現(xiàn)上位機(jī)對集線器功能的控制。其中ModBus 模塊主要實(shí)現(xiàn)通過UART 與上位機(jī)通信,UART 可以通過USB 或RS232 兩種UART,兩種UART 會(huì)自動(dòng)切換,當(dāng)有USB 插入時(shí)則使用USB 轉(zhuǎn)UART 的ft232 的串口,沒有USB 插入時(shí)則自動(dòng)切換到RS232 的串口來通信;加密和DNA 模塊主要實(shí)現(xiàn)對固件的加密;flash 模塊主要實(shí)現(xiàn)信息的存儲(chǔ),包括固件、配置信息和加密信息等;交互模塊主要實(shí)現(xiàn)對外設(shè)的控制和與上位機(jī)的交互操作;axi2wb 模塊實(shí)現(xiàn)對各通道sja1000 的配置接口;Microblaze 用于實(shí)現(xiàn)以上功能的控制和與上位機(jī)的交互,上電后實(shí)現(xiàn)對固件的加密驗(yàn)證,實(shí)現(xiàn)從flash 讀取上位機(jī)的配置并將其配置到指定的sja1000 中或集線器邏輯中,并通過交互模塊對其它各外設(shè)的控制和與上位機(jī)的交互。
集線器邏輯實(shí)現(xiàn)幀緩存、幀映射和轉(zhuǎn)發(fā)等功能。集線器邏輯從接收控制模塊接收幀后通過AXI 接口和DDR 控制器將幀緩存到外部DDR3 中;當(dāng)能發(fā)送時(shí)從DDR 中讀取出來,并根據(jù)配置來映射幀并轉(zhuǎn)發(fā)到設(shè)置的通道中,通過發(fā)送控制模塊發(fā)送到sja1000。
本設(shè)計(jì)中各模塊時(shí)鐘關(guān)系如圖2,外部輸入時(shí)鐘20MHz,通過CMT0 生成100MHz 主時(shí)鐘到各模塊;同時(shí)也輸入到CMT1 中用于生成MIG(DDR 控制)的各時(shí)鐘(6666.6MHz 差分時(shí)鐘和83.3MHz 時(shí)鐘);另外,由于flash 最大支持80MHz,這里使用CMT0 生成的50MHz 時(shí)鐘;DNA 讀取模塊中DNA 原語(Spartan-6)中最大只支持2MHz,所以DNA 模塊使用CMT0 生成的2MHz 時(shí)鐘讀取器件DNA。
圖2 各模塊時(shí)鐘關(guān)系
CANHub-AS8 內(nèi)部詳細(xì)結(jié)構(gòu)如圖3,sja1000 控制模塊主要有l(wèi)ocalbus 模塊、中斷控制模塊、錯(cuò)誤處理模塊、接收控制模塊和發(fā)送控制模塊;與上位機(jī)通信主要有ModBus 模塊、交互模塊、flash 控制模塊和Microblaze;加密部分主要有加密模塊和DNA 模塊,加密信息存入flash 中;axi2wb 模塊主要實(shí)現(xiàn)sja1000 的配置;集線器邏輯主要實(shí)現(xiàn)幀映射、路由轉(zhuǎn)發(fā)和幀緩存等。
圖3 集線器內(nèi)部詳細(xì)結(jié)構(gòu)
sja1000 配置和與上位機(jī)通信的各操作主要有Micro blaze 實(shí)現(xiàn),Microblaze 軟件控制流程如圖3,主要實(shí)現(xiàn)上電復(fù)位后對加密的驗(yàn)證;從flash 讀取設(shè)備序列號存入寄存器操作;初始化各通道sja1000;外部按鈕的處理和USB 插入和拔出的處理等;對上位機(jī)發(fā)送命令的處理等。[3-7]
對于現(xiàn)有技術(shù)的控制方式,由于ARM 處理速度受限制,當(dāng)需要8 路CAN 通信同時(shí)使用的時(shí)候,經(jīng)常出現(xiàn)丟幀、幀重復(fù)等錯(cuò)誤,本設(shè)計(jì)采用FPGA 作為主控,由于FPGA 接收到中斷只要幾個(gè)時(shí)鐘周期(幾十ns)就可以開始處理,而ARM 收到中斷需要指令跳轉(zhuǎn),而且還不止一次跳轉(zhuǎn),各種計(jì)算也是串行的,而FPGA 中各種計(jì)算都是并行的,比如ARM 接收到一幀的1Byte就要存儲(chǔ)到內(nèi)存,這個(gè)過程要先接收1Byte 再寫入內(nèi)存,不能同時(shí)開始,而且寫內(nèi)存的時(shí)間也不短;而FPGA中在收到1Byte 后存入寄存器(很快,一個(gè)時(shí)鐘周期=10ns),在寫入緩存(其實(shí)寫入緩存也很快)的同時(shí)就可以繼續(xù)接收下1Byte 了,大大提升了處理速度。