SSU_vendor数据烧录


1. USB_Write_SN_Tool


1.1. 简介

USB_Write_SN_Tool是sigmastar开发的一款windows工具,用于工厂烧录SN、KEY、MAC等一些厂商信息到存储介质中,这块存储区域后面称为vendor区,而这些存储的信息后面称为vendor_id。工具采用USB连接的方式让PC机与板端uboot通信,将命令传给uboot去执行,从而对vendor区进行读写擦操作,此时uboot应处于ufu mode。

在kernel下user层app通过标准的存储介质操作接口,也可以对vendor区进行读写擦操作。

可以通过kernel cmd重启切换到uboot ufu mode,再通过USB_Write_SN_Tool给uboot 下命令退出ufu mode并重启到kernel。


1.2. uboot配置

uboot要与USB_Write_SN_Tool通信,需要开启相关config

将图中框住并打开的config打开,type选择对应的介质。


1.3. 存储格式和相关配置

1.3.1 在FLASH中的存储

vendor区中所有的vendor_id都存在一个block里,每个vendor_id的偏移地址为id_num * 128bytes。uboot会通过分区size判断出分区共几个block,操作之前会判断是否为坏块,若是坏块则把操作的起始地址往下移一个block。所以vendor区制作需要预留若干个block用于防止坏块.每个vendor_id在flash中的存储格式如下:

typedef struct
{
    char magic[16]; //magic是用于校验用的头部字符串,客户可以修改这部分信息
    int id_num; //vendor_id序号,如0:SN,1:MAC... USB_Write_SN_Tool的id_num根据界面中的顺序从上往下依次递增
    int len;  //vendor_id的有效长度
    char data[64] //vendor_id有效数据
}vendor_id

nand默认的分区config中分配了6个block,由于nor空间较小且不存在坏块,nor默认的分区config中只分配了1个block。

由于通常情况下vendor区要求烧录升级不被改写,所以IMAGE_LIST和OTA_IMAGE_LIST中不会加入此分区。

1.3.2 在EMMC中的存储

因为emmc中每个block大小只有512Bytes,所以vendor区中每个vendor_id都存在一个block里,从《eMMC使用参考》文档中可知0x40至0x278 blk是reserved,我们的工具默认取0x50至0x8F总共64个block作为vendor区,即最多可以存64个vendor_id。vendor区不需要用户创建和分配,已经在制作image的时候预留好了裸数据区,每个vendor_id存储格式和FLASH的类似,格式如下:


1.4. uboot ufu mode进入方式

USB_Write_SN_Tool需要跟ufu mode的uboot通信。

以下提供几个进入uboot ufu mode的方式:

  • 在kernel下执行/etc/fw_setenv ota_upgrade_status 1;reboot
  • 在uboot下执行setenv ota_upgrade_status 1;saveenv;reset;
  • 在uboot下执行ufu;

以下提供几个退出uboot ufu mode的方式:

  • USB_Write_SN_Tool连接成功情况下,点击保存重启;
  • ctrl+c退出之后,执行setenv ota_upgrade_status 0;saveenv;reset;

1.5. USB_Write_SN_Tool使用说明

工具包:USBWriteSNToolV1.0.0.4.zip

1.5.1 文件列表说明

  1. Config文件夹:vendor_id的ini配置文件
  2. Driver文件夹:工具配置文件
  3. Log 文件夹:日记文件,每天保存一份
  4. USBWriteSNTool.exe:工具执行文件
  5. vendorLib.lib:windows工具二次开发的lib
  6. IVendor.h:lib对应头文件
  7. USBWriteTool_Source_Code.zip:工具源码,二次开发可参考的code

由于客户生产场景、流程不同,对烧录界面的需求也不同,为了满足客户的客制化场景,USB_Write_SN_Tool提供了二次开发的lib,里面包含了与uboot通信的接口,Source Code为客户提供了调用参考。

1.5.2 升级界面

  1. 设置、配置选项
  2. magic是用于校验用的头部字符串,写入和读取时数据要一致,若不一致则数据无效
  3. 各vendor_id的前缀,一般用于同一批次产品前部分数据固定不变的场景
  4. 各vendor_id可变数据部分,只支持输入数字
  5. 对需要进行相同操作的vendor_id进行勾选
  6. 烧写完的产品必须点击此按钮,会把环境变量ota_upgrade_status设置为0,否则无法退出ufu mode,不能正常开机
  7. 读写擦操作,写入到vendor区的数据是前缀+可变数据,举例:前缀设置SIG,可变数据设置123,写入的Data为SIG123,写入Data的长度要和设置界面配置的DataLength一致,否则会报错
  8. 擦除整个vendor区
  9. 日志展示
  10. 状态栏,显示是否成功连接设备

1.5.3 设置界面

可以在Config文件夹中的各个ini文件进行预配置

  1. 设置vendor_id的前缀
  2. 写入的有效数据长度
  3. 配置vendor_id每写入一次可变数据输入栏自动增加的数值,适用于同一批设备vendor_id连续增加的场景,不使用自增功能时设置为0

2. vendor_burn demo


2.1. 简介

由1.1节介绍的,user层app通过标准的存储介质操作接口,可以对vendor区进行读写擦操作。这边提供user层demo:vendor_burn.zip

编译操作说明请参考压缩包内readme