便攜式電視機軟件的升級系統
引言
隨著電視機數字化程度的提高和功能的增強,電視機軟件升級越來越重要,各種各樣的電視機故障需要軟件升級來解決。而目前電視機軟件升級的方法主要通過專門的軟件燒錄儀將軟件燒錄入存儲器,然后將存儲器焊接到電視機主板上;或者將電腦與電視機相連,通過電腦將升級程序寫入電視機存儲器。這兩種電視機軟件升級的方法存在操作復雜、時間長、成本高,且需要專業性知識等缺陷。
系統原理
便攜式電視機軟件升級系統原理如圖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接口將存儲的升級程序數據傳送給電視機,實現電視機的軟件升級。
評論
查看更多