英飞凌单片机可以直接使用串口下载程序,因此考虑使用脱机下载板,事先将程序代码保存到外部存储器中,通过下载板将代码烧录入目标板,这样对工厂生产将是十分方便的。
BSL模式下的硬件连接:MBC持续下拉到0,通过按键对RESET脚产生复位信号。TMS按手册好像要锁存到0,实际使用中TMS悬空,只使用MBC和RESET脚就可以了,不知道这样的连接有没有问题,还望高手指教!
以目标芯片XC886为例说明下载步骤:
1.0x80 主机发送同步码
2.0x00,0x04,0x07,0x00,0x00,0x00,0x00,0x03 主机发送擦除命令
3.0x00,0x02,0x00,0x00,0x42,0x00,0x00,0x40 主机发送模式命令
4.0x01,xxxx,XOR 主机发送程序代码
5.0x01,xxxx,XOR 主机发送程序代码
N-1. 0x01,......... 主机发送程序代码........
N. 0x02,0x00,0x00,......0x00,0x00,0x02 主机发送结束代码
从机在正确接收主机发送的信息后,以0x55作为应答。
步骤2中各代码的意义:
1.0x00:报文头字节
2.0x04:擦除扇区
3.0x07:PFlash_Bank_Pair0 PFlash要擦除的扇区,每bank对应4K空间,根据程序代码长度设置需要擦除的扇区
4.0x00:PFlash_Bank_Pair1
5.0x00:PFlash_Bank_Pair2
6.0x00:Not used
7.0x00:Not used
8.0x03:校验和 以上字节的XOR累加
步骤3中各代码的意义:
1.0x00:报文头字节
2.0x02:烧录模式2
3.0x00:代码起始地址,高字节
4.0x00:代码起始地址,低字节
5.0x42:每次发送的数据长度(包含1个字节码头和1个字节校验和)
6.0x00:Not used
7.0x00:Not used
8.0x40:校验和 以上字节的XOR累加
步骤4,5,...N-1,发送程序代码到目标板,发送格式:
1.0x01:报文头字节
2~65:目标代码
66:校验和,1~65字节的异或校验和
步骤N:EOT块
1.0x02:报文头字节
2~65:0x00
66.0x02:1~65异或校验和
脱机下载板要保存目标代码,考虑可以使用MCU加EEPROM的方式或者直接选用内带EPROM的MCU,在本系统中使用了后者,MCU选用STC11F32,内部EEPROM空间28K,外围电路只需简单的驱动一只蜂鸣器和一些作为进度指示的LED。通讯电路中,使用双刀开关进行切换,一组切换到目标板通讯口,作为下载代码之用,一组切换到MAX232,作为下载板与电脑的通讯连接。单片机的另外一个端口驱动三极管,用来控制目标板的RESET,模拟产生按键复位动作。
下载板与计算机的通讯步骤:
1.主机(计算机)发送下载命令,从机接收后,发送应答信号
2.从机进入下载模式,擦除相应的扇区数据,准备接收程序代码
3.从机发送准备好信号
5.主机发送代码长度、校验和、下载日期等信息,从机接收后回复应答信号
6.主机发送程序代码块,从机正确接收后,发送应答信号
7.重复步骤4直到全部代码传送完毕
8.从机对接收的全部数据进行CRC校验,以确认数据正确。
计算机程序主要完成HEX文件的读取,并发送到下载板(关于HEX文件的格式可参考相应的资料)。在对HEX文件转为烧录代码的过程中,除计算代码长度外,还需要对代码数据进行校验,经过一系列的处理步骤,产生需要的附加代码。
下载板开机时,检测并验证所保存的代码数据,如果数据有误或丢失,通过LED和蜂鸣器输出告警信号,数据正确才允许下载操作。下载的步骤按照上面所述进行,即第一步产生复位信号,第二步发送同步码,第三步发送擦除命令,第四步发送模式命令,第四步发送代码.......,第N步发送EOT结束码。