单片机程序远程升级的设计
闪速存储器芯片的编程操作是自动字节编程,既可以顺序写入,也可指定地址写入。编程操作时注意芯片的编程时间参数。Flash程序空间为 0x8000—0xFFFF,Flash命令用户接口地址为0x7555。第一页范围是[0x8000—0x80FF],最后一页[0xFF00— 0xFFFF]。1. 擦除一页流程是:先给命令用户接口地址0x7555里送0xAAAA,然后再给命令用户接口地址0x7555里送0x5511,再后给要擦除页地址送任意数,约20ms即可完成擦除操作,然后可以执行其它操作。例如擦除第6页[0x8500—0x85FF]流程如下:
(1)0x7555 ?0xAAAA(2) 0x7555?0x5511(3) 0x85XX?0xXXXX (其中X为任意值) 2. 写入一个字流程是:先给命令用户接口地址0x7555里送0xAAAA,然后再给命令用户接口地址0x7555里送0x5533,再后给要写入字地址送数据,约40us即可完成写入操作,然后可以执行其它操作。例如向0x8000单元写入0xffff流程如下:(1)0x7555?0xAAAA (2) 0x7555?0x5533 (3) 0x8000?0xffff 3. 写多个字流程是:
先给命令用户接口地址0x7555里送0xAAAA,然后再给命令用户接口地址0x7555里送0x5544,然后给要写入字首地址送数据,约40us即可完成1个字写入操作。再给命令用户接口地址0x7555里送0x5544,给要写入字地址送数据,等待40us即可,循环操作,即可完成多字的写入。
3. PC机程序
为了实现单片机程序的正确下载,需要有PC机程序配合,以提供升级程序的代码。PC机程序主要负责解释和发送Motor S37格式的程序代码,并完成与单片机进行代码传输的反复确认以保证程序的正确下载。
3.1 Motor S37 格式
凌阳单片机的程序代码可以是被编译成Motor S37格式和TSK两种格式。本文中所选取的代码格式是Motor S37格式。为了解释Motor S37格式的代码,就要先来看看它的格式,见表1。
字段 | 内容详细介绍 |
记录类型 | 表示文件记录的开始,记录类型有下列规定: ASCII码 S3-数据记录;ASCII码 S7-记录结束符。 |
记录长度 | 规定了包括地址、数据和检验和字段的记录长度。8位的记录长度值被转换成两个ASCII字符码,高位在前。 |
装入地址 | 这是由二进制地址码转换成的8个ASCII字符码,在此地址开始装入文件记录。其顺序依次为: 高字中的高字节中的高位数,高字中的高字节中的低位数, 高字中的低字节中的高位数,高字中的低字节中的低位数, 低字中的高字节中的高位数,低字中的高字节中的低位数, 低字中的低字节中的高位数,低字中的低字节中的低位数, 本字段在记录结束时给出记录的起始地址,或者连续的8个0的ASCII字符码。 |
数据 | 文件中实际的数据也被转换为每每两个ASCII字符码字节,高位在前。在出现记录结束符时意味着数据字节记录结束。 |
检验和 | 它是关于记录长度、装入地址及数据字段的总和;是以1的补码形式由一个8位二进制数转换成的两个ASCII字符码,也是高位在前。 |
表1 Motor S37 格式的代码文件格式
下面我们以一段实际的Motor S37 格式的代码来具体说明Motor S37 格式。
S31500010022237041941193227009B34000455E1BD798
S30B0001FFFA3B803B800980FB
S307000100000000F7
S70500000000FA
这段代码是从实际的程序代码中截取出来的几句。前面几行是以S3开头,表示数据记录;最后一行以S7开头,表示结尾。S3或者S7后面跟着的两位是数据长度,都是以16进制表示,15即表示十进制的20,其长度表示的是此行里8位数据的个数。后面的8个ASCII码是装入地址,这里要注意的是凌阳 SPCE061A是16位单片机,而S37文件中的地址是以8位来计算的,所以地址都要除2来计算实际地址。如第一行中的00010022,其在单片机中的实际地址是0x8011。地址的后面是数据,其数据表示也是按照8位来表示的,需要转换到单片机中的16位。拿第一行来举例,原来应写在 0x00010022上的0x23和写在0x00010023上0x37,就应改为写到0x8011上的0x3723。
3.2 确认机制
为了进一步的保证程序升级的可靠性,本文在Motor S37的基础上又加上了确认机制。即在单片机收到数据后,回传一遍数据,然后等待PC机确认;当PC机确认数据正确后,发送ACSII码S1作为ACK信号;否则发送S2作为DCK信号。确认机制牺牲了系统的效率,但是提高的可靠性,本文建议在一些链路状况较差的环境加上确认机制。
3.3 程序的偏移量
此处要说明的是,由于BootLoader代码占用了一定的程序空间,真正的用户代码的存放要从启动代码后开始,这就需要在编译程序的时候设置好偏移量,使得用户代码存储在BootLoader代码之后。在凌阳IDE184中,偏移量可以在 Project->Setting->Section(如图3)中设置。图中所示是设置了256字的偏移量,即0x100。因为 SPCE061A的程序空
16位单片机 SPCE061A BootLoader 远程升级 S37格式 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)