kaiyun官方注册
您所在的位置: 首页> 可编程逻辑> 设计应用> 在PSoC上实现I2C Bootloader
在PSoC上实现I2C Bootloader
摘要:PSoC是赛普拉斯开云棋牌官网在线客服生产的一种基于MCU的可编程片上系统,它集成了大量的可重新配置的数字/模拟模块来完成用户订制的数字/模拟功能。
关键词: PSoC I2C Bootloader
Abstract:
Key words :

I2CISSP方式

PSoC是赛普拉斯开云棋牌官网在线客服生产的一种基于MCU的可编程片上系统,它集成了大量的可重新配置的数字/模拟模块来完成用户订制的数字/模拟功能。

图1ISSP编程流程图


  PSoC器件可以基于I2C协议实现在系统中串行编程(ISSP),Power-On模式下通过SDA/SCL和VDD/GND就能够编程整个代码空间,Reset模式下则是使用SDA/SCL和XRES/GND编程。在很多PSoC CapSense触摸按键应用中,如果改变了机械布局因而需要重新定义按键引脚,或者需要赋予新的按键触发行为,主机端通过集成ISSP协议,可以在需要的时候下载新的.hex代码到PSoC端,实现代码的现场快速升级。

图2<a class=Bootloader存储方式框图" border="0" height="552" hspace="0" src="//www.ninimall.com/files/images/20100816/5f4d30b1-283b-4cf3-95d1-6b91e47570aa.jpg" width="366" />


  图1是ISSP编程流程图,首先使PSoC进入编程模式,校验其内部的Solicon ID,保证是对正确的PSoC编程,对PSoC内部的Flash块(64字节)逐一擦除/编程,并读出Flash内容进行比较;ISSP随后编程用户自定义的Flash块保护模式,每个Flash块可以被指定为W - 写保护 / R - 读保护 / U - 不保护 / F - 工厂更新;最后,每个Flash块的校验和被读出并计算出全部Flash空间的总校验和,如果与.hex文件中的总校验和一致,代码已经被成功升级。

I2C Bootloader方式

  用户也可以使用标准的I2C系统接口,通过I2C Bootloader(I2C引导加载器)方式更新PSoC器件内的用户代码。从图2可以看出,整个Flash空间由红色的不可编程的Bootloader区(包括中断向量、重启动向量和Bootloader代码),灰色的可以现场编程的用户应用程序区(包括应用程序中断向量、Relocatable起始地址、用户代码和Bootloader API),以及黄色的Bootloader校验和区组成。PSoC复位时,Bootloader接管程序控制权,它会计算和校验用户代码的校验和,仅当匹配时才转到用户代码的首地址,开始运行用户代码。与ISSP方式不同,I2C Bootloader方式仅更新可以现场编程的用户代码区,Flash空间的其他区用于此方式的控制和校验。

图3I2C Bootloader方式头部下载数据


  I2C Bootloader方式在数据传输时分三种命令格式,FF38是进入Bootloader命令,FF39是写Flash块命令,FF3B是退出Bootloader命令。图3是I2C Bootloader方式传输的头部下载数据,图4则是成功下载的最后数据。

图4I2C Bootloader方式成功下载的最后数据


  Bootloader方式工作时,需要更新的PSoC器件做为一个I2C Slave。图3中,第一行数据传输将进入Bootloader方式,它由0x70 - Slave 7bit地址0x38的写地址,需要忽略的两个前缀字节380a (Slave 7bit地址和后续字节长度),FF38命令和8个字节的Bootloader key组成。所有的Bootloader命令都必须包含正确的Bootloader key,否则将被Slave器件忽略。第二行由71 - Slave 7bit地址0x38的读地址和状态响应字节0x20组成,状态响应字节的其他值标识各种出错状态 - 02/Image verify error, 04/Flash checksum error, 08/Flash protection error, 10/Comm checksum error, 40/Invalid bootloader key, 80/Invalid command error.

图5BootLdrI2C用户模块参数设置


  写Flash块命令传输了绝大部分数据量,除了最后一个块以外,其他都有相同的格式。图3中,写Flash块命令包含0x70, 需要忽略的两个前缀字节3810 (Slave 7bit地址和后续字节长度),FF39命令, Bootloader key,Flash块的块号,64字节数据,0x18 - 64字节数据的校验和,0x86 - 此传输78字节的校验和(包括FF, 39, Bootloader key, 块号, 64字节数据, 0x18)。仅在以上数据传输完后需要传输读地址0x71,并读出正确的状态响应字节0x20.

图6BootLdrI2C用户模块提供的BootLoaderTools


  写Flash最后块命令包含了一些特殊信息,参见图4,(0d, d4) 是随后直到(85, f4)的字节校验和,(08,80)是图2灰色用户代码区中可重定位中断矢量表的地址,(12,00)是图2灰色用户代码区中用户代码空间的开始地址,(3f,80)则是用户代码结束块的地址,(00,b7)是用户代码占用的块数量,(85,f4)是Bootloader计算的用户代码检验和,0xb5是以上64字节数据的检验和,0xbd是此传输78字节的校验和。

通过PSoC Designer的用户模块实现I2C Bootloader方式

PSoC Designer是功能全面的基于图形用户接口(GUI)的PSoC软件开发环境,它的用户模块可通过配置PSoC器件内部资源创建Timer、PWM、ADC/DAC,I2C等多种有用功能。一个用户模块包括硬件配置数据、启动代码、中断服务例程(可选)以及应用编程接口(API),这些API可对用户模块的各个方面进行即时控制。用户使用PSoC Designer中的BootLdrI2C用户模块可以很方便的实现启动时的引导载入(Bootloader)。

  用户先在项目中添加BootLdrI2C用户模块,然后选择“I2C for Bootloader Only”或“Full I2C API Support with Bootloader”;之后设置图五中的用户模块参数,这些参数定义了I2C的引脚和通信速率,Bootloader的I2C地址,用于其他I2C操作的地址,以及图2中各个存储区的参数。用户随后可以通过图6提供的“Boot Loader Tools”设置中断向量和重启动向量,编译项目后生成应用程序校验和,以及从hex 项目输出文件中生成一个可以升级PSoC器件的dld 下载文件。

  其它需要设置的包括在菜单Project -> Settings -> Linker中,设置Relocatable起始地址,在flashsecurity.txt中指定Flash块的访问属性——可以现场编程的区域需要设置为可写操作。

  在PSoC器件上加入I2C Bootloader功能后,我们还可以通过Cypress提供的I2C-USB Bridge工具通过PC下载更新代码到PSoC器件来验证以上设计。

此内容为AET网站原创,未经授权禁止转载。
Baidu
map