赛普拉斯的PSoC微控制器易于使用、灵活并具有一系列经济高效的可重新编程的模拟和数字资源。通过这些特性可以实现各种创意设计,例如使用板上主机处理器对PSoC进行串行编程。此方法用于现场安装或更新固件,甚至对PSoC完全重新编程,以实现其他功能。
HSSP代码示例由赛普拉斯创建,旨在帮助系统设计人员开始创建自己的串行编程软件。设计人员必须最大限度地减少对该代码的修改,以保证其与特定的主机编程器兼容。该代码示例仅涵盖CY8C20xx6A系列的PSoC器件,具有高度抽象性。有关串行编程的更多信息,请参阅ISSP编程规范。本文概括介绍了实现方法。协议详细信息和各个矢量的含义是专有信息,本文故意省略了这些内容。
概述
PSoC器件可通过两种不同的模式进行编程:复位模式和重启模式。复位模式是首选编程模式,仅在系统采用外部供电时使用。在这种情况下,目标PSoC上的XRES引脚将于流程结束时切换,使其跳出编程模式,并恢复正常 *** 作。在重启模式下,主机微处理器将切换PSoC电源的开关。
主机处理器上的SDATA引脚必须为双向引脚。主机必须能够更改该引脚的属性,以便用其向PSoC发出信号、将其释放到High Z状态,以及从该引脚读取信号。
属性选择
设计人员必须设置以下两个属性:标签和说明。要进行此设置,可以对ISSP_DIRECTIVES.H文件中的某些#define进行注释或取消注释。这些#define标有“User AttenTIon Required”(用户需要注意)标签,非常明显,很容易找到。您还可以进行页面搜索,查找单个标签。每个属性的说明及其标签将列于属性下方:
属性:编程模式
标签:PROGRAMMING MODE(编程模式)
说明:如果采用的是重启模式,则应对该#define进行注释。如果采用的是复位模式,则应取消注释该#define语句。
属性:目标PSoC器件
标签:TARGET PSOC(目标PSOC)
说明:在此部分中选择目标CY8C20xx6A PSoC。在任何给定情况下,均只能启用一个器件,所有其他的器件均应注释掉。低层驱动程序修改。
设计人员根据主机特定代码,以 *** 作在对目标PSoC进行编程时所涉及的引脚。这些API可以在ISSP_DRIVER_ROUTINES.C找到,并标有“Processor Specific”(特定处理器)和“User AttenTIon Required”(用户需要注意)。
■端口位掩码:对于使用的特定主机处理器,必须调整四个端口位掩码。请注意,虽然要设置四个位,但根据所用的编程方法,只需在编程过程中用到以下三个位——复位模式下为SDATA、SCLK和XRES;电源循环模式下为SDATA、SCLK和PWR。
■Delay(n)函数:调整此函数,使while循环的每次迭代均保持至少1μs。循环时间通常没有上限。但是,循环时间越长,对目标的编程时间就越长。例如,如果主机微处理器也是PSoC,每次迭代约为1μs,开销为3μs。因此,该函数将产生n+3μs的延迟,其中n是传递给该函数的参数。要调整主机处理器的延迟时间,请修改ISSP_DELAYS.H中的#define。
■端口位 *** 作函数:这些函数将控制主机引脚,以产生PSoC编程所需的信号。它们可以驱动引脚输出高低电平,也可以将引脚释放至High Z状态。以下列出了这些函数。大部分函数的用途不言自明,但在代码中均有记录。附录中也提供了说明。
向RAM缓冲区中加载数据
HSSP代码将按顺序从128字节缓冲区取出数据,以进行PSoC闪存区块编程。此过程从最低区块地址开始。对第一个区块进行编程后,同一个缓冲区将用于对后续闪存区块进行编程。
设计人员必须根据数据来源(USB、RS-232、SD卡等)编写代码,以填充该缓冲区。对于所用的特定主机处理器,应编写以下两个函数:LoadProgramData()和fLoadSecurityData()。这些函数可以在ISSP_DRIVER_ROUTINES.C中找到,并标有“Processor Specific”(特定处理器)和“User Attention Required”(用户需要注意)。这些函数在原始状态下,会调用两个辅助函数,向缓冲区加载伪测试数据,以进行调试。在最终版本中,请删除或注释掉这些调用语句。
修改闪存区块顺序或数量
在某些情况下,必须对闪存中的特定区域进行编程。例如专用于存储特征、校准或固件现场升级的区域。这些特性通常通过EEPROM用户模块实现。但是,在某些情形下,如果代码空间受限,则可以在PSoC中直接编写这些特性,以节省代码空间。
您可以更改目标区块的起始地址,以及区块的编程顺序。上述 *** 作不会产生任何问题,因为每个编程顺序均包含区块地址。但是,请记住以下几点:
■如果修改了编程循环,则必须对验证循环应用相同的变更,否则验证将会失败。
■代码在运行过程中会累加校验和,并根据截至当时的整个闪存检查校验和。如果您仅对闪存的某个区域进行编程,则应相应地设置变量iChecksumData。
利用内置测试点进行验证
要成功实现主机源编程,最关键因素之一是获取正确的擦除和写入脉冲宽度。为帮助您完成此过程,在程序的重要位置实现了几个测试点(TP)调用。要启用此调试模式,在ISSP_DRIVER_SOUTINES.H中取消对USE_TP #ifdef的注释。有几个函数与调试模式相关,它们与本文之前提及的引脚 *** 作函数相似。系统设计人员必须提供主机特定代码,以驱动引脚输出高电平、低电平,或切换引脚。
正确的调试过程需要监控TP和SDATA线,且必须测量擦除和编程脉冲。实现此目的的最佳方式是使用双踪示波器,并在TP通道的上升沿进行触发,使其进入单序列模式。
擦除脉冲宽度从数据突发的末端开始测量,到TP下降沿结束,如图1所示。请注意,TP上升沿与数据突发末端不在一条线上。但是由于TP引脚被驱高的时刻与主机开始发出数据的时刻之间存在延迟开销,因此,TP上升沿预计会排成一条线。
图1.测量擦除脉冲宽度
编程脉冲宽度亦是从数据突发的末端开始测量,到TP下降结束。图2显示编程脉冲宽度测量。与擦除脉冲宽度一样,TP信号的上升沿与数据突发的末端也不在一条线上。
图2.测量写入脉冲宽度
表1汇总了各种PSoC器件的理想擦除和写入脉冲宽度。测量值必须在理想值-3%到+15%的范围内。无法满足该要求将导致错误编程,并产生不利影响,例如比指定规范更短的闪存数据保留时间,以及比预期更少的闪存擦除和写入循环。
表1.CY8C20xx6A PSoC的擦除和写入脉冲宽度
限制
main.c开头部分的注释包含有用的重要信息,系统设计人员应仔细考量。这些注释对HSSP代码的某些限制进行了说明;不过,以下是简短摘要。
■串行编程只能在5℃和50℃的温度范围内进行。
■HSSP程序不支持1.8V以下的电压。
■编程过程仅在一个电压范围内完成。如果器件初始电压为5.0V,则整个过程必须在5.0V范围内完成。
■SCLK的频率存在上限。器件数据手册的“交流电编程规范”部分指定了该频率,以符号FSCLK标出
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)