張開生,彭 朋
(陜西科技大學 電氣與信息工程學院,陜西 西安 710021)
基于LPC2103的LED顯示字庫無線通信系統設計
張開生,彭 朋
(陜西科技大學 電氣與信息工程學院,陜西 西安 710021)
針對LED顯示屏的字庫更新和數據傳輸問題,采用嵌入式微處理器LPC2103作為LED顯示屏的控制中樞,通過IAP技術存儲和更新其內部Flash中的字庫數據,采用ZigBee技術無線傳輸數據。重點闡述了在存儲和更新LED顯示屏的字庫時,上位機通過ZigBee協調器把LED顯示屏需要更新的字庫數據無線發送給與LPC2103相連的ZigBee終端節點,終端節點將該數據通過串口發給LPC2103,再利用IAP技術對LPC2103內部Flash進行單獨編程操作,達到存儲和更新字庫數據的目的。實驗表明,構建的LED字庫數據無線更新系統運行良好,切實可行。
IAP;LPC2103;LED顯示屏;字庫更新;ZigBee數據傳輸
隨著現代生活節奏的加快, LED顯示屏成了人們日常生活工作中不可缺少的部分,廣泛應用于車站、廣場、企事業單位等場所,成為發布信息的極好工具[1]。傳統的LED顯示技術通常把單片機作為微控制器,但是單片機受時鐘頻率(通常為12 MHz)的限制,當LED顯示屏顯示的數據量較大時,則會因為掃描速度太慢而導致LED顯示屏出現閃爍,造成不穩定的視覺效果,為此系統采用嵌入式微處理器LPC2103作為控制器[2],不僅提高了微處理器的運算速度及系統的穩定性,同時由于LPC2103自帶的PLL(鎖相環)電路可以使系統的時鐘頻率倍頻到70 MHz。
從顯示字庫存儲位置的角度出發,市場上現有的LED屏的顯示字庫在微處理器中的存放位置一般分為兩種,一種是把顯示字庫同主函數、子函數一樣直接存在微處理器處的內部ROM或Flash中,缺陷是當需要更新LED屏的顯示字庫時,除了更新顯示字庫外,還需要連同主函數、子函數也要一起更新,而這些操作,需要操作人員具有專業的技能才能做到。另一種是把字庫放在處理器拓展的外部存儲器中,這種方法的缺陷是需要擴展外部存儲器,這樣不僅降低了數據的讀取速度,而且還增加了系統成本。為了解決上述問題,系統把顯示字庫放在LPC2103的內部Flash中,首次采用IAP(In-Application Programming)[3-6]技術只對存放顯示字庫的那部分Flash進行操作,較好的解決了上述問題。
從顯示字庫數據傳輸的角度出發,市場上現有的LED顯示屏當需要更新顯示字庫時一部分是通過有線與上位機連接的[7],有線連接受到距離、場地、布線復雜度高的限制;另一部分則是通過WiFi、藍牙等無線網絡與上位機連接的,WiFi在沒有Internet的場合則無法工作;藍牙則不能自組網,而系統采用ZigBee通信技術來無線傳輸數據,較好地解決了上述問題。
基于LPC2103的LED顯示字庫無線更新系統,主要由計算機、ZigBee通信模塊以及LED顯示屏3部分組成[1]。計算機的USB通過RS-232與協調器的串口相連,LPC2103與終端節點相連,由于一個協調器可以同時和多個終端節點通信,每個要更新顯示內容的LED顯示屏連接一個終端節點,然后把這些終端節點都加入同一個網絡,這樣即可一次更新多個LED顯示屏的顯示內容。系統主體結構如圖1所示。

圖1 系統主體結構
當需要更新LED顯示屏的內容時,首先組建以協調器為中心節點的星型網絡,網絡建立完成后,計算機通過上位機軟件將要更新的數據內容通過串口發送給協調器,協調器收到數據之后,將數據發送給各個終端節點,終端節點然后將數據通過串口傳給LED顯示屏的微處理器LPC2103,LPC2103收到數據之后通過IAP程序將數據寫到自身的Flash中,然后從Flash中讀出這部分數據,替換原有的LED顯示字庫,從而達到只更新LED顯示屏字庫的目的。
在ZigBee網絡中,數據包可以被單播、多播或廣播。一個多播數據包發送給一組設備,這就保證了一次可以更新多個LED顯示屏。由于LPC2103有32 kbyte的片內Flash,可以實現IAP編程,這樣就可以不用擴展外部存儲器,而直接把內部Flash當做EEPROM來時使用,這樣在更新顯示屏內容時不用重新對LPC2103進行程序燒寫,只需要通過串口就可以更新想要更新的內容。
2.1 IAP軟件設計
LPC2103是一個基于支持實時仿真的16/32位ARM7 TDMI-S CPU的微控制器,內部有8 kbyte的片內靜態RAM和32 kbyte的片內Flash程序存儲器;單個扇區或整片扇區擦出時間為100 ms,256 byte編程時間為1 ms;有多個串口,包括2個UART(16C550協議)。
對Flash的編程操作分為兩種,一種是在系統編程(ISP),另一種是在應用編程(IAP)。所謂在系統編程(ISP)是通過 Boot 裝載程序和UART0 對片內 Flash 存儲器進行擦除/編程的方法[9],如圖2所示。

圖2 ISP 編程示意圖
所謂在應用編程(IAP)是用戶的應用代碼對片內 Flash 存儲器進行擦除/編程的方法,如圖3 所示。

圖3 IAP 編程示意圖
基于LPC2103的LED顯示字庫無線更新系統中,為了對LED屏顯示字庫進行更新,需要一塊單獨存儲字庫數據的存儲區域。LPC2103具有32 kbyte的Flash,存儲在LPC2103 Flash中的正常顯示程序只有十幾kbyte,如果LPC2103擴展外部存儲器(如EEPROM)專門用來存儲LED屏字庫數據,不僅提高了成本,對LPC2103的資源造成浪費,而且降低了數據的讀取速度,因此系統采用IAP技術對LPC2103的Flash進行編程操作,來存儲LED屏字庫數據。LPC2103的Flash分為8個扇區,每個扇區4 kbyte,如表1所示。

表1 LPC2103的Flash扇區
要對內部Flash進行寫操作,首先要知道對哪個扇區的Flash進行操作,可以用LPC2000 Buffer Utility查看hex文件在LPC2103 Flash中的存儲詳情,此外點擊LPC2000 Buffer Utility中的Download Flash按鈕可以讀出處理器中當前的hex文件,用這種方法可以查看IAP對Flash的寫操作是否成功。要用IAP對Flash進行操作,需要按步驟進行操作,如圖4所示。

圖4 片內Flash編程步驟
IAP對Flash進行編程操作時一次至少對一個扇區進行操作[8],所以一次寫入的字節數固定為256、512、1 024 或者 4 096。 IAP程序運行時要關閉所有的中斷,特別注意的是要在啟動代碼Startup.s文件中的InitStack函數內設置系統堆棧模式,程序如下:
MSR CPSR_c, #0xdf
LDR SP,=StackUsr-32
MOV PC, R0
為了提高LPC2103的掃描速度,當LED顯示屏不需要更新顯示內容時,LPC2103只執行當前的顯示程序,而不執行IAP程序,所以在LED顯示屏的控制模塊中增加一個按鍵,當需要無線更新LED顯示屏的顯示內容時,上位機要先發送一個低電平給LPC2103,按下按鍵,當檢測到按鍵按下后LED顯示屏微處理器(LPC2103)的串口開始接收數據,接收完以后,把該數據寫到Flash相關的扇區中,然后從該扇區讀出該數據,相關代碼如下:
if((IOPIN&KEY)==0) //檢測按鍵是否按下
{
DelayNS(3);//延時一會
if((IOPIN&KEY)==0)//按鍵確實按下
{
for(i=0;i<512;i++)
{
uiBuf[i]=jieshou();//從串口接收字符串
}
/*把從串口接收到的數據寫到Flash中*/
WriteFlash(DestAddr, (uint32)uiBuf, 512);
ReadFlash();//從Flash中讀出該數據
}
}
LED顯示屏的微處理器LPC2103從串口接收到的數據最開始存儲在RAM中,此時給LPC2103掉電或者復位以后該數據就會丟失。為了不讓該數據丟失,在沒有擴展外部存儲器(例如EEPROM)的條件下,只能將該數據從RAM寫到內部Flash中,相關代碼如下:
uint8 WriteFlash(uint32 dst, uint32 src, uint32 no)
{
SelSector((dst/0x1000),(dst+no)/0x1000); //選擇扇區
EraseSector((dst/0x1000),(dst+no)/0x1000); //擦除扇區
BlankCHK((dst/0x1000),(dst+no)/0x1000); //查空扇區
elSector((dst/0x1000),(dst+no)/0x1000); //選擇扇區
RamToFlash(dst,src,no); //寫數據到Flash
return(Compare(dst,src,no)); //比較數據
}
由于CPU從Flash(ROM)中讀取數據的速度較慢,為了提高速度,CPU開機以后,先將數據從Flash讀到RAM中,然后從RAM中取指令執行相關命令,LPC2013也是一樣,從串口接收到的數據寫到Flash中以后,為了更新RAM中的數據,還要把該數據從Flash中讀出來,相關代碼如下:
void ReadFlash()
{
uint32 i;
uint8 *p;
p=(uint8 *)DestAddr; //DestAddr為第五扇區的首地址
for(i=0;i<512;i++)
{
/*把讀取的數據從放在shanqu5[]這個數組中*/
shanqu5[i]=*p;
p++;
}
}
系統通過上述方法,利用IAP技術只對顯示字庫進行更新的程序流程圖如圖5所示。

圖5 字庫更新流程圖
2.2 ZigBee模塊的設計
系統將ZigBee中的協調器作為發送設備與上位機通過串口相連,把ZigBee中的終端節點作為接收設備與LPC2103相連。協調器和終端節點的微控制器芯片都采用TI公司的CC2430。CC2430具有2.4 GHz IEEE802.15.4兼容RF收發器,具有優良的接收靈敏度和抗干擾性,而且功耗很低,有多種工作模式[9]。
系統中ZigBee模塊的設計主要分為硬件部分和軟件部分。硬件部分主要由電源電路、復位電路、串口接收電路和無線收發電路組成[10]。由于ZigBee硬件電路相對成熟,這里把設計重點放在軟件部分。硬件選型上采用SIKAI ELECTRONICS公司的ARMSKY-CC2430EB開發板。對單個LED顯示屏操作時,使用2個ARMSKY-CC2430EB開發板,一個配置為協調器(CoodinatorEB)設備,另一個配置為終端設備(EndDeviceEB);對多個LED顯示屏操作時,可采用多塊開發板。
協調器與上位機相連,在系統中主要功能是接收上位機通過串口發來的LED屏字庫數據,然后將該數據通過RF發送給終端節點,協調器從串口讀數據的函數模型如下:
uint16 HalUARTRead(uint8 port, uint8 *buf, uint16 len );
該函數的功能是讀取UART緩沖區的數據。形參port用來指定數據將被讀取的串口、buff是數據緩沖區的指針、len是所請求的數據長度。
終端節點與LED顯示屏的微控制器LPC2103相連,在系統中的主要功能是接收協調器發過來的LED屏字庫數據,然后將該數據通過串口發送給LPC2103,終端節點部分串口發送函數模型如下:
uint16 HalUARTWrite( uint8 port, uint8 *buf, uint16 len );
該函數的功能是寫一個指定長度的緩沖區到一個指定串口。這3個形參和上述講的3個形參功能類似,這里就不再贅述。
基于LPC2103的LED顯示字庫無線更新系統硬件組成如圖6所示。

圖6 系統整體硬件(照片)
圖6右半部分與PC機相連的是ZigBee協調器模塊,左半部分有個小天線的是ZigBee終端節點,與終端節點相連的是微處理器模塊,芯片采用的是LPC2103,微處理器與LED顯示屏相連。利用ZigBee通信技術對LED顯示屏的顯示字庫進行IAP更新的具體操作是用上機軟件將LED顯示屏需要更新的顯示字庫通過串口發送給ZigBee協調器模塊,協調器將該數據發送ZigBee終端節點,終端節點通過串口將該數據發送給LED顯示屏的為控制器LPC2103,LPC2103通過查詢方式收到該數據后存儲在RAM中,如果此時給LPC2103掉電或者復位,該數據就會丟失,為了不讓該數據丟失,實驗將該數據寫到LPC2103的第五扇區。然后利用LPC200 Buffer Utility軟件的Download Flash把微處理器中的Flash數據讀回來,看是否把該數據寫到了第五扇區。LPC2103沒有通過IAP更新之前的Flash如圖7所示。

圖7 IAP更新之前的Flash(截圖)
LPC2103的第五扇區是從0x00005000開始的,IAP更新之前第五扇區里面默認數據是0xFF,為了便于觀察,實驗將 0~511 共512個數據寫到LPC2103的第五扇區,第五扇區經過IAP更新以后如圖8所示。

圖8 IAP更新之前的Flash(截圖)
由于LPC2103的Flash數據是以8位的十六進制文件存儲的,8位二進制數的范圍是0~255,所以從0x00005100開始寫入256個數,從0(0x00)開始,255(0xff)結束,而LED顯示屏的顯示數據是由8位的十六進制數構成的所以不會超出范圍。由于0~511可以通過上位機軟件,利用ZigBee技術無線對LPC2103 Flash的第五扇區數據進行IAP更新,同理LED顯示屏的顯示字庫也可以通過上位機軟件,利用ZigBee技術無線對LPC2103 Flash的其他扇區進行操作,然后讀出該數據對LED顯示屏的顯示內容進行更新,這里就不再贅述。
基于LPC2103的LED數據庫數據交互研究,采用了物聯網技術,與市場上常用的WiFi和其他無線或者有線技術相比,具有功耗低,成本低,系統工作頻段靈活等優勢,更重要的是ZigBee協議具有自組網功能,可以對多塊LED顯示屏進行同時更新字庫內容。除此以外,系統采用了IAP技術,每次只更新顯示字庫,大大降低了更新LED顯示字庫的操作難度。經實驗測試及實際應用,對LED顯示屏的操作具有簡單、方便、靈活等諸多優點,效果良好,該方法對操作多個LED顯示屏優勢更為顯著。
[1] 李超,柏連發. 基于ARM的LED顯示控制技術研究[D]. 南京理工大學,2009.
[2] 羅中華. LED信息顯示屏系統的設計[D]. 南昌:南昌大學,2008.
[3] 趙偉,殷廷. 基于ARM7的應用程序在線升級設計[J]. 電子科技,2011,24(1):16-21.
[4] 胡秀麗. 基于ARM7片內Flash的兩種軟件升級方案[J].電腦學習,2010,2(1):120-122.
[5] 梁偉. 基于IAP的ARM7程序在線更新設計[J]. 電子科技,2009,22(11):63-68.
[6] 張艷艷,王慧博.基于LPC2210微處理器的Boodoader的分析與設計[J].白城師范學院學報,2007,21(6):49-51.
[7] 肖晉為,陳希. 基于ZigBee模塊的無線通信技術的LED顯示屏的研究[D]. 天津科技大學, 2010.
[8] 劉憶輝,魏銀庫. 片外Flash存儲器IAP的一種方案[J]. 技術縱橫,2006(2):37-38.
[9] 閆沫. ZigBee協議棧的分析與設計[D].廈門:廈門大學,2007.
[10]呂鑫,王忠. ZigBee無線數據傳輸模塊的設計與實現[J]. 安徽師范大學學報:自然科學版,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顯示字庫無線通信系統設計[J].電視技術,2015,39(13).
陜西校地合作項目(2011K-29);陜西省西安未央科技區項目( 2012-03)
TN948
A
10.16280/j.videoe.2015.13.024
責任編輯:閆雯雯
2014-11-26
張開生(1963— ),博士,教授,主要從事嵌入式系統、物聯網技術的應用及開發研究。