Motorola S-records(S19)解析模块

最新更新时间:2021-07-30来源: eefocus关键字:Motorola

飞思卡尔系列单片机程序编译后生成的是S-records格式的文件(.s19)。在实现远程升级的时候,不可避免的需要传输S-record记录(或其转码后的数据),然后根据里头的数据来更新程序。这就需要对ASCII码表示的S-record数据进行解析。


于是就写了这个模块,或说工具包可能更准确点。


顺便一提。我已基于官方的版本基本实现了自定协议的bootloader,改成了软方式进入bootloader而不是官方的使用引脚的方式。代码不准备放出来,但后面会写篇文章介绍下自定的协议,原理,以及实现时遇到的坑等。


下面上代码:


/*

*********************************************************************************************************

*

*

*                              Motorola S-records Support package

*                                        S-records 支持包

*

* File    : SRecord.h

* By      : Lin Shijun(http://blog.csdn.net/lin_strong)

* Date    : 2018/03/03

* Version : V1.0

* Note    : 1. This package provide the functions for converting between the S-record and the 

*                corresponding string.

*              这个包提供了S-record与字符串间的转换函数

*           2. The package supposed the letter in the string in upper case. user should make

*                sure for that.

*              工具包默认字符串中的字母都是大写的,用户需要保证这件事。

*           3. the first thing to do with this package is to check the TYPE DEFINE.

*              用这个包的第一步是检测下定义的类型对不对 

*

* the follow description of Motorola S-records Format is from 

*    http://www.amelek.gda.pl/avr/uisp/srecord.htm

* chinese version: http://blog.csdn.net/lin_strong/article/details/78521950

*

* NAME

*   srec - S-record file and record format

* DESCRIPTION

*

*   An S-record file consists of a sequence of specially formatted ASCII character strings. An S-record 

* will be less than or equal to 78 bytes in length.

*

*   The order of S-records within a file is of no significance and no particular order may be assumed.

*

*   The general format of an S-record follows:

*

*   +-------------------//------------------//-----------------------+

*   | type | count | address  |            data           | checksum |

*   +-------------------//------------------//-----------------------+

*

*   type -- A char[2] field. These characters describe the type of record (S0, S1, S2, S3, S5, S7, S8, or S9).

*

*   count -- A char[2] field. These characters when paired and interpreted as a hexadecimal value, display the 

* count of remaining character pairs in the record.

*

*   address -- A char[4,6, or 8] field. These characters grouped and interpreted as a hexadecimal value, display 

* the address at which the data field is to be loaded into memory. The length of the field depends on the number

* of bytes necessary to hold the address. A 2-byte address uses 4 characters, a 3-byte address uses 6 characters,

* and a 4-byte address uses 8 characters.

*

*   data -- A char [0-64] field. These characters when paired and interpreted as hexadecimal values represent 

* the memory loadable data or descriptive information.

*

*   checksum -- A char[2] field. These characters when paired and interpreted as a hexadecimal value display the

* least significant byte of the ones complement of the sum of the byte values represented by the pairs of 

* characters making up the count, the address, and the data fields.

*

*   Each record is terminated with a line feed. If any additional or different record terminator(s) or delay 

* characters are needed during transmission to the target system it is the responsibility of the transmitting 

* program to provide them.

*

*   S0 Record. The type of record is 'S0' (0x5330). The address field is unused and will be filled with zeros 

* (0x0000). The header information within the data field is divided into the following subfields.

*   

*     mname is char[20] and is the module name.

*     ver is char[2] and is the version number.

*     rev is char[2] and is the revision number.

*     description is char[0-36] and is a text comment.

*

*     Each of the subfields is composed of ASCII bytes whose associated characters, when paired, represent one 

* byte hexadecimal values in the case of the version and revision numbers, or represent the hexadecimal values 

* of the ASCII characters comprising the module name and description.

*

*   S1 Record. The type of record field is 'S1' (0x5331). The address field is intrepreted as a 2-byte address.

* The data field is composed of memory loadable data.

*

*   S2 Record. The type of record field is 'S2' (0x5332). The address field is intrepreted as a 3-byte address. 

* The data field is composed of memory loadable data.

*

*   S3 Record. The type of record field is 'S3' (0x5333). The address field is intrepreted as a 4-byte address. 

* The data field is composed of memory loadable data.

*

*   S5 Record. The type of record field is 'S5' (0x5335). The address field is intrepreted as a 2-byte value and 

* contains the count of S1, S2, and S3 records previously transmitted. There is no data field.

*

*   S7 Record. The type of record field is 'S7' (0x5337). The address field contains the starting execution 

* address and is intrepreted as 4-byte address. There is no data field.

*

*   S8 Record. The type of record field is 'S8' (0x5338). The address field contains the starting execution 

* address and is intrepreted as 3-byte address. There is no data field.

*

*   S9 Record. The type of record field is 'S9' (0x5339). The address field contains the starting execution 

* address and is intrepreted as 2-byte address. There is no data field.

*

* EXAMPLE

*

*   Shown below is a typical S-record format file.

*

*     S00600004844521B

*     S1130000285F245F2212226A000424290008237C2A

*     S11300100002000800082629001853812341001813

*     S113002041E900084E42234300182342000824A952

*     S107003000144ED492

*     S5030004F8

*     S9030000FC

*

*   The file consists of one S0 record, four S1 records, one S5 record and an S9 record.


*   The S0 record is comprised as follows:


*     S0 S-record type S0, indicating it is a header record.

*     06 Hexadecimal 06 (decimal 6), indicating that six character pairs (or ASCII bytes) follow.

*     00 00 Four character 2-byte address field, zeroes in this example.

*     48 44 52 ASCII H, D, and R - "HDR".

*     1B The checksum.

*

*   The first S1 record is comprised as follows:

*

*     S1 S-record type S1, indicating it is a data record to be loaded at a 2-byte address.

*     13 Hexadecimal 13 (decimal 19), indicating that nineteen character pairs, representing a 2 byte address,

*  16 bytes of binary data, and a 1 byte checksum, follow.

*     00 00 Four character 2-byte address field; hexidecimal address 0x0000, where the data which follows is 

*  to be loaded.

*     28 5F 24 5F 22 12 22 6A 00 04 24 29 00 08 23 7C Sixteen character pairs representing the actual binary

*  data.

*     2A The checksum.

*

*   The second and third S1 records each contain 0x13 (19) character pairs and are ended with checksums of 

* 13 and 52, respectively. The fourth S1 record contains 07 character pairs and has a checksum of 92.

*

*   The S5 record is comprised as follows:

*

*     S5 S-record type S5, indicating it is a count record indicating the number of S1 records

*     03 Hexadecimal 03 (decimal 3), indicating that three character pairs follow.

*     00 04 Hexadecimal 0004 (decimal 4), indicating that there are four data records previous to this record.

*     F8 The checksum.

*

*   The S9 record is comprised as follows:

*

*     S9 S-record type S9, indicating it is a termination record.

*     03 Hexadecimal 03 (decimal 3), indicating that three character pairs follow.

*     00 00 The address field, hexadecimal 0 (decimal 0) indicating the starting execution address.

*     FC The checksum.

*

*********************************************************************************************************

*/


#ifndef SRECORD_H 

#define SRECORD_H


/*

*********************************************************************************************************

*                                      INCLUDE

*********************************************************************************************************

*/


#include


/*

*********************************************************************************************************

*                                      TYPE DEFINE

*********************************************************************************************************

*/


typedef unsigned char INT8U;

typedef unsigned long INT32U;


/*

*********************************************************************************************************

*                                      CONSTANT

*********************************************************************************************************

[1] [2] [3]
关键字:Motorola 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic543348.html

上一篇:MC9S12XEP100 SPI模块 驱动程序
下一篇:基于uCOS-II的任务池/线程池 模块

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Motorola edge S发布:首发骁龙870 售价1999元起
      新浪数码讯 1月26日消息,今天联想于线上举行摩托罗拉手机新品发布会,正式发布了Motorola edge S,售价1999元起。  Motorola edge S全球首发骁龙870 5G移动平台。骁龙870 5G移动平台基于7纳米工艺,CPU包含一颗A77(3.19GHz)超大核,三颗A77(2.42GHz)大核以及四颗 A55(1.8GHz)小核。运行内存配备了LPDDR5,支持“拓展虚拟内存”技术,官方表示提速了 72%。闪存部分采用了Turbo UFS 3.1,支持Turbo Write和HPB 技术,能效提升25%。天线部分,Motorola edge S使用了 Smart
发表于 2021-01-28
美光牵手摩托罗拉,新机motorola edge+搭载低功耗DDR5 DRAM
今日,内存和存储解决方案领先供应商美光科技(Micron Technology)与摩托罗拉公司联合宣布,摩托罗拉新推出的 motorola edge+智能手机已搭载美光的低功耗 DDR5(LPDDR5)DRAM 芯片,从而为用户带来完整的 5G 体验。 得益于 5G 所具备的更快传输速度和更低延迟等特性,该款手机为包括网络游戏和娱乐直播在内的云应用带来性能提升。  据了解,美光移动产品事业部高级副总裁兼总经理 Raj Talluri 博士层曾表示,美光与摩托罗拉基于该款智能旗舰手机的合作体现出移动设备制造商极其重视下一代存储解决方案,以期为用户带来更高性能和更丰富的体验
发表于 2020-04-23
美光牵手摩托罗拉,新机<font color='red'>motorola</font> edge+搭载低功耗DDR5 DRAM
Motorola One登陆美国市场:搭载骁龙625处理器 售价399美元
今天,摩托罗拉移动宣布Motorola One将登陆美国市场进行销售。Motorola One是一款摩托罗拉于8月份发布的中端手机,隶属于谷歌Android One计划。摩托罗拉之前涉足过Android One系列,发布了一款Android One版本的Moto X4,Android One的最大特点是原生系统,以及承诺2次Android大版本更新。Motorola One搭载了5.9英寸1520x720分辨率屏幕,骁龙625处理器,4GB内存,后置1300万像素双摄,前置800像素单摄,电池3000毫安时。由于宽大的屏幕刘海+后置竖排双摄,Motorola One也被外媒们诟病为iPhone X的模仿者。Motorola One
发表于 2018-11-05
Motorola One登陆美国市场:搭载骁龙625处理器 售价399美元
集微网消息,就在今天摩托罗拉宣布隶属于谷歌Android One计划推出的机型Motorola One将在美国市场进行开售。据了解,Motorola One是摩托罗拉于今年8月份发布的一款定位中端级别的手机。        据了解,Motorola One搭载了骁龙625处理器,4GB运行内存,内建了一块5.9英寸的屏幕,后置为1300万像素双摄,前置为800万像素摄像头,3000mAh电池。        Motorola One是摩托罗拉手机正式回归摩托罗拉品牌的首款产品,该机在美国的售价为399.99美元,约合人民币2700元,预计11月11日正式推出。
发表于 2018-11-05
联想主攻印度线下通路 将推500家Motorola品牌商店
大陆电脑、平板与智能手机品牌联想为扩大市占率,联想日前计划主攻线下市场,将与500多家印度品牌商店合作,盼透过旗下的Motorola品牌成为印度前三大智能手机销售商。目前大陆联想与Motorola合计为印度第五大智能手机销售商,据市场调查机构Counterpoint Research统计,在2017年第3季仅次于三星电子(23%市占率)、小米(22%市占率)、Vivo(9%)与Oppo(8%),而联想与Motorola合计为7%。印度这500多家品牌商店在联想的计划下将成为“Motorola首选合作伙伴”,反映出与小米类似的线下零售策略,以加快在印度取得市占率的速度,并缩短与领先品牌三星的差距。联想甚至考虑于2018年停止在印度
发表于 2017-11-20
示波器测试中的假波现象和引起电源模块发热形象解析
,无论示波器显示信号波形怎么变化,但是峰峰值800mV并没有发生变化,可以说明示波器显示的波形为假波现象。 五、总结 假波现象只会出现在数字示波器中,现在市场上基本都是数字示波器。 假波现象是由于采样率不足导致的。示波器最大的采样率是固定的,实际采样率是可变的,通过选择合适的时基档位和储存深度可以提高实际采样率,有效避免假波的产生。 示波器测量同一信号在不同时基档显示不相同频率波形时,请用以上4种方法判断是否为假波现象。[page]   引起电源模块发热的四大原因 一摸电源模块的表面,热乎乎的,模块坏了?且慢,有一点发热,仅仅只是因为它正努力地工作着。但高温
发表于 2018-11-28
示波器测试中的假波现象和引起电源<font color='red'>模块</font>发热形象<font color='red'>解析</font>
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved