S19文件格式解析

本文详细解析S19文件格式的结构与校验机制,包括记录类型、长度、地址和校验字段的作用及计算方法,适用于嵌入式系统开发中程序烧录前的数据验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

S19文件每行数据组成

说明类型长度 N地址 数据校验
字符串个数224/6/8N*2-(4/6/8)-22

类型

pS19FileFormat->DataType

用于描述记录类型: S0,S1,S2,S3,S5,S7,S8,S9

长度

用于记录地址+数据+校验所占字节数0x00~0xFF

地址

pS19FileFormat->AbsAddr

地址长度和作用由类型决定:

S0 :地址占2个字符串,用0x0000占位,此行表示程序的开始,不需烧入memory

S1 :地址占4个字符串,标记后面数据所在起始地址。

S2 :地址占6个字符串,标记后面数据所在起始地址。

S3 :地址占8个字符串,标记后面数据所在起始地址。

S5 :地址占2个字符串,包含了先前传输的S1、S2、S3记录的计数。没有数据。

S7 :地址占8个字符串,标记程序开始执行地址,文件结束。没有数据。不需烧入memory。

S8 :地址占6个字符串,标记程序开始执行地址,文件结束。没有数据。不需烧入memory。

S9 :地址占2个字符串,标记程序开始执行地址,文件结束。没有数据。不需烧入memory。

校验

S9030000FC为例

Sum=0x03+0x00+0x00=0x03

CheckSum=0xFF-Sum=0xFC

//S9030000FC
char Str[]="S9030000FC";
char tempStr[1024];

strcpy(tempStr, &(strchr(Str, 'S'))[2]);

//tempStr除去\n的大小
DataLen = strcspn(tempStr, "\n");//原有代码Str是从文本里读出的所以会有“\n”
if (DataLen > 512)//S19文件一行去除类型的字符串个数最多FF*2+2=512
{	
    LOGERROR("S19Format Error %d Line Data too long", pS19FileFormat->CurrentLine);
    return 0;
}

HexStrToByte(tempStr, tempByte, DataLen);
//tempByte已经删除了类型

//S19文件每行的CheckSum
pS19FileFormat->CheckSum = tempByte[tempByte[0]];

//计算数据实际CheckSum
for (i = 0; i < tempByte[0]; i++)
{
    tempCheckSum += tempByte[i];
}

tempCheckSum = 0xFF - tempCheckSum;

if (tempCheckSum != pS19FileFormat->CheckSum)
{		
    //Error;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值