李菁,赵龙飞,凌霄
(北京航天发射技术研究所北京100076)
在英飞凌16位/32位控制器的开发过程中,比较通用的方法是利用仿真器通过14针脚的JTAG端口对控制程序进行在线调试与加载,该方法在硬件测试及软件调试阶段非常方便,但着眼于现有车载控制器机械外形,外接的有限接插件端子数便成为制约控制器性能的一个重要因素,如预留多个端子专供JTAG口程序加载,会造成控制器资源的巨大浪费,此时利用端口复用技术便成为解决此类问题的关键。
文中以16位的XC164单片机为例,设计并改进了一种利用UART串口协议对其进行程序加载的方法,该方法也称为BSL工作模式下的程序加载,它通过特定的引脚与PC主机进行通信,采用标准的UART协议完成数据传输,从而完成控制器的程序下载功能。该方法硬件接口简单,并可复用为RS232/RS422接口,功能可靠,已在实际调试中取得良好效果。
BSL(Bootstrap loader)是英飞凌单片机的内嵌引导程序加载器提供的一种加载启动程序的机制,用于标准的系统启动。XC164系列单片机可支持3种协议/模式的BSL启动机制:标准UART协议,同步串行协议和CAN总线协议。不论哪种协议/模式,XC164系列单片机加载程序的处理方式是相同的。其中UART协议是实现设备之间低速数据通信的标准协议,是一种异步串行通信协议。
引导程序加载器是通过预先定义好的一组接口引脚与外部主机通信的,BSL启动模式下,这些接口引脚被自动使能,并由引导程序加载器控制。XC164根据外部引脚设置,上电复位后进入BSL模式,同时禁止看门狗定时器和调试系统,在与PC机建立通信之后,BSL进入到下一个循环中,接收相应个数的字节,这些字节从地址E0'0000H开始顺序保存到片上PSRAM中。加载的代码可能是最后的应用代码或是其他更为复杂的程序,该加载程序添加了传送协议,从而增强了加载代码或数据的一致性,还可能包含改变系统配置并使能总线接口,从而将接收到的数据保存在外部存储器中的代码序列。为了执行加载的代码,之后BSL使寄存器VECSEG指向地址E0'0000H,即要加载的第一条指令处,然后跳转到该指令。
XC164与PC机的硬件连接原理性框图如图1所示,通过PC的串行端口,经RS232/RS422总线将加载程序发送给XC164单片机,通过引导程序加载到芯片的FLASH中,完成控制器的程序下载功能。
图1 XC164与PC机的硬件连接图
标准UART引导程序加载通过USIC0通道0(UOCO)将程序代码/数据传送到PSRAM中。发送ID字节之后才能使能U0C0接收与主机进行半双工连接。在标准UART引导模式中,通信“握手”数据使用了不带奇偶校验的异步8位数据帧(1个起始位,1个停止位),其通信时序如图2所示。
图2 标准UART引导程序加载时序
XC164进入UART BSL模式并完成相应的初始化之后,XC164扫描RXD线,接收一个零字节。零字节被认为是包含1个起始位,8个0数据位以及1个停止位。在该零字节传送期间,XC164以当前CPU时钟为单位,计算相应的波特率因子,相应的初始化串行接口U0C0并将引脚TXD切换到输出,使用该波特率,向提供加载数据的主机返回一个ID字节。一旦发送ID字节,BSL进入下一个循环,通过U0C0接收用户数据。
XC164系列单片机允许用户在很宽的波特率范围内进行引导程序加载操作,但为了确保正确的数据传送操作,用户波特率的设置必须满足上限和下限的要求。XC164使用位域PDIV测量第一个零字节的长度。量化误差使得测量值可能与实际波特率有一定偏差。为了正确从主机向XC164传送数据,U0C0内部初始化波特率和主机的实际波特率之间的最大偏差应该低于2.5%。可根据式(1)计算XC164的波特率与主机波特率之间的偏差(FB,百分数)
注:函数(FB)不考虑振荡器和其他支持串口通信的器件的容差。
该波特率偏差是一个非线性函数,和系统时钟以及主机波特率有关。由于较小的波特率预分频因子容易导致较大的量化误差,因此函数(FB)的最大值随主机波特率增加而增大,如图3所示。
图3 主机与XC16X之间的波特率偏差
测量零字节时,最小波特率BLow由位域PDIV最大计数能力决定,取决于系统时钟,低于BLow的值会导致PDIV溢出,U0C0不能被正确初始化,可能导致与PC机通信失败。最大波特率BHigh是指未超过偏差极限的最高波特率。主机与XC164单片机建立通信时,通信波特率的设置最好在BLow和BHigh之间选取。
标准UART加载模式下,最小波特率BLow为2.4 K,BHigh为19.2 K。
单片机选用型号SAK-XC164CS-32F40F,总线协议收发器选用MAX1490EBEPG,单片机配置引脚如图4所示,信号EX_DL连同RS422的4条总线信号一起被引出控制器接插件,作为控制器的BSL模式配置端口和RS422通信端口,当EX_DL通过开关切换至低电平时,单片机复位后进入BSL加载模式;切换至高电平时,串口仅作有RS422通信功能。
图4 单片机XC164 BSL加载模式配置引脚
UART BSL程序加载是通过特定的端口进行的,串口与XC164的硬件连接如下图5所示,MAX1490是RS422收发器,实现PC机与422总线间的电平转换,XC164的P3.10和P3.11既可以用于串口加载程序和RS232/RS422通信,也可以复用普通IO端口。
串口协议的引导程序加载功能可以通过Memtool实现。Memtool是英飞凌提供的免费下载软件,可以对目前英飞凌单片机所有产品进行编程,包括片内存储器编程和外部Flash编程。Memtool 4.2软件的主界面如图6所示,选择菜单栏“Target”菜单下的“Change”栏,在XC16X系列中配置具体的目标芯片,串口使用的波特率115200和COM端口。
图5 串口总线与单片机的硬件连接
图6 Memtool 4.2软件主界面
Memtool软件配置完成后,控制器重新上电复位,点击“connect”,XC164芯片则进入引导程序硬件初始化和与PC主机建立通信的阶段,通信建立的实测时序如图7所示。从图6中可看出,PC主机向控制器发送10位的0字节,每位占据时间约10 μs,由此计算出波特率为115 200,与设置值相符合,之后控制器向PC主机发送D5H的ID字节,每位时间也为10 μs,波特率相同。通讯建立完成后,用户程序的加载可以通过“Program”实现。
图7 XC164与PC机建立通信实测时序
RS422标准规定了收发器门限为±200 mV,这样规定能够提供比较高的噪声抑制能力。当接收器正端(A)电平比负端(B)高+200 mV以上时,输出为正逻辑,反之,输出为负逻辑。但由于第三态的存在,即总线空闲时没有任何信号驱动总线,使AB之间的电压在-200 mV~+200 mV直至趋于0 V,这带来了一个问题:接收器输出状态不确定。MAX1490收发器本身解决了这个问题,当总线空闲时,MAX1490通过自身的内部电路,将总线驱动为高电平状态。
RS422通信为避免长线信号传输时信号的反射和回波,一般在信号接收端接入终端匹配电阻,典型值为120 Ω。但这样做有可能引入一种后果,当总线上有超过-200 mV的杂波电平干扰时,接收器输出为低电平,如果杂波的干扰电平一直未达到+200 mV以上,则接收器的输出就一直为低电平,XC164芯片则进入引导程序硬件初始化后接收不到0字节(因为总线一直被驱动为低),与PC主机不能成功建立通信,从而导致程序烧写失败。
杂波电平干扰问题可以通过设置适宜的偏置电阻解决,偏置电阻可以加在下载工装电缆中,控制器接插件引出电源是24 V,所以偏置电阻阻值的计算是根据24 V电源来计算的,偏置电阻添加的目的是在总线空闲状态下,匹配电阻120 Ω上的分压达到+200mV以上。改进后的硬件电路图如图8所示。
图8 工装电缆的改进
基于串口协议的程序烧写方法充分利用了英飞凌flash系列芯片所提供的BSL功能,硬件实现结构简单,可以与RS422通信接口复用,不占用控制器有限的接插件资源,程序下载无需额外的下载器,减少了控制器的生产成本,简化了控制器生产流程。改进后的串口协议程序烧写方法成功解决了串口烧写失败的问题,该方法已经广泛应用于控制器的批产工作中。
[1]张立强,宋玲,刘宝娟.JTAG并口下载设计[J].微处理机,2013(1):280-285.
[2]邬子婴,步鑫,任齐凤.边界扫描JTAG控制器设计与实现[J].航空电子技术,2016,1(7):31-34
[3]姚海滨,高磊,黄贵晨.RS232串口直连线与交叉线可变装置[J].黑龙江科技信息,2016(5):106.
[4]孙慧强.基于单片机的数据串口通信研究[J].数字技术与应用,2016(3):24.
[5]HuiZhao,Tiejun Xiao,Xiaoru Han.The Application of Boundary-Scan Technology to FPGA-Based ExperimentSystem:The Ninth International Conference on Electronic Measurement&Instruments[C]//Beijing,China,2009:2629-2632.
[6]Wen-Cheng Hsieh.U-BootPorting And Implementation On Embedded System[M].National Taiwan University of Science and Tecnology,NTUST Library,2005:8-15.
[7]崔旭晶,李天雷.基于SOPC的UART IP核设计与驱动开发及系统移植[J].电子设计工程,2014(6):121-125.
[8]邓伟.徐扬婧.基于SOPC技术的异步串行通信IP核的设计与实现[J].电子设计工程,2012,20(3):185-188.
[9]夏柯.门兰宁.基于ZYNQ-7000 DMA控制器的UART数据传输的设计与实现[J].信息化建设,2014(9):113-114.
[10]黄毓芯.基于FPGA的UART电路设计与实现[J].机电技术,2014(4):33-35.
[11]刘浩淼,卞树檀.基于CPLD的RS 422串口通信实现[J].电子设计工程,2011(12):153-155.
[12]李洋洋,吴武臣.基于断言的验证方法在UART模块中的应用研究[J].微电子学与计算机,2012(1):151-153.
[13]孟敬,王冬青,姜璐璐,等.基于单片机的CAN/UART协议转换器的设计[J].青岛大学学报,2012(12):38-42.
[14]桂桂,李吉.王珍.基于UART的AVR和FPGA 的通信设计及实现[J].仪表技术,2013(11):44-46.
[15]薛志远,朱浩,张铁军.一种基于串口通信的DSP调试平台设计[J].微电子学与计算机,2013(12):151-154.