基于PSoC的I2C Bootloader
出处:ryyhf 发布于:2011-08-26 18:01:11
PSoC介绍
PSOC的重点都是在工业控制领域,把 数字模拟模块集合到一个片子上倒是个不错的想法,但是主要是应用到逻辑,算法等较为简单的领域。对通信,无线,网络,数据处理等这些技术涉及的不多。我认为现在这一行业的竞争力在技术上。
PSoC是一个8位的核,包括SRAM、SROM和Flash等模块,重要的是PSoC集成了可供设计者随意配置的数字模块和模拟模块。
psoc的特点就是集成度高,设计灵活。可以看成是MCU,FPGA/CPLD,ispPAC集合。
1.它里面包含MCU(psoc1为m8c,psoc3为51,psoc5为arm9),这是和你讲的那几种是有区别的。它可以很方便的实现系统设计,虽然fpga可以通过设计实现软核,但增加了设计难度,性能也达不到硬核的程度。
2.PSoC还包含可编程数字模块(类似FPGA/CPLD),以及可编程模拟模块(类似ispPAC),即具有处处理数字和模拟两种信号的能力,此外,psoc具有的a/d,d/a模块解决了两种信号的接口问题。
3.PSoC设计很简单,并且可以实现重构。
4.psoc除了具备一般单片剂的资源外,还有可编程时钟,低电压检测,升压泵,内部精密参考电压等等资源。
基于PSoC的I2C ISSP方式
PSoC器件可以基于I2C协议实现在系统中串行编程(ISSP),Power-On模式下通过SDA/SCL和VDD/GND就能够编程整个代码空间,Reset模式下则是使用SDA/SCL和XRES/GND编程。在很多PSoC CapSense触摸按键应用中,如果改变了机械布局因而需要重新定义按键引脚,或者需要赋予新的按键触发行为,主机端通过集成ISSP协议,可以在需要的时候新的。hex代码到PSoC端,实现代码的现场快速升级。
图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方式更新PSoC器件内的用户代码。从图2可以看出,整个Flash空间由红色的不可编程的Bootloader区,灰色的可以现场编程的用户应用程序区,以及黄色的Bootloader校验和区组成。PSoC复位时,Bootloader接管程序控制权,它会计算和校验用户代码的校验和,仅当匹配时才转到用户代码的首地址,开始运行用户代码。与ISSP方式不同,I2C Bootloader方式仅更新可以现场编程的用户代码区,Flash空间的其他区用于此方式的控制和校验。
I2C Bootloader方式在数据传输时分三种命令格式,FF38是进入Bootloader命令,FF39是写Flash块命令,FF3B是退出Bootloader命令。图3是I2C Bootloader方式传输的头部数据,图4则是成功的数据。
Bootloader方式工作时,需要更新的PSoC器件做为一个I2C Slave。图3中,行数据传输将进入Bootloader方式,它由0x70 - Slave 7bit地址0x38的写地址,需要忽略的两个前缀字节380a ,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.
写Flash块命令传输了绝大部分数据量,除了一个块以外,其他都有相同的格式。图3中,写Flash块命令包含0x70, 需要忽略的两个前缀字节3810 (Slave 7bit地址和后续字节长度),FF39命令, Bootloader key,Flash块的块号,64字节数据,0x18 - 64字节数据的校验和,0x86 - 此传输78字节的校验和(包括FF, 39, Bootloader key, 块号, 64字节数据, 0x18)。仅在以上数据传输完后需要传输读地址0x71,并读出正确的状态响应字节0x20.
写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是功能全面的基于图形用户接口的PSoC软件开发环境,它的用户模块可通过配置PSoC器件内部资源创建Timer、PWM、ADC/DAC,I2C等多种有用功能。一个用户模块包括硬件配置数据、启动代码、中断服务例程以及应用编程接口,这些API可对用户模块的各个方面进行即时控制。用户使用PSoC Designer中的BootLdrI2C用户模块可以很方便的实现启动时的引导载入。
用户先在项目中添加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器件来验证以上设计。
参考文献:
[1]. PSoC datasheet https://www.dzsc.com/datasheet/PSoC_555958.html.
[2]. SROM datasheet https://www.dzsc.com/datasheet/SROM_622730.html.
[3]. dld datasheet https://www.dzsc.com/datasheet/dld+_1881046.html.
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- 分布式光伏发电有什么优劣势2024/4/29 17:17:39
- 如何更好的理解lwip协议?2024/4/28 17:20:13
- 802.11ac连接的推荐设置_802.11AC无线网桥的配置和注意事项2024/4/28 17:10:43
- matlab是什么编程语言?2024/4/28 17:04:06
- VCC,VDD,VEE,VSS在电源原理图中有什么区别?2024/4/26 17:36:58