张开生,彭 朋
(陕西科技大学 电气与信息工程学院,陕西 西安 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— ),博士,教授,主要从事嵌入式系统、物联网技术的应用及开发研究。