AK3761D方案SPI NAND批量烧片

这篇博客记录了在AK3761D芯片上使用YAFFS2文件系统,配合硬件ECC的NAND烧录过程中遇到的问题及其解决方案。包括:1) 烧录工具导致的UBOOT头部差异,需要从NAND中读取并替换;2) YAFFS2文件系统的OOB数据处理,需要填充0xFF;3) 烧录工具对YAFFS2 OOB数据的影响,需要特定位置填充0xFF;4) SDK默认配置未预留坏块,需要修改UBOOT和ENV分区参数。
摘要由CSDN通过智能技术生成
背景:
AK3761D + SPI NAND
文件系统: YAFFS2   
ECC方式: 硬件ECC
NAND批量烧录工具:希尔特,硕飞等等

思路: 编译所有镜像,按照分区大小及起始位置拼接,之后烧录一个完整的镜像burn.bin。
简单记录调试关键历程
问题1: 安凯自带的烧录工具burntool烧录uboot后,会写一些配置信息到nand特定位置,
修改区间就是uboot分区里面前512字节。因此实际上NAND里面的uboot程序与编译的
uboot镜像有差异。需要用NAND里面的uboot。 通过burntool回读uboot镜像, 替换编译
镜像的前512字节。

// Uboot 512 Header
    uboot = fopen("SPL.bin", "rb");
    if (uboot == NULL) {
        printf
            ("\033[1m\033[45;33m 512 uboot.bin burn  file not ..... \033[0m\n");
        return 1;
    }
    fread((char *) ubootbuf, sizeof(char), 512, uboot);
    for (j = 0; j < 512; j++) {
        printf("0x%02X,", ubootbuf[j]);
    }

问题2: 编译出来yaffs2文件系统是带OOB数据的,而普通镜像不带OOB数据。
因此我们需要把所有非文件系统镜像,以每2k自节填充64自节0XFF(根据NAND规格)
 memset(inp, 0xff, burnimg[i].size);
 memset(outp, 0xff, tmpsize);
 fread(inp, sizeof(char), burnimg[i].size, burnimg[i].old);
 /* 0x800 fix 64byte  0xff */
  for (j = 0; j < burnimg[i].size - 2048; j += 2048) {
      memcpy(&outp[j + 64 * j / 2048], &inp[j], 2048);
  }
  // uboot replace 512 header
  if (burnimg[i].index == 1) {
      memcpy(&outp[0], &ubootbuf[0], 512);
  }
问题3: 编译出来yaffs2文件系统与实际烧片yaffs2 oob数据仍有差异,安凯烧录工具会自己跳转特定位置。
 fread(outp, sizeof(char), burnimg[i].size, burnimg[i].old);
   /* 0x800 replace 4byte 0xff  */
   for (j = 0; j < burnimg[i].size - 0x1000; j += (2048 + 64)) {
       memcpy(&inp[0], &outp[2048 + j], 28);
       outp[2048 + j] = 0xff;
       outp[2048 + j + 1] = 0xff;
       outp[2048 + j + 2] = 0xff;
       outp[2048 + j + 3] = 0xff;
       memcpy(&outp[2048 + j + 4], &inp[0], 28);
   }

  问题4:默认SDK默认uboot env dtb分区都没有做坏块预留。建议修改下,需要修改
  uboot源码及env分区参数。
  include/configs/anycloud_ak37d.h
  先初步记录到这
烧写固件用的软件amlogic最新版的USB_BurningTool_v2.1.2.13支持64位cpu,之前的版本统统不能导入固件。刷机还是用两头公的USB线,刷机软件里面带有刷机驱动,刷机方法:开软件,按reset插USB。 解包打包定制工具我也好不容易找到了,ROM客制化工具也必须使用amlogic最新版的CustomizationTool_setup_v2.0.5以上版本 amlogic晶晨S905rom固件解包打包定制工具CustomizationTool_setup_v2.0.7  有了它,就能修改其他盒子S905-B的固件用于天猫魔盒M13 晶晨s905系列安卓6.0.1通刷固件20171210更新:(以下为搬砖) 1、本固件为线刷包,下载后解压开即为晶晨s905系列安卓6.0.1体验版通刷固件,USB烧录,第一次启动比较慢,耐心等待。正常23秒开机, 系统干净(已去除XX OTA后门程序)。目前只支持eMMC闪存,默认配置江苏移动Q5魔百和遥控器,如需修改解包替换etc目录下的remote1.conf, 想支持多遥控,自行修改内核,烧录时尽量不要擦除bootloader,感谢bravo精心优化内核。 固件是基于ASOP、Uboot源码编译及第三方固件精心优化而来,非官方Logo和无运营商相关信息,未集成其他APK,系统纯净 其他优化自行体验,固件支持启动基于LibreELEC的Linux系统(如lakka)。开启S905满血状态,增加点播直播解码器。 链接:https://pan.baidu.com/s/1kV1kXJh 密码:m8f0 CustomizationTool_setup_v2.0.7(晶晨固件解包打包工具)链接:https://pan.baidu.com/s/10k7lt7gndGnDnq6d0QEA7Q 密码:xo8x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值