張開生,彭 朋
(陜西科技大學(xué) 電氣與信息工程學(xué)院,陜西 西安 710021)
基于LPC2103的LED顯示字庫無線通信系統(tǒng)設(shè)計
張開生,彭 朋
(陜西科技大學(xué) 電氣與信息工程學(xué)院,陜西 西安 710021)
針對LED顯示屏的字庫更新和數(shù)據(jù)傳輸問題,采用嵌入式微處理器LPC2103作為LED顯示屏的控制中樞,通過IAP技術(shù)存儲和更新其內(nèi)部Flash中的字庫數(shù)據(jù),采用ZigBee技術(shù)無線傳輸數(shù)據(jù)。重點闡述了在存儲和更新LED顯示屏的字庫時,上位機通過ZigBee協(xié)調(diào)器把LED顯示屏需要更新的字庫數(shù)據(jù)無線發(fā)送給與LPC2103相連的ZigBee終端節(jié)點,終端節(jié)點將該數(shù)據(jù)通過串口發(fā)給LPC2103,再利用IAP技術(shù)對LPC2103內(nèi)部Flash進行單獨編程操作,達到存儲和更新字庫數(shù)據(jù)的目的。實驗表明,構(gòu)建的LED字庫數(shù)據(jù)無線更新系統(tǒng)運行良好,切實可行。
IAP;LPC2103;LED顯示屏;字庫更新;ZigBee數(shù)據(jù)傳輸
隨著現(xiàn)代生活節(jié)奏的加快, LED顯示屏成了人們?nèi)粘I罟ぷ髦胁豢扇鄙俚牟糠?,廣泛應(yīng)用于車站、廣場、企事業(yè)單位等場所,成為發(fā)布信息的極好工具[1]。傳統(tǒng)的LED顯示技術(shù)通常把單片機作為微控制器,但是單片機受時鐘頻率(通常為12 MHz)的限制,當(dāng)LED顯示屏顯示的數(shù)據(jù)量較大時,則會因為掃描速度太慢而導(dǎo)致LED顯示屏出現(xiàn)閃爍,造成不穩(wěn)定的視覺效果,為此系統(tǒng)采用嵌入式微處理器LPC2103作為控制器[2],不僅提高了微處理器的運算速度及系統(tǒng)的穩(wěn)定性,同時由于LPC2103自帶的PLL(鎖相環(huán))電路可以使系統(tǒng)的時鐘頻率倍頻到70 MHz。
從顯示字庫存儲位置的角度出發(fā),市場上現(xiàn)有的LED屏的顯示字庫在微處理器中的存放位置一般分為兩種,一種是把顯示字庫同主函數(shù)、子函數(shù)一樣直接存在微處理器處的內(nèi)部ROM或Flash中,缺陷是當(dāng)需要更新LED屏的顯示字庫時,除了更新顯示字庫外,還需要連同主函數(shù)、子函數(shù)也要一起更新,而這些操作,需要操作人員具有專業(yè)的技能才能做到。另一種是把字庫放在處理器拓展的外部存儲器中,這種方法的缺陷是需要擴展外部存儲器,這樣不僅降低了數(shù)據(jù)的讀取速度,而且還增加了系統(tǒng)成本。為了解決上述問題,系統(tǒng)把顯示字庫放在LPC2103的內(nèi)部Flash中,首次采用IAP(In-Application Programming)[3-6]技術(shù)只對存放顯示字庫的那部分Flash進行操作,較好的解決了上述問題。
從顯示字庫數(shù)據(jù)傳輸?shù)慕嵌瘸霭l(fā),市場上現(xiàn)有的LED顯示屏當(dāng)需要更新顯示字庫時一部分是通過有線與上位機連接的[7],有線連接受到距離、場地、布線復(fù)雜度高的限制;另一部分則是通過WiFi、藍牙等無線網(wǎng)絡(luò)與上位機連接的,WiFi在沒有Internet的場合則無法工作;藍牙則不能自組網(wǎng),而系統(tǒng)采用ZigBee通信技術(shù)來無線傳輸數(shù)據(jù),較好地解決了上述問題。
基于LPC2103的LED顯示字庫無線更新系統(tǒng),主要由計算機、ZigBee通信模塊以及LED顯示屏3部分組成[1]。計算機的USB通過RS-232與協(xié)調(diào)器的串口相連,LPC2103與終端節(jié)點相連,由于一個協(xié)調(diào)器可以同時和多個終端節(jié)點通信,每個要更新顯示內(nèi)容的LED顯示屏連接一個終端節(jié)點,然后把這些終端節(jié)點都加入同一個網(wǎng)絡(luò),這樣即可一次更新多個LED顯示屏的顯示內(nèi)容。系統(tǒng)主體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)主體結(jié)構(gòu)
當(dāng)需要更新LED顯示屏的內(nèi)容時,首先組建以協(xié)調(diào)器為中心節(jié)點的星型網(wǎng)絡(luò),網(wǎng)絡(luò)建立完成后,計算機通過上位機軟件將要更新的數(shù)據(jù)內(nèi)容通過串口發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器收到數(shù)據(jù)之后,將數(shù)據(jù)發(fā)送給各個終端節(jié)點,終端節(jié)點然后將數(shù)據(jù)通過串口傳給LED顯示屏的微處理器LPC2103,LPC2103收到數(shù)據(jù)之后通過IAP程序?qū)?shù)據(jù)寫到自身的Flash中,然后從Flash中讀出這部分?jǐn)?shù)據(jù),替換原有的LED顯示字庫,從而達到只更新LED顯示屏字庫的目的。
在ZigBee網(wǎng)絡(luò)中,數(shù)據(jù)包可以被單播、多播或廣播。一個多播數(shù)據(jù)包發(fā)送給一組設(shè)備,這就保證了一次可以更新多個LED顯示屏。由于LPC2103有32 kbyte的片內(nèi)Flash,可以實現(xiàn)IAP編程,這樣就可以不用擴展外部存儲器,而直接把內(nèi)部Flash當(dāng)做EEPROM來時使用,這樣在更新顯示屏內(nèi)容時不用重新對LPC2103進行程序燒寫,只需要通過串口就可以更新想要更新的內(nèi)容。
2.1 IAP軟件設(shè)計
LPC2103是一個基于支持實時仿真的16/32位ARM7 TDMI-S CPU的微控制器,內(nèi)部有8 kbyte的片內(nèi)靜態(tài)RAM和32 kbyte的片內(nèi)Flash程序存儲器;單個扇區(qū)或整片扇區(qū)擦出時間為100 ms,256 byte編程時間為1 ms;有多個串口,包括2個UART(16C550協(xié)議)。
對Flash的編程操作分為兩種,一種是在系統(tǒng)編程(ISP),另一種是在應(yīng)用編程(IAP)。所謂在系統(tǒng)編程(ISP)是通過 Boot 裝載程序和UART0 對片內(nèi) Flash 存儲器進行擦除/編程的方法[9],如圖2所示。
圖2 ISP 編程示意圖
所謂在應(yīng)用編程(IAP)是用戶的應(yīng)用代碼對片內(nèi) Flash 存儲器進行擦除/編程的方法,如圖3 所示。
圖3 IAP 編程示意圖
基于LPC2103的LED顯示字庫無線更新系統(tǒng)中,為了對LED屏顯示字庫進行更新,需要一塊單獨存儲字庫數(shù)據(jù)的存儲區(qū)域。LPC2103具有32 kbyte的Flash,存儲在LPC2103 Flash中的正常顯示程序只有十幾kbyte,如果LPC2103擴展外部存儲器(如EEPROM)專門用來存儲LED屏字庫數(shù)據(jù),不僅提高了成本,對LPC2103的資源造成浪費,而且降低了數(shù)據(jù)的讀取速度,因此系統(tǒng)采用IAP技術(shù)對LPC2103的Flash進行編程操作,來存儲LED屏字庫數(shù)據(jù)。LPC2103的Flash分為8個扇區(qū),每個扇區(qū)4 kbyte,如表1所示。
表1 LPC2103的Flash扇區(qū)
要對內(nèi)部Flash進行寫操作,首先要知道對哪個扇區(qū)的Flash進行操作,可以用LPC2000 Buffer Utility查看hex文件在LPC2103 Flash中的存儲詳情,此外點擊LPC2000 Buffer Utility中的Download Flash按鈕可以讀出處理器中當(dāng)前的hex文件,用這種方法可以查看IAP對Flash的寫操作是否成功。要用IAP對Flash進行操作,需要按步驟進行操作,如圖4所示。
圖4 片內(nèi)Flash編程步驟
IAP對Flash進行編程操作時一次至少對一個扇區(qū)進行操作[8],所以一次寫入的字節(jié)數(shù)固定為256、512、1 024 或者 4 096。 IAP程序運行時要關(guān)閉所有的中斷,特別注意的是要在啟動代碼Startup.s文件中的InitStack函數(shù)內(nèi)設(shè)置系統(tǒng)堆棧模式,程序如下:
MSR CPSR_c, #0xdf
LDR SP,=StackUsr-32
MOV PC, R0
為了提高LPC2103的掃描速度,當(dāng)LED顯示屏不需要更新顯示內(nèi)容時,LPC2103只執(zhí)行當(dāng)前的顯示程序,而不執(zhí)行IAP程序,所以在LED顯示屏的控制模塊中增加一個按鍵,當(dāng)需要無線更新LED顯示屏的顯示內(nèi)容時,上位機要先發(fā)送一個低電平給LPC2103,按下按鍵,當(dāng)檢測到按鍵按下后LED顯示屏微處理器(LPC2103)的串口開始接收數(shù)據(jù),接收完以后,把該數(shù)據(jù)寫到Flash相關(guān)的扇區(qū)中,然后從該扇區(qū)讀出該數(shù)據(jù),相關(guān)代碼如下:
if((IOPIN&KEY)==0) //檢測按鍵是否按下
{
DelayNS(3);//延時一會
if((IOPIN&KEY)==0)//按鍵確實按下
{
for(i=0;i<512;i++)
{
uiBuf[i]=jieshou();//從串口接收字符串
}
/*把從串口接收到的數(shù)據(jù)寫到Flash中*/
WriteFlash(DestAddr, (uint32)uiBuf, 512);
ReadFlash();//從Flash中讀出該數(shù)據(jù)
}
}
LED顯示屏的微處理器LPC2103從串口接收到的數(shù)據(jù)最開始存儲在RAM中,此時給LPC2103掉電或者復(fù)位以后該數(shù)據(jù)就會丟失。為了不讓該數(shù)據(jù)丟失,在沒有擴展外部存儲器(例如EEPROM)的條件下,只能將該數(shù)據(jù)從RAM寫到內(nèi)部Flash中,相關(guān)代碼如下:
uint8 WriteFlash(uint32 dst, uint32 src, uint32 no)
{
SelSector((dst/0x1000),(dst+no)/0x1000); //選擇扇區(qū)
EraseSector((dst/0x1000),(dst+no)/0x1000); //擦除扇區(qū)
BlankCHK((dst/0x1000),(dst+no)/0x1000); //查空扇區(qū)
elSector((dst/0x1000),(dst+no)/0x1000); //選擇扇區(qū)
RamToFlash(dst,src,no); //寫數(shù)據(jù)到Flash
return(Compare(dst,src,no)); //比較數(shù)據(jù)
}
由于CPU從Flash(ROM)中讀取數(shù)據(jù)的速度較慢,為了提高速度,CPU開機以后,先將數(shù)據(jù)從Flash讀到RAM中,然后從RAM中取指令執(zhí)行相關(guān)命令,LPC2013也是一樣,從串口接收到的數(shù)據(jù)寫到Flash中以后,為了更新RAM中的數(shù)據(jù),還要把該數(shù)據(jù)從Flash中讀出來,相關(guān)代碼如下:
void ReadFlash()
{
uint32 i;
uint8 *p;
p=(uint8 *)DestAddr; //DestAddr為第五扇區(qū)的首地址
for(i=0;i<512;i++)
{
/*把讀取的數(shù)據(jù)從放在shanqu5[]這個數(shù)組中*/
shanqu5[i]=*p;
p++;
}
}
系統(tǒng)通過上述方法,利用IAP技術(shù)只對顯示字庫進行更新的程序流程圖如圖5所示。
圖5 字庫更新流程圖
2.2 ZigBee模塊的設(shè)計
系統(tǒng)將ZigBee中的協(xié)調(diào)器作為發(fā)送設(shè)備與上位機通過串口相連,把ZigBee中的終端節(jié)點作為接收設(shè)備與LPC2103相連。協(xié)調(diào)器和終端節(jié)點的微控制器芯片都采用TI公司的CC2430。CC2430具有2.4 GHz IEEE802.15.4兼容RF收發(fā)器,具有優(yōu)良的接收靈敏度和抗干擾性,而且功耗很低,有多種工作模式[9]。
系統(tǒng)中ZigBee模塊的設(shè)計主要分為硬件部分和軟件部分。硬件部分主要由電源電路、復(fù)位電路、串口接收電路和無線收發(fā)電路組成[10]。由于ZigBee硬件電路相對成熟,這里把設(shè)計重點放在軟件部分。硬件選型上采用SIKAI ELECTRONICS公司的ARMSKY-CC2430EB開發(fā)板。對單個LED顯示屏操作時,使用2個ARMSKY-CC2430EB開發(fā)板,一個配置為協(xié)調(diào)器(CoodinatorEB)設(shè)備,另一個配置為終端設(shè)備(EndDeviceEB);對多個LED顯示屏操作時,可采用多塊開發(fā)板。
協(xié)調(diào)器與上位機相連,在系統(tǒng)中主要功能是接收上位機通過串口發(fā)來的LED屏字庫數(shù)據(jù),然后將該數(shù)據(jù)通過RF發(fā)送給終端節(jié)點,協(xié)調(diào)器從串口讀數(shù)據(jù)的函數(shù)模型如下:
uint16 HalUARTRead(uint8 port, uint8 *buf, uint16 len );
該函數(shù)的功能是讀取UART緩沖區(qū)的數(shù)據(jù)。形參port用來指定數(shù)據(jù)將被讀取的串口、buff是數(shù)據(jù)緩沖區(qū)的指針、len是所請求的數(shù)據(jù)長度。
終端節(jié)點與LED顯示屏的微控制器LPC2103相連,在系統(tǒng)中的主要功能是接收協(xié)調(diào)器發(fā)過來的LED屏字庫數(shù)據(jù),然后將該數(shù)據(jù)通過串口發(fā)送給LPC2103,終端節(jié)點部分串口發(fā)送函數(shù)模型如下:
uint16 HalUARTWrite( uint8 port, uint8 *buf, uint16 len );
該函數(shù)的功能是寫一個指定長度的緩沖區(qū)到一個指定串口。這3個形參和上述講的3個形參功能類似,這里就不再贅述。
基于LPC2103的LED顯示字庫無線更新系統(tǒng)硬件組成如圖6所示。
圖6 系統(tǒng)整體硬件(照片)
圖6右半部分與PC機相連的是ZigBee協(xié)調(diào)器模塊,左半部分有個小天線的是ZigBee終端節(jié)點,與終端節(jié)點相連的是微處理器模塊,芯片采用的是LPC2103,微處理器與LED顯示屏相連。利用ZigBee通信技術(shù)對LED顯示屏的顯示字庫進行IAP更新的具體操作是用上機軟件將LED顯示屏需要更新的顯示字庫通過串口發(fā)送給ZigBee協(xié)調(diào)器模塊,協(xié)調(diào)器將該數(shù)據(jù)發(fā)送ZigBee終端節(jié)點,終端節(jié)點通過串口將該數(shù)據(jù)發(fā)送給LED顯示屏的為控制器LPC2103,LPC2103通過查詢方式收到該數(shù)據(jù)后存儲在RAM中,如果此時給LPC2103掉電或者復(fù)位,該數(shù)據(jù)就會丟失,為了不讓該數(shù)據(jù)丟失,實驗將該數(shù)據(jù)寫到LPC2103的第五扇區(qū)。然后利用LPC200 Buffer Utility軟件的Download Flash把微處理器中的Flash數(shù)據(jù)讀回來,看是否把該數(shù)據(jù)寫到了第五扇區(qū)。LPC2103沒有通過IAP更新之前的Flash如圖7所示。
圖7 IAP更新之前的Flash(截圖)
LPC2103的第五扇區(qū)是從0x00005000開始的,IAP更新之前第五扇區(qū)里面默認(rèn)數(shù)據(jù)是0xFF,為了便于觀察,實驗將 0~511 共512個數(shù)據(jù)寫到LPC2103的第五扇區(qū),第五扇區(qū)經(jīng)過IAP更新以后如圖8所示。
圖8 IAP更新之前的Flash(截圖)
由于LPC2103的Flash數(shù)據(jù)是以8位的十六進制文件存儲的,8位二進制數(shù)的范圍是0~255,所以從0x00005100開始寫入256個數(shù),從0(0x00)開始,255(0xff)結(jié)束,而LED顯示屏的顯示數(shù)據(jù)是由8位的十六進制數(shù)構(gòu)成的所以不會超出范圍。由于0~511可以通過上位機軟件,利用ZigBee技術(shù)無線對LPC2103 Flash的第五扇區(qū)數(shù)據(jù)進行IAP更新,同理LED顯示屏的顯示字庫也可以通過上位機軟件,利用ZigBee技術(shù)無線對LPC2103 Flash的其他扇區(qū)進行操作,然后讀出該數(shù)據(jù)對LED顯示屏的顯示內(nèi)容進行更新,這里就不再贅述。
基于LPC2103的LED數(shù)據(jù)庫數(shù)據(jù)交互研究,采用了物聯(lián)網(wǎng)技術(shù),與市場上常用的WiFi和其他無線或者有線技術(shù)相比,具有功耗低,成本低,系統(tǒng)工作頻段靈活等優(yōu)勢,更重要的是ZigBee協(xié)議具有自組網(wǎng)功能,可以對多塊LED顯示屏進行同時更新字庫內(nèi)容。除此以外,系統(tǒng)采用了IAP技術(shù),每次只更新顯示字庫,大大降低了更新LED顯示字庫的操作難度。經(jīng)實驗測試及實際應(yīng)用,對LED顯示屏的操作具有簡單、方便、靈活等諸多優(yōu)點,效果良好,該方法對操作多個LED顯示屏優(yōu)勢更為顯著。
[1] 李超,柏連發(fā). 基于ARM的LED顯示控制技術(shù)研究[D]. 南京理工大學(xué),2009.
[2] 羅中華. LED信息顯示屏系統(tǒng)的設(shè)計[D]. 南昌:南昌大學(xué),2008.
[3] 趙偉,殷廷. 基于ARM7的應(yīng)用程序在線升級設(shè)計[J]. 電子科技,2011,24(1):16-21.
[4] 胡秀麗. 基于ARM7片內(nèi)Flash的兩種軟件升級方案[J].電腦學(xué)習(xí),2010,2(1):120-122.
[5] 梁偉. 基于IAP的ARM7程序在線更新設(shè)計[J]. 電子科技,2009,22(11):63-68.
[6] 張艷艷,王慧博.基于LPC2210微處理器的Boodoader的分析與設(shè)計[J].白城師范學(xué)院學(xué)報,2007,21(6):49-51.
[7] 肖晉為,陳希. 基于ZigBee模塊的無線通信技術(shù)的LED顯示屏的研究[D]. 天津科技大學(xué), 2010.
[8] 劉憶輝,魏銀庫. 片外Flash存儲器IAP的一種方案[J]. 技術(shù)縱橫,2006(2):37-38.
[9] 閆沫. ZigBee協(xié)議棧的分析與設(shè)計[D].廈門:廈門大學(xué),2007.
[10]呂鑫,王忠. ZigBee無線數(shù)據(jù)傳輸模塊的設(shè)計與實現(xiàn)[J]. 安徽師范大學(xué)學(xué)報:自然科學(xué)版,2010(4):332-335.
LED Display Word Stock Update Wireless Research Based on LPC2103
ZHANG Kaisheng, PENG Peng
(CollegeofElectricalandInformationEngineering,ShannxiUniversityofScienceandTechnology,Xi’an710021,China)
Aim at the problem of LED display word stock update and data transmission, the system adopts the embedded microcontroller processor LPC2103 as the control center of the LED display. By the technology of IAP storage and update font data in its internal Flash, display word stock is transmitted wirelessly by ZigBee technology. When update LED display content, PC wirelessly transfer the data on LED needed to update to ZigBee terminal nodes connected to the LPC2103 via ZigBee coordinator, terminal node send the data via UART to LPC2103, reuse IAP technology to program LPC2103 internal Flash, to achieve the purpose of only storing and updating character data. Experiments show that the built LED character data wireless update system runs well, is feasible.
IAP; LPC2103; LED panel; word stock update; ZigBee data transmission
【本文獻信息】張開生,彭朋.基于LPC2103的LED顯示字庫無線通信系統(tǒng)設(shè)計[J].電視技術(shù),2015,39(13).
陜西校地合作項目(2011K-29);陜西省西安未央科技區(qū)項目( 2012-03)
TN948
A
10.16280/j.videoe.2015.13.024
責(zé)任編輯:閆雯雯
2014-11-26
張開生(1963— ),博士,教授,主要從事嵌入式系統(tǒng)、物聯(lián)網(wǎng)技術(shù)的應(yīng)用及開發(fā)研究。