【迪文串口屏串口升级逻辑】

数据帧结构:

PS:下文举例数据都是不带校验的

升级流程简述:

整个升级流程是将要升级的文件用二进制读取后用过串口先写到0x8000的缓存地址中,当文件全部发送完成后,通过对0x00AA地址写操作,完成对程序的更新操作,最后读取0x00AA地址数据获取程序是否更新完成。注意缓存最大为32K的空间,当要升级的文件大于32K时需要分多次从缓存中写入数据。对于多个文件的升级只需要依次升级即可。升级完后调用重启指令(5A A5 07 82 00 04 55 AA 5A A5)就能生效。

一、小于等于32K文件更新

1.1、发送数据到0x8000的缓存地址

5A A5 F3 82 80 00 ...

5A A5:数据帧头。

F3:数据长度

82:写数据

80 00:缓存地址

...:实际文件二进制读取的数据

由于发送的数据区最大只能发送249Byte,扣除指令和地址占用的空间,实际发生的升级文件有效大小最大为246Byte,这里我们取每次发送240Byte有效数据(每次发送的数据长度就为0xF3=243),最后一包数据根据实际大小发送。

由于迪文屏幕的每个地址是存放2Byte数据,所以每包数据地址增加为0x78(120)Byte,例如第一包发送的地址是0x8000,第二包发送的地址就要是0x8078以此类推。

屏幕收到数据后给出应答:5A A5 03 82 4F 4B

1.2、将缓存数据写到Flash

5A A5 0F 82 00 AA 5A 02 00 68 80 00 17 70 00 00 00 00

5A:0x5A=启动一次外部存储器读写操作,CPU 操作完清零。

02:0x02操作模式,0x01=读数据 0x02=写 32Kbytes 数据块。

00 68:32Kbytes 存储器块地址,0x0000-0x01FF,对应整个 16Mbytes 存储器。该值根据实际要写到的数据地址修改。

80 00:更新数据保存在数据变量空间的首地址,必须是偶数。

17 70:本次操作完成后延时等待下一次写操作的时间,单位为 1mS。抓取官方串口烧写工具这里选择0x1770(6000)mS=6S。

00 00 00 00:未定义。

升级的整个过程只有存储器块地址需要修改,其他值都可以固定不变。

存储器块地址需要更据libraryAdd*256/32进行换算,比如要更新13号库的数据,存储器块地址就为13*256/32=104(0x68),对于大于32K的文件,需要按地址顺序写入数据。至于库号数,编译完后文件名前面的数字就是库号。

屏幕收到数据后给出应答:5A A5 03 82 4F 4B

1.3、将查询程序更新是否完成

通过读取0x00AA地址数据确定Flash更新是否完成

当Falsh更新中时会应答:5A A5 06 83 00 AA 01 5A 02

当Flash更新完成会应答:5A A5 06 83 00 AA 01 00 02

1.4、32KByte文件的数据发送流程

##发送数据到0x8000的缓存地址

S:5A A5 F3 82 80 00 ...

R:5A A5 03 82 4F 4B

S:5A A5 F3 82 80 78 ...

R:5A A5 03 82 4F 4B

......

S:5A A5 F3 82 BF 48...

R:5A A5 03 82 4F 4B

S:5A A5 83 82 BF C0...

R:5A A5 03 82 4F 4B

##将缓存数据写到Flash

S:5A A5 0F 82 00 AA 5A 02 00 68 80 00 17 70 00 00 00 00

R:5A A5 03 82 4F 4B

##将查询程序更新是否完成

S:5A A5 04 83 00 AA 01

R:5A A5 06 83 00 AA 01 5A 02

S:5A A5 04 83 00 AA 01

R:5A A5 06 83 00 AA 01 00 02

##重启屏幕完成升级

S:5A A5 07 82 00 04 55 AA 5A A5

R:5A A5 03 82 4F 4B

二、大于32K文件更新

对于大于32K的文件,我们需要先把文件数据拆分成多个小于等于32K的数据块,之后按照上面“于等于32K文件更新”的操作流程逐个将数据块写入Flash中,待整个文件写入完成后重启屏幕完成更新。

PS:通过官方的串口烧录工具抓包得知,官方工具是从文件的最后一包数据开始发送的,即发送流程为:数据N --> 数据N-1 --> ...... --> 数据2 --> 数据1。由于我们每块数据烧写时都带有相应的地址,我们可以按顺序发送。

 

2.1、数据流程(更新22号库文件)

##发送32K数据1到0x8000的缓存地址

......

##将缓存数据写到Flash

S:5A A5 0F 82 00 AA 5A 02 00 B0 80 00 17 70 00 00 00 00

R:5A A5 03 82 4F 4B

##将查询程序更新是否完成


##发送32K数据2到0x8000的缓存地址

......

##将缓存数据写到Flash

S:5A A5 0F 82 00 AA 5A 02 00 B1 80 00 17 70 00 00 00 00

R:5A A5 03 82 4F 4B

##将查询程序更新是否完成


##发送32K数据3到0x8000的缓存地址

......

##将缓存数据写到Flash

S:5A A5 0F 82 00 AA 5A 02 00 B2 80 00 17 70 00 00 00 00

R:5A A5 03 82 4F 4B

##将查询程序更新是否完成


##发送32K数据4到0x8000的缓存地址

......

##将缓存数据写到Flash

S:5A A5 0F 82 00 AA 5A 02 00 B3 80 00 17 70 00 00 00 00

R:5A A5 03 82 4F 4B

##将查询程序更新是否完成


##重启屏幕完成升级

S:5A A5 07 82 00 04 55 AA 5A A5

R:5A A5 03 82 4F 4B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值