S-Reord是一种由摩托罗拉公司创建的文件格式(不得不说,摩托罗拉厉害啊,SPI和S-Record都是他们创造的)。S-Record的基本字符为ASCII字符,用以表示相应的十六进制数据。该数据格式还有以下的几种名字或缩写SRECORD, SREC, S19, S28, S37。S-Record格式多用在存储类芯片,Flash、EPROMs、EEPROMs等。

本文主要介绍S-Record格式及其各部分所代表的含义,更多详细的介绍可以看本文资料主要来源,Wikipedia--SREC (file format)

S-Record格式详解

在维基百科上看到的这幅图把S-Record格式表达的十分完善,在此引用一下。

注意

  • 此图中的每一个格子表示一个字符,其中在中间一条主格式下面的2 Bytes表示两个字符,其真实存储时为两个字符(一个字符的ASCII码为一个字节)。
  • 在下方粉红色部分下的括号,16 bits表示的是一个方框中符号对应的二进制数。比如'F'就对应0xF(1111)。

S-Record数据按行进行存贮。其主要分为以下几个部分:

  • type:类型,主要有S0-S3, S5, S7-S9等几种模式。
  • count:长度,主要表示该部分之后有多少字节长度的数据(一个字节表示两个字符)。
  • address:数据写入的起始地址,主要根据类型有着不同的地址长度,其采用big endian大端模式(高位在前)存储。
  • data:数据,一行S-Record中的数据,其长度由type和count共同决定。可以按照如下方式进行计算(单位Byte):< count > - < address >(取值为2、3、4) - 1(< checksum >字段的长度)
  • checksum:校验和,用于校验整行数据是否正确。

该图中左下角部分表示了不同类型下地址区的长度和不同类型的数据格式。注意:纵观整幅图,含有数据的几种格式为S0-S3, S5,其他模式均无数据的存在。

示例

数据:S1137AF00A0A0D0000000000000000000000000061
拆解:S1 - 13 - 7AF0 - 0A0A0D00000000000000000000000000 - 61

  1. 类型为S1
  2. 长度为0x13 = 19
  3. 根据S1的数据格式,可以知道count后2 Bytes为address数据(7AF0)
  4. 最后一个字节为校验位(61)
  5. 剩余部分为数据位(0A0A0D00000000000000000000000000)

有关checksum校验的计算,还是以上述为例,

  1. 相加,0x13 + 0x7A + 0xF0 + ... + 0x00 = 0x19E
  2. 取后两个字节0x9E
  3. 0xFF - 0x9E即可得到校验值0x61

[整理]S-Record数据格式解析的更多相关文章

  1. InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析

    InnoDB锁机制之Gap Lock.Next-Key Lock.Record Lock解析 有意思,解释的很好

  2. RAW数据格式解析

    RAM数据格式解析 Raw格式是sensor的输出格式,是未经处理过的数据,表示sensor接受 到的各种光的强度. Raw数据在输出的时候是有一定的顺序的,一般为以下四种: 00: GR/BG 01 ...

  3. android JSON数据格式 解析

    一.   JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.  Json建构于两种结构:  最后再加一种格式在文章的最后显示出来非常少有的格式   ...

  4. 类xml数据格式解析

    需要解析一种类xml的数据文件,数据格式1如下: <head> //文件头 <type>xtype</type> <condition> key1=va ...

  5. Android数据格式解析对象JSON用法

    1.JSON概念: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON可以将 ...

  6. Android数据格式解析对象JSON用法(转)

    地址:http://www.cnblogs.com/devinzhang/archive/2012/01/09/2317315.html 里面的重点: JSON解析案例     (1)解析Object ...

  7. 【转载,整理】域名CNAME解析配置,使用域名B作为域名A的CNAME记录值

    最近有个需求,未备案的域名A,想解析到香港 或 国内的服务器上,但是由于未备案,直接使用cdn解析在国内访问会很慢 但是不想直接直接到ip,所以找到两个方法可以解决: 方案一:转移到其他服务器做301 ...

  8. OC封装的TLV数据格式解析库

    作者:朱克锋 邮箱:zhukefeng@iboxpay.com 转载请注明出处:http://blog.csdn.net/linux_zkf TLV是一种可变格式,意思就是: Type类型, Leng ...

  9. MySQL InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析

    MySQL InnoDB支持三种行锁定方式: l   行锁(Record Lock):锁直接加在索引记录上面,锁住的是key. l   间隙锁(Gap Lock):锁定索引记录间隙,确保索引记录的间隙 ...

随机推荐

  1. Python中__init__方法

      注意1.__init__并不相当于C#中的构造函数,执行它的时候,实例已构造出来了. 1 2 3 4 5 class A(object):     def __init__(self,name): ...

  2. 微信公众平台实现pc端网站登录

    亲测通过 1,pc端生成带有当前会话的sessionid的url(通过微信来扫描) 2,扫描后,微信浏览器将访问url,将微信浏览器中的sessionid改成通过url传过来的session(pc端) ...

  3. Oracle系统学习摘要

    对于企业级大型系统,Oracle数据库的重要性不言而喻,作为长期使用Sql server的developer,花了点时间学习了一个Oracle的系列课程,总结一下. 1.oracle一些基础命令 sq ...

  4. ajax学习总结

    一.ajax简介 AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),AJAX 是一种与服务器交换数据的技术,他可以在 ...

  5. leetcode-【中等题】Divide Two Integers

    题目 Divide two integers without using multiplication, division and mod operator. If it is overflow, r ...

  6. 移动端使用rem适配及相关问题

    移动端适配方案,说多也很多.可以使用百分比布局,但百分比与em都是基于父元素进行计算的,在实际应用中不是很方便.使用rem不仅可以设置字体大小,块大小也可以设置.而且可以良好的适配各种终端,所以这方案 ...

  7. WebServices(转)

    一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...

  8. Flume整合Spark Streaming

    Spark版本1.5.2,Flume版本:1.6 Flume agent配置文件:spool-8.51.conf agent.sources = source1 agent.channels = me ...

  9. 应用EF访问SQLite数据

    创建项目,应用EF访问SQLite 1.创建项目 项目结构初始结构如下图所示,Netage.Data.SQLite 类库项目用于定义访问数据的接口和方法,Netage.SQLiteTest.UI 控制 ...

  10. 博客CSS

    <p style="background: #CFE0F8; padding: 5px;">理解Code First及其约定和配置</p> <p id ...