本发明涉及嵌入式系统固件量产技术领域,特别涉及嵌入式系统基于USB烧写的固件数据的场景。

背景技术:

嵌入式产品已广泛应用于社会的各行各业,在产品生产过程中,需要将嵌入式系统固件量产到产品设备中。 固件(Firmware)作为操作系统目标代码储存在Nand Flash、Nor Flash、Emmc等存储介质中,固件是固化在存储介质的程序,是嵌入式产品的灵魂,决定了产品的设备的功能和性能。

通常固件数据写入到嵌入式产品后无法被用户直接读出或者修改,如果在烧写过程中数据出现异常,就会导致整个产品无法正常启动,所以保证烧写的固件数据安全可靠就显得非常重要。目前可以进行量产的固件数据烧写方式有USB方式,卡方式等,因为USB烧写方式可以实时显示量产进度,并且可以同时量产多个产品设备,是在不同类型产品量产时使用较多的一种方式。

但是传统嵌入式产品的固件烧写方式为了保证固件数据烧写到存储介质上的可靠性,在烧写数据时进行校验增拖慢了烧写速度,影响产线效率。为提升产品量产阶段的用户体验,特别是量产过程中固件的烧写数据的可靠性和烧写速度,同时方便产线工人进行量产状态跟踪,需要一种可靠快速的数据烧写方法。

技术实现要素:

本发明提出了一种可靠快速的USB量产烧写方法,能有效解决传统USB量产方式的低速和可靠性的问题,生产效率明显提高。

本发明要求处理的目标系统满足以下条件:(1)USB主机与设备之间USB连接状态正常,(2)USB主机的USB驱动可以正常枚举USB设备,(3)要烧写的固件数据支持设备介质类型。

本发明采用技术方案是:数据传输采用应用层和传输层两层确认的握手方式进行传输,每层的数据传输都要经过命令传输,数据传输、状态传输三个传输阶段,通过两层确认三个阶段的方式建立可靠的数据传输通路,进行快速有效的数据传输。

首先通过应用层命令AC(Application Command)建立数据传输通路,在确认命令传输完成后,USB主机开始应用层数据AD(Application Data)传输,传输方向可读可写,所有的固件烧写数据就是通过本阶段传输完成,传输方向为写,数据传输可以通过若干次完成,应用层数据传输完成后,就要对USB设备进行应用层状态AS(Application Status)传输来获取设备的状态信息,进一步确认数据传输完成。应用层命令传输时,USB主机首先发送传输层命令TC(Transfers Command),命令固定长度为16byte,USB主机对传输层命令TC进行判断,传输层命令TC发送完成之后,接着发送传输层数据TD(Transfers Data),也就是AC命令的具体内容,传输层数据TD发送完成之后,接着USB主机获取设备端传输层状态TS(Transfers Status),应用层数据传输AD和应用层状态传输AS这两个阶段与应用层命令AC传输阶段的过程相同,只是内容不同。

本发明的有益效果是:(1)提高数据的可靠性,通过两层握手三个阶段传输的方式,每次数据传输都会经过多次握手和数据可靠性判断,保证了数据的正确性。(2)无须进行数据校验,减少了设备端对传输数据校验的工作量,提高量产烧写的速度,提升产线的生产效率。(3)采用分层分阶段的数据传输方法,也便于进行二次开发,如果需要增加新的功能,只需要在,只需要在应用层命令阶段进行扩展,与其他阶段或层次具有较低的耦合性。(4)本发明实现的数据传输方式以较小的握手数据(每次AC为32 Byte,TC,TD、AS均为16 Byte),保证了固件数据的大数据量的传输(每次可以传输数据量,理论上没有限制,与业务逻辑相关),提升了传输数据的有效性。

附图说明

图1:USB主机与设备之间数据传输的层次结构。

图2:USB数据传输的完整流程。

图3:应用层命令传输阶段的详细流程,是图2中命令传输的实现细化描述。

图4:应用层数据传输阶段的详细流程,是图2中数据传输的实现细化描述。

图5:应用层状态传输阶段的详细流程,是图2中状态传输的实现细化描述。

图6:应用层命令AC的成员结构,长度为32 Byte,包括magic魔数必须为“ AC ”、cmd 命令,tag 流水号等。

图7: 应用层状态的成员结构,长度为16 Byte,包括magic魔数必须为“ AS ”、mark标志,必须为0xffff,tag 流水号,设备状态等。

图8: 传输层命令的成员结构,长度为16 Byte,包括magic魔数必须为“ TC ”、 size本命令结构的长度必须为16 Byte,dir 传输方向,tag 流水号,len要传输的数据长度等。

图9: 传输层状态的成员结构,长度为16 Byte,包括magic魔数必须为“ TS ”、 tag 流水号,设备状态等。

具体实施方式

本发明的具体实现,详细描述如下:如图1所示,数据传输采用应用层(S104)和传输层(S108)两层确认的握手方式进行传输,每层的数据传输都要经过命令传输,数据传输、状态传输三个传输阶段,应用层的三个传输阶段为:应用层命令传输AC(S101)、应用层数据AD(S102)、应用层状态AS(S103)三个传输阶段,传输层的三个传输阶段为:传输层命令TC(S105),传输层数据TD(S106),传输层状态TS(S107)三个传输阶段,根据USB总线的协议,PC作为USB主机(S109)完全掌握着数据传输的主动性,对USB设备的读写操作均由USB主机发起。

整体的数据传输实现流程如图2所示,USB主机通过发送应用层命令AC(S201)建立数据传输通路,在确认应用层命令AC传输完成后,USB主机判断是否要进行数据传输(S202),如果需要进行数据传输,开始应用层数据传输(S203),传输方向可读可写,所有的固件烧写数据就是通过本阶段传输完成,传输方向为写,并且可以进行多次传输,在判断数据传输完成后(S203),USB主机就要获取设备应用层状态AS来读取获取设备状态信息(S205),数据传输完成。

应用层命令传输AC传输的具体实施方式为,需要再结合流程来描述,具体如图3所示,数据开始传输(S301),首先进入应用层命令传输AC阶段(S302),USB主机发送传输层命令TC(S303),命令固定长度为16byte,包含命令标识、magic、数据传输方向、流水号,要传输应用层命令AC长度等(S305),数据传输方向为写数据,传输层命令TC发送完成之后,接着发送传输层数据TD,也就是AC命令(S304)的具体内容,传输层数据TD发送完成之后,接着USB主机获取传输层状态TS,里面包含了USB设备端的要返回给USB主机的状态信息,USB设备此时要去判断USB主机发送的传输层命令TC的magic是否为“ TC ”(S305),数据传输方向必须为写,然后再去判断传输层数据TD(即AS命令)的命令格式是否支持(包括magic是否为“ TS ”, cmd是否在约定的支持列表中, tag流水号是否与TC流水号相同(S306)),如果都正确则返回设备就绪的状态信息给主机(S307),否则的话就返回Error的状态信息给主机(S308),USB主机收到输层数据TS命令后(S309),除了要判断设备的状态信息外,USB主机还要判断magic是否为“ TS ”,tag流水号是否与传输层命令TC相同,如果状态信息、magic、流水号三者任一只要不相同就会停止传输(S310),完全相同的才会进行执行数据传输AD传输阶段(S312),否则的话设备状态错误,传输中止(S311)。

应用层数据AD传输阶段具体实现流程如图4所示,应用层数据AD传输开始(S401)时,USB主机首先是否要进行数据传输(S402),如果没有数据要传输,只需要小机端执行命令即可,数据传输结束(S411),如果需要数据传输,发送传输层命令TC(S403),命令固定长度为16byte,包含命令标识、magic、数据传输方向、流水号,要传输的数据长度等,数据传输方向可以是读数据也可以是写数据,传输层命令TC发送完成之后,接着发送传输层数据TD,也就应用层数据AD的具体内容,USB主机首先判断是否是写数据(S404),如果需要写数据,则有主机发送数据(S406),应用层数据传输AD可以分为若干次传输完成(S407),如果需要读数据,USB主机接收数据(S405),读数据也可以分多次来传输(S408),传输完成后,接着USB主机获取传输层状态TS(S409),里面包含了USB设备端的要返回给USB主机的状态信息,USB设备此时要去判断USB主机发送的传输层命令TC的magic是否为“ TC ”,还要判断数据传输的总长度是否与传输命令TC中约定的长度是否相等(S410),如果都正确则返回设备就绪的状态信息给主机,否则的话就返回Error的状态信息给主机,USB主机收到传输层状态TS命令后,要对其进行判断,如果设备状态正常进入应用层状态传输AS阶段(S411),否则状态异常传输中止(S412)。

应用层状态AS传输阶段具体实现流程如图5所示,应用层状态AS传输开始(S501)时,USB主机首先发送传输层命令TC(S502),命令固定长度为16byte,包含命令标识、magic、数据传输方向、流水号,要传输的数据长度等,数据传输方向读数据,传输层命令TC发送完成之后,接着接收传输层数据TD,也就应用层状态AS(S503),对AS的内容进行有效性判断,具体包括magic魔数(“ AS ”),tag流水号,设备状态等(S504),如果应用层状态无效,数据传输中止(S507),如果各个参数状态有效,USB主机接收设备端传输层状态TS(S505),USB主机接收到传输层状态TS后,判断传输层状态TS的魔数、tag流水号、设备状态是否正常(S506),如果正常状态传输完成,并且整个传输过程正常完成(S508),否则数据传输中止,传输失败(S507)。

并注册烧写钩子 获取启动介质类型_一种基于USB烧写的数据传输方法与流程相关推荐

  1. 并注册烧写钩子 获取启动介质类型_鸿蒙OS开源代码精要解读之—— 系统服务框架子系统(服务启动)...

    鸿蒙OS开源代码精要解读之-- 系统服务框架子系统(服务启动) 作者介绍: 中科创达OpenHarmony研究组 说明: 中科创达OpenHarmony研究组第一时间对https://codechin ...

  2. 并注册烧写钩子 获取启动介质类型_Spark Application的注册 源码剖析

    Spark提交任务最终是以Application方式注册进去的,每个在Spark上运行的job以Application做为单元存在.同时注册到yarn资源管理器中也是同样的Application.那么 ...

  3. 并注册烧写钩子 获取启动介质类型_PyTorch中对张量登记注册反向传播的钩子函数,并展示调用顺序...

    总结说明:代码实验表面,反向传播计算梯度时的执行顺序是和前向计算相反的.这一点由钩子函数的执行顺序可以观察到,并且由保存梯度的列表中的内容顺序可以推断出来. 代码实验展示: import torch ...

  4. 安卓获取摄像头帧率_一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法...

    一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法 [技术领域] [0001 ]本发明涉及通讯技术领域,尤其涉及一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法. ...

  5. 安卓获取摄像头帧率_一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法_2015109767475_说明书_专利查询_专利网_钻瓜专利网...

    技术领域 本发明涉及通讯技术领域,尤其涉及一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法. 背景技术 多媒体终端基于android平台,在会议应用等场景中,需要使用外置的USB摄 ...

  6. java头像交互式差分演变_一种基于交互式差分进化计算的用户知识需求获取方法与流程...

    本发明属于知识服务领域,具体涉及一种基于交互式差分进化计算的用户知识需求获取方法. 背景技术: 在多数企业拥有庞大的知识数量和优质的知识资源的情况下,如何利用推送系统将知识主动推送给设计人员以提高企业 ...

  7. java烧麦的小小食完_经典早餐小食烧麦,样子小巧可爱,做法也特别简单

    经典早餐小食烧麦,样子小巧可爱,做法也特别简单 烧麦是很常见的一种早点,我平时也喜欢吃,前几天还去吃了,现在一个烧麦要卖到将近两块钱了,也是不便宜.烧麦不仅仅是吃起来软糯,里面除了糯米之外还添加了其他 ...

  8. 顺序写磁盘比随机写内存_深入理解 linux磁盘顺序写、随机写

    一.前言 随机写会导致磁头不停地换道,造成效率的极大降低:顺序写磁头几乎不用换道,或者换道的时间很短.本文来讨论一下两者具体的差别以及相应的内核调用. 二.环境准备 三.fio介绍 通过fio测试,能 ...

  9. java写航显系统_一种机场航显系统的制作方法

    本实用新型属于航显设备技术领域,具体地说,涉及一种机场航显系统. 背景技术: 机场做为国家交通网络的组成部分之一,它的运行成本极高.巧始投资较大.业务种类复杂.要求为乘客提供良好的服务保障.机场的建设 ...

最新文章

  1. Struts09---验证框架
  2. SAP CRM One order appointment duration table
  3. ASP.NET Core官方文档+源码,这样学效率高10倍!
  4. 终于把结婚照片做成了MTV
  5. Asp .Net Mvc在DeBug模式下设置自定义IP
  6. Sql Server 行转列学习 根据学生表、课程表、学生成绩表统计每个学生的各科成绩和他的总成绩、平均成绩...
  7. TensorFlow 1.11.0正式版发布了,强力支持Keras
  8. 每天学一点Flash(55) 认识类的结构
  9. 对香草冰淇淋过敏的汽车
  10. 股票数据下载-下载股票历史数据
  11. SRS:软件需求规格说明书
  12. PHP连接MySQL 8.0报错的解决办法
  13. git使用kdiff3合并乱码问题
  14. html生成word页眉图片不显示,Word首页不显示页眉怎么设置
  15. spring boot官方配置
  16. 无线信道:地波天波视距传输的特点和区别。
  17. 天冷就要大口吃肉肉~python采集周边烤肉店数据【附代码】
  18. 【springboot】5、lombok
  19. 两分钟了解数据封装和解封
  20. Java中加载配置文件方式的总结

热门文章

  1. uniapp - 电商优购项目
  2. 生物医学知识库/知识图谱(英文+中文)盘点
  3. 分享诗集-中国原创诗歌创作分享中心,欢迎博客园喜欢诗词的加入【诗词在线】...
  4. 区块链学习(8) EOS环境安装和智能合约部署实战(绝对干货!)
  5. MTK屏蔽谷歌服务报错对话框KK
  6. 2016如果你想改变命运,请花几分钟读一下:(网上创业赚钱项目)
  7. DDraw的离屏blt
  8. Rocket-api 调研
  9. python pika 消费mq basic_get方法
  10. 20160218.CCPP体系具体解释(0028天)