新闻  |   论坛  |   博客  |   在线研讨会
基于μPSD32xx系列单片机无线远程IAP的实现
yanqin | 2009-04-17 15:46:51    阅读:1022   发布文章

  传统的MCU控制系统在下载程序时一般都是通过取下芯片用编程器烧写,或者采用ISP方式进行在线编程。

  引言

  随着用户需求和使用环境的不断变化,就会要求系统程序被升级,而采用上述两种方式进行程序升级时都必须要有开发人员进行现场操作。这种升级方式对于终端分散的控制系统来说无疑极大地增加了开发成本,也延缓了程序的更新时间。因此,本文结合无线基站动态环境监控系统,给出了基于μPSD32xx系列单片机无线远程IAP(应用内编程)的具体实现方法,解决了上述问题。

  系统架构

  无线基站电源、空调、基站的室内环境等条件对整个系统能否正常运行是至关重要的,为了让无线基站有一个稳定、可靠的运行环境,因而设计了此采集系统。

  针对以上环境,本采集系统下位机将基站电源、空调、基站内温度、湿度、烟雾、门控等集于一体,实时采集该系统所需要的各种数据,同时提供自动告警功能;上位机采用C/S模式设置不同级别的权限提供给各个监控中心。系统的数据传输采用GPRS/GSM无线通信网络接入Internet进行远程传输:下位机通过GPRS/GSM把告警信息自动上传到监控中心或手机等;同时,监控中心或手机可以通过GPRS/GSM网络对采集器进行查询、配置等操作,以满足不同的实际需要。在整个系统的设计过程中,为了对多任务进行高效的调度,选用了源码开放的μCOSII嵌入式实时操作系统。

  硬件设计原理

  μPSD32xx芯片简介

  UPSD32xx包含一个标准的8032微控制器模块和一个PSD模块。采用模块化设计技术,不仪将构成一个单片机应用系统所需的多个功能块(如8032核、两个Flash、SRAM、I/O、PLD、USB接口、I2C接口、双UART口、用于液晶显示的DDC通道、PWM控制器、4路ADC等)集成在单一硅片上,同时还可以通过JTAGISP方式进行在系统编程,可简化嵌入式应用系统的设计、缩短产品的开发周期、提高系统的可靠性、降低成本并缩小产品尺寸。

  由于μPSD32xx系列产品有主Flash和第二Flash两块存储器,使得设计人员可以在无需外加存储器的情况下对Flash进行远程更新的同时对其执行应用内编程。

  硬件接口设计

  图1是系统的IAP功能实现原理图。串口中的电平转换选用Maxim公司的MAX202CPE芯片。由于在μPSD3234A的串口0中同时连接了GPRS模块和门控系统模块,所以在其串口0接收中采用74LS11与门芯片。

  硬件配置

  主Flash存储器由8个扇区组成,第二Flash存储器由4个扇区组成。对Flash的配置可以通过软件PSDEXPRESS来实现,配置结果如下:

  第一Flash仅作为数据空间:FS0:0~0x1FFF&0x8000~0xFFFF(页码序号为0)FS1~FS7:0x8000~0xFFFF(页码序号为1-7)

  第二Flash仅作为程序空间:CSBOOT0:0~0x1FFF&0x8000~0x9FF

  CSBOOT1:0xA000~0xBFFF

  CSBOOT2:0xC000~0xDFFF

  CSBOOT3:0xE000~0xFFFF

  RS0:0x2000~0x3FFF

  CSIOP:0x200~0x2FF

  下载程序时将启动程序分别下载到FS0、0~0x1FFF和CSBOOT0、0~0x1FFF部分。用户程序下载到FS0~FS7、0x8000~0xFFFF部分。

  软件设计与实现

  GPRS及模块

  本设计选用的GPRS模块是WAVECOM公司的Q2406B,它是双频GPRS/GSM模块(EGSM900/1800MHz或EGSM900/1900MHz),内嵌完整的TCP/IP协议栈,直接通过AT指令就可以接入Internet,并且其设计开发符合ETSIGSMPhase2标准。单片机完全按照标准AT指令使用9.6kbps波特率通过串口与此模块进行通信。

  模块的初始化程序如下:
 

  其中,μPSD_UART_Putchar("ABCD",0)函数功能是:μPSD3234A通过串口0向GPRS模块发送字符串"ABCD"。

  IAP简介

  IAP是应用在Flash程序存储器的一种编程模式。可以在应用程序控制下,对程序存储空间进行读取、擦除、写入操作。与ISP操作非常相似,不需要从电路板上取下芯片用编程器烧写,都具有在线编程功能。两者之间的不同点是:ISP通常是整片擦除、编程,在手工操作下通过PC串口下载程序到Flash,而IAP却是在某段程序的控制下对另外一段程序Flash进行读写操作。

  IAP的实现

  IAP就是肩动程序把新的用户程序编程到指定的Flash中。对Flash程序存储器的读/写操作是实现IAP的关键,下面给予详细介绍。

  MCU可以像读ROM器件那样读Flash存储器,但只能使用特殊的擦除和编程指令对Flash存储器进行编程。

  Flash存储器在被编程之前必须先被擦除。Flash存储器的一个字节被擦除为全1(FFh),通过设置选择位为0来编程。MCU可一次擦除所有Flash存储器或一个扇区,不能按字节擦除,而MCU可以按字节编程。一旦MCU发出Flash存储器编程/擦除指令,可以通过几种方法判断是否编程/擦除完毕,程序中用到了下面两种判断方法来对Flash进行编程。

  数据轮询法

  数据轮询法的编程由函数unsignedcharflash_boot_write_with_poll(volatileucharxdata*addr,uchardat)完成。当从监控中心接收的命令是要求用数据轮询法对旧用户程序更新时,主程序中就会调用此函数,MCU发出一个编程指令,内置的算法就开始运行。出错标志(DQ5)位为1标志编程周期超时,为0标志没有出错。MCU可以读取被编程扇区任意位置的数据轮询(DQ7)位和出错标志位。

  数据跳转法

  数据跳转法的编程由函数unsignedcharflash_write_with_toggle(volatileucharxdata*addr,uchardat)完成。编程周期与数据轮询法大致相同,区别在于MCU读的不是DQ7,而是数据跳转标志(DQ6)位。在编程期间,DQ6位一直跳转,直到编程周期完成。DQ5位为1标志编程周期超时,为0标志没有出错。MCU可以读取被编程扇区任意位置的DQ6位和DQ5位。

  另外,此芯片还有Flash存储器扇区保护功能:主Flash和第二Flash存储器的每个扇区都可以被单独地保护,防止被编程和擦除。该功能为所有的编程或擦除失效提供了额外的数据安全保障。

  在本设计中,第二Flash的CSBOOT1扇区保存了门控的一些固定卡号,此扇区应被保护。第二Flash的其余几个扇区都作为备用,保存一些电源或空调参数以及需要添加的门控卡号,这些数据都是可变的,所以不被保护。可以通过JTAG口或器件编程器设置使Flash存储扇区被保护或解除保护。MCU可以通过读扇区保护寄存器(CSIOP块里)来读取扇区保护状态,但不能改变它。

  IAP功能的主程序设计

  系统上电后,程序首先在启动扇区内运行,等待上位机发来的命令,根据命令执行相应操作(见图2)。超时或没有命令发来就自动切换到用户程序。需要更新用户程序时,切换回启动程序。


   异常处理

  系统工作中主要有掉电、通信中断、误码这三种情况会导致程序升级失败。以下简单介绍本设计所采取的一些保护措施。

  第一种情况,考虑到环境导致的电源稳定性差和雷电、继电器等高压信号的干扰。系统采用了高隔离度DC/DC电源模块把外界地和系统地隔离开,并且在容易受干扰的串口部分加入了高速光耦进行隔离;第二种情况,系统用到了串口、GPRS/GSM、TCP/IP组合成的复杂通信网络。

  由于只要有一个通信故障就会造成上、下位机之间的通信失败,所以,为了防止因通信失败而造成系统瘫痪,程序中用Eeprom_Init函数在通信失败或掉电情况下对数据进行恢复和修理;第三种情况,在上、下位机通信过程中,尽管通信正常,但由于数据量大,有产生误码的可能性。因此,程序中对接收到的每一帧数据都先检验帧类型,然后对其作4字节的校验和判断。如果校验有误,将错误信息类型回传给上位机重发,直到数据完全正确,才将这一帧数据保存到Flash相应地址里。

  结语

  本文所介绍的无线远程IAP的实现是基于μPSD32xx系列单片机,且已在无线基站动态环境监控系统项目中使用,极大地方便了系统程序的及时更新,可靠性也得到了验证。可以直接应用到各种电力、水资源和其它无线监控系统中。


 


 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客