打印

基于PSoC Creator Bootloader更新PSoC®3固件程序

[复制链接]
2427|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
G21372|  楼主 | 2011-12-5 22:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 引言  许多电子产品允许出厂后更新固件程序,从而制造商可以发布新的固件版本增加功能或是修正错误。该功能一般有两种实现方式:在系统程序烧录和驻留更新程序。若将待更新的芯片看做从机,将执行更新操作的PC或是MCU看做主机,第一种方法通过芯片的烧录接口,由主机模拟生产时烧录器的时序,将固件数据烧录至Flash中;第二种方法在从机的运行代码中实现一段驻留程序,主机通过某种通讯接口与驻留程序通信,将固件数据先发送给驻留程序,然后由该程序更新至Flash。驻留程序在生产时被烧录,一般只能通过硬件烧录的方式更新。  这种驻留程序有很多种称呼,一个常见的名字是Bootloader,或者称为引导程序。不过,由于驻留程序涉及内容较广,实现稳定的更新功能需要较多的开发投入。Cypress PSoC3">PSoC3芯片族和PSoC Creator 1.0开发环境提供了一套完整的Bootloader开发框架,开发者无需编写代码,即可获得基于I2C和USB接口的Bootloader功能;或者仅做简单的二次开发,实现基于其他通讯接口或更新协议的Bootloader功能,从而缩短产品的研发周期。
沙发
G21372|  楼主 | 2011-12-5 22:21 | 只看该作者
2. 理解PSoC3">PSoC3 Bootloader  PSoC3">PSoC3芯片族是Cypress推出的基于8051核心的可配置片上系统(SoC),其主要特性包括  · 片内包含多达64K Flash和8K SRAM;  · 16~24个数字可编程逻辑器件(PLD),可以实现状态机等需求定制数字逻辑;  · 丰富的固定功能模块,包括1个使用内部晶振的Full-Speed USB2.0模块,多达4个16位可配置的Timer/PWM/Counter模块等  · 高性能模拟模块,如75ns响应时间的比较器,最高采样率192 ksps的12位 Delta-Sigma ADC等。  Cypress提供了与PSoC3">PSoC3配套的开发环境PSoC Creator 1.0,将其丰富的片内资源抽象成众多的可配置功能模块,开发者可以像设计电路板原理图一样,将所需模块拖放在设计图纸上,连接模块之间的输入输出,然后使用C语言实现产品需求即可。  PSoC3">PSoC3将所有代码存放在片内Flash中,程序执行也是基于Flash,因此,Bootloader与应用程序分别位于Flash空间的不同位置。图 1给出了PSoC3">PSoC3 Bootloader的Flash布局。在64K Flash空间中,低地址处存放的是Bootloader,较高地址处存放的是应用程序,二者中间有一个填充为零的隔离区,此外,在最高地址还存放着一些公共数据,包括应用程序的起始地址,Bootloader使用的Flash大小,应用程序校验和等。在产品的生命周期里,Bootloader只能在生产时通过硬件烧录的方式写入Flash,一旦产品出厂,除非意外情况,Bootloader不会被更新;应用程序也在生产时被写入,但是产品出厂后仍然可以通过Bootloader更新。
  图 1 Bootloader与应用程序在PSoC3">PSoC3 Flash空间的布局

使用特权

评论回复
板凳
G21372|  楼主 | 2011-12-5 22:21 | 只看该作者
为了实现上述的Flash布局,开发者通常需要设置众多的编译、链接参数,这些参数控制编译工具链生成所需固件映像(Image),但其复杂性常常令许多开发者望而却步。PSoC Creator 1.0提供了一种简单的方法实现上述操作,将Bootloader与应用程序分成两种工程(Project):bootloader工程和bootoadable工程。前者维护Bootloader的实现,后者维护应用程序的实现,后者将前者作为编译依赖,即bootoadable工程需要bootloader工程的编译结果来完成自身的编译链接。此划分具有两个优点,一方面将所有编译工具链相关的参数设置与产品开发分离,完全由PSoC Creator自动处理,减少开发难度;另一方面易于Bootloader和应用程序的维护,如需添加新功能至应用程序,仅需改动bootloadable工程即可,避免错误修改Bootloader中内容。  在技术实现上,PSoC3">PSoC3 Bootloader可分为三个功能层次,如图 2所示。基本通讯层关注通讯接口原子级的数据收发,不同的通讯接口具有不同的原子级数据收发,如SPI和UART一次数据收发都是基于单个字节,而I2C的一次完整数据收发由多个字节组成的I2C协议数据包。在基本通讯之上,PSoC3">PSoC3 Bootloader已定义了一套与主机通讯的更新协议,以便接收主机发送的命令帧,并将处理结果以状态帧通知主机,此部分功能由协议处理层完成。核心功能层与具体的数据收发无关,此部分仅关注数据帧的解析,处理,Flash的读写等核心功能操作。
  图 2 Bootloader功能层次图
  通过此功能层划分,核心功能层作为公共代码模块,所有的Bootloader工程创建时都将其包含在内,基本通讯层与通讯协议处理层由实际使用的通讯接口独立维护。此设计可以在考虑不同通讯接口差异化的同时,尽量复用代码,减少开发时间与难度。

使用特权

评论回复
地板
G21372|  楼主 | 2011-12-5 22:21 | 只看该作者
3. 使用基于I2C的PSoC3">PSoC3 Bootloader  PSoC Creator 1.0内嵌了一套基于I2C通信的Bootloader,开发者可以直接使应用于项目开发,图 3是PSoC3">PSoC3 I2C Bootloader的工作流程图。
  图 3 PSoC3">PSoC3 I2C Bootloader 工作流程图

使用特权

评论回复
5
G21372|  楼主 | 2011-12-5 22:21 | 只看该作者
PSoC3">PSoC3内部有一个8位寄存器,其最高2位只能通过上电复位清除,软件复位不影响其数值,因此可以用作运行类型标志位,每次系统上电或软件复位后都会检查此标志位,以决定是直接运行应用程序还是进入Bootloader更新固件。PSoC3">PSoC3 Bootloader已经定义一组用于更新固件的通讯协议,其中PSoC3">PSoC3作为从设备,接收主设备发送的命令数据包,处理后回复主设备状态数据包,表 1是两种数据包的格式定义。
  表 1PSoC3">PSoC3 I2C Bootloader通信数据包格式
  表 2列出了PSoC Creator 1.0 Bootloader通讯协议支持的命令,开发者如果直接使用该协议更新固件,在设计主机更新程序时需参考此表中内容,更详细的命令定义可以参考PSoC Creator 1.0帮助文档中的系统参考指南(System Reference Guide)。
  表 2 PSoC Creator 1.0 Bootloader内嵌通讯协议命令列表

使用特权

评论回复
6
G21372|  楼主 | 2011-12-5 22:22 | 只看该作者
4. PSoC3">PSoC3 Bootloader二次开发

  PSoC Creator 1.0现提供基于I2C或USB的Bootloader实现,开发者若想使用其他的通讯接口,或者修改通讯协议和更新流程,可以在Bootloader框架基础上进行快速二次开发。cybtldr.c 是Bootloader核心功能层的实现代码,其中两个关键函数覆盖了Bootloader主要功能:

  · CyBtldr_Start函数  该函数实现了执行Bootloader更新前的所有检查流程,如果需要修改图 3中的工作流程,可以修改此函数中代码。

  · CyBtldr_HostLink函数
  该函数是Bootloader的核心功能函数,实现了数据包的解析,命令的处理,更新Flash,以及发送状态数据包的功能。修改此函数,可以添加新命令数据包,修改数据包结构等。
  CyBtldr_HostLink通过调用CyBtldrCommRead函数接收数据,调用CyBtldrCommWrite函数发送数据,这两个函数都属于通讯协议处理层,由Bootloader使用的通讯接口模块独立维护,不同的通讯接口模块具有不同实现。若使用专有通讯接口时,还需实现上述两函数以便CyBtldr_HostLink能够收发数据。

  5. 总结

  使用PSoC Creator 1.0的Bootloader开发框架,开发者可以通过I2C或USB轻松更新基于PSoC3">PSoC3的应用产品固件程序,即使针对不同的应用需求,开发者只需较少的开发投入,就可以在Bootloader框架基础上进行二次开发,实现多样的产品特性。

使用特权

评论回复
7
japrincess| | 2011-12-5 23:16 | 只看该作者
赞一个!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

197

主题

1658

帖子

5

粉丝