Motorola S-records(S19)解析模块

发布者:BlissfulBliss最新更新时间: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 引用地址:Motorola S-records(S19)解析模块

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

推荐阅读最新更新时间:2024-11-22 01:49

摩托罗拉Moto G22欧洲发布:配联发科Helio G37芯片
摩托罗拉 Moto G22 已经在欧洲正式发布,该机将首先在欧洲的特定市场推出,并将在未来几周内进入拉丁美洲、中东和亚洲。在欧洲,该机的售价为 169.99 欧元(约 1188 元人民币),已经在摩托罗拉的德国网站列出,还没有正式开售,只有一种内存 / 存储组合 ——4/64GB,提供三种颜色,珍珠白、冰山蓝和宇宙黑,还有薄荷绿的配色,但还没有上架。   Moto G22 采用 6.5 英寸 720x1600 的 90Hz LCD 触摸屏,搭载联发科 Helio G37 芯片组,这是一个八核 CPU,其中 4 个 Cortex-A53 核心的频率高达 2.3GHz,另外 4 个 Cortex-A53 核心的频率为 1.8
[手机便携]
摩托罗拉新机现身Geekbench :6GB内存,单核跑分为2466分
摩托罗拉一款代号 lbiza(伊维萨岛)的新机现身 Geekbench。   从泄露的信息来看,摩托罗拉 lbiza 将搭载 6GB 内存,运行 Android 11 系统。   其单核测试 2466 分,多核测试 6223 分,外媒 mysmartprice 预计为高通骁龙 480 处理器。   IT之家发现,该信息与之前在 Wi-Fi Alliance 数据库中发现的数据相吻合,该数据显示 Moto Ibiza 支持双频 Wi-Fi 并运行 Android 11 系统。   如果摩托罗拉 lbiza 搭载高通骁龙 480 处理器,那么将成为第三款搭载该处理器的手机。目前的两款分别为 vivo Y31s 和 O
[手机便携]
<font color='red'>摩托罗拉</font>新机现身Geekbench :6GB内存,单核跑分为2466分
摩托罗拉6月底前停产其首款平板电脑Xoom
    3月24日消息,据国外媒体报道,台湾网站《DigiTimes》日前报道说,摩托罗拉移动计划于今年6月底停止生产Xoom平板电脑。     《DigiTimes》网站援引匿名上游供应商消息人士的话报道说,摩托罗拉移动第一季度将满足其供应商预期的70万到80万台Xoom订单量,接下来的3个月里摩托罗拉移动将削减Xoom订单。该网站称,下月摩托罗拉移动Xoom平板电脑的订单为30万台,略低于5月份的订单,6月摩托罗拉移动将最终停止生产Xoom。     摩托罗拉移动上月推出了Xoom平板电脑,裸机价为799.99美元,与运营商Verizon Wireless签订2年使用合约后的价格为599.99美元,该平板电脑配置了10
[手机便携]
摩托罗拉想开发超强谷歌手机 可惜佩奇没兴趣
    当谷歌(微博)在2011年以125亿美元的价格收购摩托罗拉的时候,很多人猜想谷歌可能会以苹果为范本去改造它的Android部门。 包括谷歌和摩托罗拉自己的员工在内的很多人都认为,拉里佩奇(Larry Page)收购摩托罗拉的目的不仅仅是为了后者的专利,他还可以将谷歌的软件与摩托罗拉的硬件结合在一起去跟苹果的iPhone对抗。 但这样的事情一直都没有发生。 2013年8月,摩托罗拉推出了Moto X。摩托罗拉在宣传那款产品时称之为“Moto X,由谷歌旗下摩托罗拉出品”。但是该款产品并不是摩托罗拉的工程师和高管们想要制造的一体化手机。 他们想开发出一款能够给人留下更深刻印象的手机产品。 摩托罗拉想跟谷歌开发自然语言处理技术的团
[手机便携]
volved Wireles向ITC提起337调查申请 三星与摩托罗拉涉案
美国国际贸易委员会(ITC)于当地时间2月2日发布公告称,Evolved Wireless提出337调查申请,三星和摩托罗拉涉案。 据悉,Evolved Wireles指控对美出口、在美进口或在美销售某些LTE蜂窝通信模块及其产品侵犯其专利权,请求ITC发起337调查,并发布普遍排除令、有限排除令和禁止令。 337调查是指美国国际贸易委员会根据美国《1930年关税法》第337节(简称“337条款”),对不公平的进口行为进行调查,并采取制裁措施的做法。如果进口产品侵犯了美国有效的知识产权,该知识产权权利人(无论其是美国企业还是外国企业)可以向ITC提起337调查申请,并要求ITC采取相关救济措施。
[手机便携]
摩托罗拉Edge S官宣:首发高通骁龙870芯片
昨日晚间,高通推出了新一代的骁龙 870 芯片。现在摩托罗拉方面紧接着宣布了自家新一代旗舰 Motorola Edge S,并表示将全球首发搭载高通骁龙 870 芯片。   摩托罗拉方面决定将于 1 月 26 日推出Motorola Edge S,届时 IT之家将为大家带来更多报道。 此前有爆料称,这款 motorola edge s 将采用 6.7 英寸 1080P+ 打孔屏,采用前置 1600 万像素双摄,后置主摄可达 6400 万像素。此外,硬件方面搭载骁龙 870 芯片,电池容量高达 5000mAh。
[手机便携]
HTC摩托罗拉:不会像苹果那样降低旧手机性能
    HTC和摩托罗拉表示,他们不会因为电池老化而降低手机的处理器速度。   苹果此前承认,在电池老化的情况下确实会降低iPhone性能,他们强调这是为了保护电池、保护手机硬件,防止老旧设备自动关机。在发送给外媒The Verge的电子邮件中,HTC和摩托罗拉都表示他们不会在智能手机上采取类似的做法。HTC的一位发言人表示,使手机随着电池使用时间的延长而减慢“并不是我们的做法”,摩托罗拉一位发言人则说:“我们不会电池老化来降低CPU性能。”   The Verge也联系了谷歌,三星,LG和索尼,以询问他们的手机处理器是否会因电池老化而受到抑制。索尼的一位发言人表示,会在假期后回应此事,三星发言人表示该公司正在调查。   HTC
[手机便携]
摩托罗拉edge 30 Pro曝光为骁龙8加持
1月6日消息,据91Mobile报道,摩托罗拉很快就会发布edge 30 Pro,报道称这款高端旗舰已经在测试中,预计会在两个月之内发布。   此前摩托罗拉edge 30 Pro已经现身GeekBench跑分网站,该机搭载的是高通骁龙8旗舰处理器,配备了12GB内存,出厂预装Android 12操作系统。   从命名来看,摩托罗拉edge 30 Pro可能是摩托罗拉面向海外发售的机型,国行版可能会命名为摩托罗拉edge X30 Pro。   在2021年12月份,摩托罗拉edge X30全球首发高通骁龙8旗舰处理器,首发起售价2999元,是迄今为止性价比最高的骁龙8旗舰。   与此同时,跟edge X30同时登场的摩托罗拉e
[手机便携]
<font color='red'>摩托罗拉</font>edge 30 Pro曝光为骁龙8加持
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved