潘必超,曹 彪
(1.廣東機(jī)電職業(yè)技術(shù)學(xué)院信息工程學(xué)院,廣州510515;2.華南理工大學(xué)機(jī)械與汽車(chē)工程學(xué)院,廣州510640)
基于雙口RAM實(shí)現(xiàn)雙核通信模塊的驅(qū)動(dòng)設(shè)計(jì)
潘必超1,曹 彪2*
(1.廣東機(jī)電職業(yè)技術(shù)學(xué)院信息工程學(xué)院,廣州510515;2.華南理工大學(xué)機(jī)械與汽車(chē)工程學(xué)院,廣州510640)
傳統(tǒng)單核心控制器受制于硬件結(jié)構(gòu)相對(duì)封閉,可控參數(shù)有限,一定程度上影響了工藝過(guò)程控制的靈活性。設(shè)計(jì)一種開(kāi)放式的控制器,實(shí)現(xiàn)過(guò)程控制網(wǎng)絡(luò)化是當(dāng)今物聯(lián)網(wǎng)發(fā)展的趨勢(shì)。文章基于嵌入式Linux系統(tǒng)平臺(tái),使用高速雙端口RAM芯片CY7C024AV2,提出一種模塊化的DSP與ARM的雙核通信模塊方案及其驅(qū)動(dòng)程序的設(shè)計(jì),實(shí)現(xiàn)了控制器的雙核數(shù)據(jù)通信功能,為控制器的網(wǎng)絡(luò)智能控制建立了軟件基礎(chǔ)。實(shí)驗(yàn)證明,該驅(qū)動(dòng)程序的支持下控制器的雙核數(shù)據(jù)通信性能滿意。
嵌入式;雙核;物聯(lián)網(wǎng);驅(qū)動(dòng)程序
隨著物聯(lián)網(wǎng)產(chǎn)業(yè)的發(fā)展,工業(yè)控制智能化需求日漸提高??刂破鞒艘缲?fù)自身過(guò)程控制的基本功能外,還應(yīng)該具備一定的對(duì)外界環(huán)境的感控功能,從而實(shí)現(xiàn)物物相連。這就要求控制器必須具有開(kāi)放的接口并實(shí)現(xiàn)高效的數(shù)據(jù)交互技術(shù)。就電源控制器領(lǐng)域來(lái)說(shuō),近年來(lái)以DSP、ARM為數(shù)字化控制核心的焊接電源成為了研究的熱點(diǎn),由于其高性能高可靠性得到了廣泛的應(yīng)用[1-2]。配合嵌入式Linux操作系統(tǒng)的開(kāi)放性,控制器將具有更高的控制靈活性。但過(guò)去的控制器硬件架構(gòu)相對(duì)比較封閉。若在控制器中實(shí)現(xiàn)開(kāi)放的網(wǎng)絡(luò)接口,實(shí)現(xiàn)控制器網(wǎng)絡(luò)互連,過(guò)去傳統(tǒng)面向焊接工藝過(guò)程控制具有單一處理器架構(gòu)的控制器則難以滿足需求。為了滿足電源控制器聯(lián)網(wǎng)而產(chǎn)生的復(fù)雜多任務(wù)需求,ARM與DSP構(gòu)成的雙核控制器架構(gòu)日趨普及。目前雙核控制器的工業(yè)解決方案常見(jiàn)兩種:單芯雙核與雙芯雙核。考慮到盡量保留已有產(chǎn)品硬件結(jié)構(gòu)基礎(chǔ)上,并結(jié)合控制器成本、模塊化設(shè)計(jì)以及并行開(kāi)發(fā)問(wèn)題,本文采用雙芯雙核的松耦合架構(gòu)實(shí)現(xiàn)控制器。對(duì)于該種架構(gòu),包含雙核通信協(xié)議IPC的驅(qū)動(dòng)程序設(shè)計(jì)則成為了設(shè)計(jì)的關(guān)鍵點(diǎn)和難點(diǎn)[3-5]。本文提出了一種基于雙端口芯片CY7C024AV2實(shí)現(xiàn)控制器雙向異步通信的方案,并在Linux下實(shí)現(xiàn)了ARM與雙端口RAM的驅(qū)動(dòng)程序。實(shí)驗(yàn)結(jié)果證明,該通信架構(gòu)具有較高的可靠性。
CY7C024AV2是由Cypress公司專(zhuān)門(mén)為多核通信而推出的一款雙端口異步存儲(chǔ)芯片。該芯片可作為RAM芯片獨(dú)立使用,也能同時(shí)與兩種不同速率的MCU相連接實(shí)現(xiàn)傳輸速率匹配。且內(nèi)置了多種防止數(shù)據(jù)訪問(wèn)沖突的保護(hù)機(jī)制。該存儲(chǔ)芯片的存取周期達(dá)到20 ns,理論帶寬可以達(dá)到50 Mbit/s×16 bit/s。圖1給出了ARM芯片AM1808以及C2000系列DSP與雙端口RAM接口互連電路模塊的電路原理圖。AM1808使用EMIFA(External Memory Interface A)與CY7C024AV2其中一個(gè)端口相連接。EMIFA是AM1808用于與外部存儲(chǔ)器連接訪問(wèn)的控制器[6],其主要用途是提供一種通用的連接方法,使CPU能與多種不同的外部存儲(chǔ)設(shè)備相連接。這些外部設(shè)備可以是SDRAM、Flash與SRAM。在本設(shè)計(jì)方案中,線路連接的時(shí)候需要注意的是EMIFA的數(shù)據(jù)位寬是32位的,而CY7C024AV2是16位存儲(chǔ)器[7],在地址總線上,采用了EMA_BA_1引腳連接到了CY7C024AV2的最低地址線。這樣就使得通信雙方地址空間相匹配,均為16位數(shù)據(jù)存儲(chǔ)單元地址。而DSP端的數(shù)據(jù)位寬是16位[8],與CY7C024AV2相一致,所以無(wú)需做特別處理。
圖1 控制器內(nèi)雙核間通信接口原理
硬件設(shè)計(jì)上,基于本文雙核通信方案網(wǎng)絡(luò)擴(kuò)展模塊(后面簡(jiǎn)稱(chēng)為模塊)的電路板實(shí)物如圖2所示。模塊上集成了調(diào)試COM口、以太網(wǎng)口、IP地址撥碼器、雙端口RAM以及基于DDR2接口封裝可拆卸AM1808模塊。模塊與逆變焊機(jī)控制底板使用圖示模塊左邊緣排線接口相連。模塊化的設(shè)計(jì)更有利于整機(jī)成本的控制。
圖2 控制器雙核通信電路擴(kuò)展模塊
嵌入式Linux系統(tǒng)主要通過(guò)驅(qū)動(dòng)程序來(lái)駕馭硬件設(shè)備。驅(qū)動(dòng)硬件是操作系統(tǒng)最基本的功能,并且提供統(tǒng)一的操作方式。嵌入式Linux驅(qū)動(dòng)的一個(gè)重要特點(diǎn)就是將所有的設(shè)備都當(dāng)作是文件進(jìn)行處理[9]。因此,嵌入式Linux下的設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)主要需要完成3個(gè)任務(wù),分別是硬件板級(jí)初始化、驅(qū)動(dòng)程序初始化以及驅(qū)動(dòng)程序文件接口的實(shí)現(xiàn)[10]。驅(qū)動(dòng)程序整體結(jié)構(gòu)如圖3所示。
圖3 通信模塊驅(qū)動(dòng)程序結(jié)構(gòu)
本控制器ARM采用的AM1808,Linux在加載驅(qū)動(dòng)程序前,ARM訪問(wèn)雙端口RAM所使用的EMIFA接口的數(shù)據(jù)IO、地址IO和控制IO引腳必須處于正常的工作模式。工作模式由相應(yīng)的MUX寄存器決定的,可以通過(guò)宏MUX_CFG實(shí)現(xiàn)工作模式的切換,使用代碼如下:
上述代碼中,MUX_CFG宏的第6個(gè)參數(shù)為關(guān)鍵參數(shù),該參數(shù)的取值則為該IO引腳的實(shí)際工作模式。
其次,板級(jí)初始化還需要配置EMIFA訪問(wèn)時(shí)序參數(shù),該參數(shù)設(shè)置了總線接口中的訪問(wèn)控制線在一次讀動(dòng)作以及一次寫(xiě)動(dòng)作中的邏輯時(shí)序,該參數(shù)的取值主要由被訪問(wèn)芯片的推薦工作參數(shù)決定[6-7]:
static struct davinci_aemif_timing da850_evm_sram_timing=
在BSP源碼包中,結(jié)構(gòu)體davinci_aemif_timing定義了EMIFA總線訪問(wèn)讀、寫(xiě)時(shí)序的6個(gè)重要參數(shù)。上述代碼中相應(yīng)時(shí)間參數(shù)的單位是EMIFA總線時(shí)鐘周期。默認(rèn)情況下,總線時(shí)鐘周期是系統(tǒng)時(shí)鐘周期的2分頻。
Linux驅(qū)動(dòng)程序?qū)⒃O(shè)備視為文件。除了網(wǎng)絡(luò)設(shè)備之外,字符設(shè)備和塊設(shè)備都被映射到Linux文件系統(tǒng)的文件和目錄??梢圆捎迷L問(wèn)文件的方式訪問(wèn)物理設(shè)備[11-12],見(jiàn)圖3所示字符設(shè)備驅(qū)動(dòng)結(jié)構(gòu)。但前提是在驅(qū)動(dòng)中需要實(shí)現(xiàn)若干文件訪問(wèn)接口。通過(guò)文件系統(tǒng)的系統(tǒng)調(diào)用接口open()、write()、read()、close()等函數(shù)即可訪問(wèn)設(shè)備。
本文驅(qū)動(dòng)程序中訪問(wèn)雙端口 RAM芯片CY7C024AV2需要實(shí)現(xiàn)的文件訪問(wèn)接口包括:
(1)打開(kāi)芯片(文件)接口 這里主要負(fù)責(zé)EMIFA接口工作模式的初始化;在內(nèi)核空間中申請(qǐng)足夠的緩沖空間;分配填寫(xiě)至于filp->private_data的數(shù)據(jù)結(jié)構(gòu);檢查雙端口RAM芯片是否就緒等。
(2)釋放芯片(文件)接口 釋放已申請(qǐng)的緩沖區(qū)空間以及系統(tǒng)分配的內(nèi)存空間。這里包括打開(kāi)芯片時(shí)候分配的 filp->private_data所指向的內(nèi)存空間。
(3)讀取芯片(文件)接口 該接口的主要作用是將雙端口RAM中的數(shù)據(jù)通過(guò)調(diào)用copy_to_user ()函數(shù)實(shí)現(xiàn)從內(nèi)核空間向用戶空間復(fù)制數(shù)據(jù);從而實(shí)現(xiàn)讀取雙端口RAM的功能。
(4)寫(xiě)入芯片(文件)接口 該接口的主要作用是調(diào)用copy_from_user()函數(shù)實(shí)現(xiàn)從用戶空間將數(shù)據(jù)復(fù)制到內(nèi)核空間,從而實(shí)現(xiàn)寫(xiě)入雙端口RAM的功能。
(5)索引芯片(文件)接口 EMIFA功過(guò)在16bit異步數(shù)據(jù)收發(fā)模式,在RAM芯片尋址時(shí)候相應(yīng)地也要實(shí)現(xiàn)基于雙字節(jié)為單位的偏移量計(jì)算。從而才能正確定位數(shù)據(jù)收發(fā)的起始地址。
本驅(qū)動(dòng)程序中,file_operations結(jié)構(gòu)體的配置代碼如下:
文件訪問(wèn)接口中比較關(guān)鍵的是兩個(gè)操作。第一是實(shí)現(xiàn)從內(nèi)核空間到用戶空間的數(shù)據(jù)傳遞。copy_ from_user函數(shù),主要實(shí)現(xiàn)從用戶空間向內(nèi)核空間傳遞數(shù)據(jù)。而copy_to_user函數(shù)實(shí)現(xiàn)從內(nèi)核空間向用戶空間發(fā)送數(shù)據(jù)。第二是實(shí)現(xiàn)物理地址向內(nèi)核地址的映射,即ioremap()函數(shù)的調(diào)用。
從AM1808參考手冊(cè)可以查到EMIFA接口的物理地址是0x60000000,需要在驅(qū)動(dòng)程序頭文件中聲明雙口RAM的物理地址常量SRAM0_PHYADDR。同時(shí)雙端口RAM覆蓋2 kbyte地址空間,需要聲明內(nèi)存容量MEMDEV_SIZE。代碼如下:
#define SRAM0_PHYADDR 0x60000000
#define MEMDEV_SIZE 0x2000
驅(qū)動(dòng)程序初始化,其關(guān)鍵任務(wù)主要有兩個(gè):完成驅(qū)動(dòng)程序注冊(cè)以及建立物理內(nèi)存空間和內(nèi)核內(nèi)存空間的地址映射關(guān)系。初始化流程如圖4所示,驅(qū)動(dòng)程序首先通過(guò)調(diào)用register_chrdev_region函數(shù)向內(nèi)核注冊(cè)一字符型驅(qū)動(dòng)程序。注冊(cè)成功后,通過(guò)調(diào)用cdev_init函數(shù)實(shí)現(xiàn)注冊(cè)訪問(wèn)雙端口RAM芯片的文件訪問(wèn)接口。這里面包括了本文3.2節(jié)中指出的芯片讀、芯片寫(xiě)、芯片打開(kāi)、芯片釋放以及片內(nèi)地址定位等5個(gè)常用的文件訪問(wèn)接口。
圖4 驅(qū)動(dòng)程序初始化流程圖
建立芯片內(nèi)存地址到內(nèi)核空間地址的映射關(guān)系,是Linux驅(qū)動(dòng)程序最為關(guān)鍵的一步。首先,調(diào)用了kmalloc函數(shù),在內(nèi)核空間中申請(qǐng)一個(gè)設(shè)備結(jié)構(gòu)體變量空間。該結(jié)構(gòu)體主要用以記錄雙端口RAM的實(shí)際物理地址以及內(nèi)核空間地址。第2步,使用request_ mem_region函數(shù)登記物理地址空間SRAM0_PHYADDR開(kāi)始的2 kbyte空間被占用。最后,調(diào)用ioremap函數(shù),建立物理地址空間到內(nèi)核地址空間的映射關(guān)系。這樣,驅(qū)動(dòng)程序可以通過(guò)訪問(wèn)內(nèi)核空間地址來(lái)實(shí)現(xiàn)對(duì)雙端口RAM芯片物理地址的訪問(wèn)。
為了驗(yàn)證驅(qū)動(dòng)程序訪問(wèn)雙端口RAM時(shí)序,實(shí)驗(yàn)采用示波器測(cè)試ARM芯片AM1808EMIFA接口上的片選信號(hào)(CS)和輸出使能信號(hào)(OE)。圖5所示,信道1為EMIFA片選信號(hào),該信號(hào)為低有效。信道2為DRAM輸出使能信號(hào)信號(hào)。在一次讀操作中,由于AM1808總線工作在32 bit模式,而EMIFA配置成了16 bit異步模式,因此EMIFA需要完成2次讀請(qǐng)求動(dòng)作。因此圖3中CS控制信號(hào)與OE信號(hào)分別依次輸出2次有效信號(hào)。從讀寫(xiě)訪問(wèn)周期上,單次16位讀寫(xiě)周期為180 ns,符合2.1節(jié)中預(yù)期的設(shè)計(jì)要求。
圖5 AM1808讀操作控制線時(shí)序波形
在3.1節(jié)訪問(wèn)控制時(shí)序正確的前提下,進(jìn)一步進(jìn)行雙核通信連續(xù)讀寫(xiě)測(cè)試。這里使用32通邏輯分析儀,如圖 6所示,CH1~CH11分別掛接在AM1808與DRAM的數(shù)據(jù)總線上,CH17掛接在輸出使能OE引腳上。采用測(cè)試邏輯是DSP先向DRAM 2 kbyte字節(jié)順序?qū)憹M20~210,由AM1808執(zhí)行進(jìn)行連續(xù)讀請(qǐng)求。由圖上可見(jiàn)數(shù)據(jù)總線能呈現(xiàn)出20~210的數(shù)據(jù)返回值。在2.1節(jié)中,由于當(dāng)前驅(qū)動(dòng)參數(shù)設(shè)置了一次讀寫(xiě)周期為180 ns,圖4下方時(shí)間坐標(biāo)軸時(shí)間單位為μs,本次測(cè)試在35μs時(shí)間內(nèi)完成了192次讀操作,因此在該驅(qū)動(dòng)參數(shù)下控制器雙核通信帶寬達(dá)到雙向88 Mbit/s。這個(gè)通信帶寬能完全滿足正??刂撇蓸訑?shù)據(jù)的高速上傳。
圖6 邏輯分析儀記錄AM1808連續(xù)讀雙端口RAM信號(hào)
本文在嵌入式Linux系統(tǒng)之上采用雙端口型高速RAM芯片CY7C024AV2開(kāi)發(fā)控制器雙核擴(kuò)展模塊及其驅(qū)動(dòng)程序,實(shí)現(xiàn)了控制器ARM+DSP的雙核通信架構(gòu),從而在原電源控制器基礎(chǔ)上實(shí)現(xiàn)了網(wǎng)絡(luò)接口的擴(kuò)展。這將大大提高了控制器對(duì)于過(guò)程工藝控制開(kāi)放性,為控制器互聯(lián)及其物聯(lián)網(wǎng)控制提供了硬件基礎(chǔ)和軟件基礎(chǔ)。在示波器和邏輯分析儀的輔助下,本文所設(shè)計(jì)的驅(qū)動(dòng)程序的正確性得到了驗(yàn)證,同時(shí)基于該驅(qū)動(dòng)程序之上的雙核通信模塊也具備了較高的通信性能。
[1]郝小江.基于DSP逆變焊接電源數(shù)字控制[J].電焊機(jī),2010,40(9):40-42.
[2]霍明.基于ARM控制的多功能數(shù)字化逆變焊接電源[J].焊接技術(shù),2009,38(2):5-8.
[3]劉玉珍,張曄.雙端口RAM在ARM與DSP通信系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(11):213-216.
[4]安劍奇,廖麗清,溫興清.高速雙端口共享存儲(chǔ)器IDT7025及其應(yīng)用[J].電子工藝技術(shù),2006,27(5):291-293.
[5]朱欣華.多機(jī)系統(tǒng)中雙口RAM的構(gòu)成方法及應(yīng)用[J].測(cè)控技術(shù),2006,15(2):44-46.
[6]AM1808/AM1810 ARM Microprocessor Technical Reference Manual[M].Texas Instruments,December 2011.
[7]CY7C024AV Technical Reference Manual(Document38-06052)[S].Cypress Semiconductor Corporation,March 30,2011.
[8]TMS320F28335 Digital Signal Controllers(DSCs)Data Manual (Literature Number:SPRS439I)[M].Texas Instruments,March 2011.
[9]章堅(jiān)武,許曉榮,李波.基于嵌入式Linux的雙口異步RAM驅(qū)動(dòng)開(kāi)發(fā)[J].電子器件,2006,29(2):536-538.
[10]屈克文,石奮蘇.基于ARM-Linux的旋轉(zhuǎn)編碼器接口與驅(qū)動(dòng)程序的設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用,2011,31(12S):156-163.
[11]Ju Jinwu,Cai Lecai,Luo Renjia.The Design of Linux Driver of WSN Nodes Based on ARM[C]//Intelligent Computation Tech-nology and Automation(ICICTA),2011 International Conference,Page(s):761-764.
[12]Liu Long,Zhang Yuncui.Improved Method of Computer Keyboard Driver Based on Embedded Linux[C]//Fuzzy Systems and Knowledge Discovery(FSKD),2012 9th International Conference,Page (s):2482-2486.
Driver Designed for Dual-Core Communication Module Based on Dual-Port RAM
PAN Bichao1,CAO Biao2*
(1.College of Information Engineering,Guangdong Ji Dian Polytechnic,Guangzhou 510515,China; 2.School of Mechanical and Automobile Engineering,South China University of Technology,Guangzhou 510640,China)
The flexibility of process control is greatly affected by the relatively closed hardware architecture and limited amount of control parameters.It is a trend to develop a smart controller with open hardware architecture which can make it possible of control process network.With the use of Dual-Port RAM CY7C024AV2,A dual-core solution with DSP and ARM is presented,as long as the driver development under embedded Linux for the dual-core controller module.The driver presented provided software basis for intelligent network controlmethods.Experiment result shows that the driver can achieve a good performance on inter-core communication.
embedded system;dual-core;internet of things;driver
10.3969/j.issn.1005-9490.2014.01.013
TP31 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1005-9490(2014)01-0050-05
2013-05-11修改日期:2013-06-12
EEACC:6210C
潘必超(1978-),男,漢族,廣東惠州人,廣東機(jī)電職業(yè)技術(shù)學(xué)院講師/系統(tǒng)分析師,碩士,研究方向?yàn)閿?shù)字化電源裝備及智能控制技術(shù),物聯(lián)網(wǎng)應(yīng)用技術(shù),bcpan@126.com;
曹 彪(1963-),男,漢族,貴州盤(pán)縣人,教授/博士生導(dǎo)師,研究方向?yàn)閿?shù)字化電源設(shè)備及智能控制技術(shù):高性能工業(yè)逆變電源的設(shè)計(jì)、計(jì)算機(jī)仿真與智能控制,電力電子技術(shù),新型開(kāi)關(guān)電源及應(yīng)用技術(shù)。