引言
随着电视机数字化程度的提高和功能的增强,电视机软件升级越来越重要,各种各样的电视机故障需要软件升级来解决。而目前电视机软件升级的方法主要通过专门的软件烧录仪将软件烧录入存储器,然后将存储器焊接到电视机主板上;或者将电脑与电视机相连,通过电脑将升级程序写入电视机存储器。这两种电视机软件升级的方法存在操作复杂、时间长、成本高,且需要专业性知识等缺陷。
系统原理
便携式电视机软件升级系统原理如图1。电视机软件升级系统是以单片机W79E632为基础的可以独立运行的系统。首先升级系统作为从机接收电脑系统发送过来的升级程序数据并进行存储,然后升级系统作为主机将存储的升级程序数据发送给电视机系统,电视机系统将升级程序数据存储、运行,从而实现软件升级。
目前电视机的升级接口一般是UART串行接口和I2C接口,该软件升级系统可以选用两种接口来升级。电脑系统若没有这两个接口,需要通过接口转换装置来与升级系统相连。
系统硬件实现
便携式电视机软件升级系统硬件框图如图2所示。系统主要包括单片机W79E632、FLASH存储器、UART串口接口电路、I2C接口电路、中断电路以及状态指示灯等。
WINBOND公司单片机W79E632具有128k ISP(In-System Program)FLASH ROM、4k的LD(Loader program)FLASH ROM、软件指令完全与51单片机兼容、执行效率高和速度快等优点。
W79E632有UART串行接口,没有I2C接口及SPI接口,采用I/O口P8、P9模拟I2C接口,I/O口P4~P7模拟SPI接口。FLASH存储采用NOR FLASH,3.3V供电。由于FLASH是3.3V供电,W79E632 I/O口电平为5V,为保证数据的可靠性,系统有一个5V/3.3V SPI总线转换电路。
系统自身的引导程序、初始化程序以及UART接口数据读写程序、I2C接口数据读写程序、SPI接口数据读写程序等都放在内部ROM中,FLASH存储器专门存储电视机升级程序数据。开关SW2、SW3产生低脉冲来触发外部中断INT0、INT1,以控制I2C接口数据的接收和发送;串行接口中断控制UART接口数据的接收,而SW1产生低脉冲通过I/O口P3控制UART接口数据的发送。升级系统通过W79E632内部定时器以及I/O口P2、P1控制红/绿指示灯来表达当前状态,例如红绿灯都亮,升级系统运行正常,准备读写;红灯亮,绿灯闪动,升级系统正在写或读FLASH存储器。
系统软件实现
升级系统的软件实现包括两部分:作为从机接收并存储电脑系统发送的电视机升级程序数据和作为主机向电视机系统发送存储的电视机升级程序数据。
系统主频设计为22.1184MHz,UART接口采用8位移位寄存器模式,波特率是系统主频率的1/12,每接收完或发送完一个数据字节将产生中断;I2C接口最高传输速率为100kb/s,SPI接口最高传输速率为2.2Mb/s。
系统自检、初始化等程序以1000H为起始地址。上电后直接跳到1000H处,进行初始化设置,建立好堆栈,设置好UART接口、I2C接口以及SPI接口相关参数;红绿指示灯都亮,允许中断。此后系统正常运行,等待中断并监视I/O口P3的状态,以决定系统是作为主机还是从机进行下一步运作。
作为从机接收并存储升级程序数据
升级系统作为从机接收并存储电脑系统发送的电视机升级程序数据,流程如图3所示。
1.系统正常运行,开串口中断、外部中断及定时器中断,等待中断。
2.从I2C接口接收升级程序数据时,按一下开关SW2,产生外部中断INT0。屏蔽除定时器中断外所有的中断,将与当前状态相关的寄存器及程序指针数据暂时存入堆栈。同时设置定时器相关参数,使W79E632能够向I/O口P1发送周期为500ms的脉冲信号以控制绿灯闪动,表示正在接收数据。串口中断由W79E632自动产生。如果产生串口中断,则屏蔽除串口中断、定时器中断外所有的中断,其它设置与INT0中断相同。
3.产生INT0中断时,则启动I2C接口读程序I2C_Read将I/O口缓冲寄存器中的数据写入W79E632内部RAM;如果产生串行中断,则启动串行接口读程序UART_Read,将串行接口寄存器中的数据写入W79E632内部RAM内,并清除串口接收中断标志RI,以使下一个数据能准确接收。
4.电脑系统以256字节作为一个数据块进行发送,每发送完256字节后发送一个累加校验和进行校验。W79E632校验数据有效后,启动FLASH写程序SPI_Write,将RAM中的256字节数据写入FLASH;写完后向电脑系统发送响应信号“RIGHT”,电脑系统继续发送数据。W79E632判断下一个字符是否是“结束”字符(即每一个数据块的第一个字符),不是“结束”字符则继续接收数据;如果是“结束”字符则启动SPI_Write程序将“结束”字符直接写入FLASH,然后结束。W79E632校验后数据无效,则立即向电脑系统发送响应信号“ERROR”,然后结束。
5.结束时,W79E632清除内部RAM、I/O口缓冲寄存器和串行接口寄存器中的数据,将定时器、UART接口或I2C接口恢复为初始状态,读出堆栈中保存的数据并写入相应的寄存器以恢复中断前状态;绿灯继续闪动2s后开中断,系统恢复正常运行状态。
作为主机发送升级程序数据
升级系统作为主机的流程如图4所示。
1.系统正常运行,开串口中断、外部中断及定时器中断,
查询I/O口P3的状态,等待中断。
2.从I2C接口发送存储的升级程序数据时,按一下开关SW3产生外部中断INT1。此时设置与产生INT0时相同。如果查询到P3口有脉冲则屏蔽除串口中断、定时器中断外的所有中断,其他设置与产生INT1中断相同。
3.W79E632启动FLASH读程序SPI_Read,读取FLASH中存储的升级程序数据,每次连续读完256字节存入W79E632的RAM中。W79E632每次存储数据块的第一个字符存储前,判断是否是“结束”字符。
4.W79E632读到“结束”字符,表示数据发送完毕,进入结束处理,反之则将通过串口或I2C接口发送数据。如果通过串口发送数据,则启动UART_Write将RAM中的数据写入串行接口寄存器进行发送;如果是I2C接口发送数据,则启动I2C_Write将RAM中的数据写入I/O口缓冲器寄存器进行发送。每发送完256字节的数据,W79E632继续发送一个累加校验和并等待电视机的响应信号。收到电视机返回的“RIGHT”信号则继续发送数据,如果收到返回的“ERROR”信号则结束。
5.结束时,W79E632清除内部RAM、I/O缓冲寄存器和串行接口寄存器中的数据,将定时器、UART或I2C接口恢复为初始状态,读出堆栈中保存的数据并写入相应的寄存器以恢复中断前状态;绿灯继续闪动2s后开中断,系统恢复正常运行状态。
结语
本文提出以单片机W79E632为基础平台的一种便携式电视机软件升级系统的设计,系统能够用UART接口或I2C接口接收并存储电视机升级程序数据,同时能够通过UART接口或I2C接口将存储的升级程序数据传送给电视机,实现电视机的软件升级。