mini2440通过u-boot+跳线更新supervivi为superboot

目录

1.事情起因

2.探索过程

3.准备条件

4.u-boot源码修改 

4.1将norflash的地址修改到bank1

4.2小插曲

4.3修改S29AL016J70TFI02扇区擦除代码(可选)

4.4修改S29AL016J70TFI02的sector/block定义(可选)

4.5修改flash初始化函数,更改扇区大小分配参数(可选)

5.编译,norflash启动通过supervivi的v选项烧录U-Boot到nandflash

6.硬件操作

7.U-boot操作烧写过程

 真他🐱的秀啊


1.事情起因

        友善官方开发的bootloader有两种-supervivi和superboot,两者均在出厂时被烧写到Mini2440的norflash中。但是,根据时间不同,不同板子烧写的bootloader不一样,其中superboot是较新版的bootloader,支持win10,而supervivi对应的上位机DNW已不支持win10,而且网传的最新上位机SuperVivi-Transfer-Tool虽然支持win10并且可用,但存在一些bug,比如我在跑裸机代码时1kB以下的bin文件就烧不进去,提示文件过大。

       于是我决定更新mini2440的bootloader。网上的方法均是使用JTAG调试器,但考虑到Jlink的价格,即便是便宜点的openJTAG也要几十块,考虑到后续调试器使用频率较低,所以没打算买专用调试器,打算捣鼓折腾一下。

2.探索过程

       1.首先我想到supervivi能不能自己烧录norflash或者升级,结果找了半天也没找到,而且古老的vivi也没有资料,于是放弃,这点吐槽一下,比不过U-Boot。

       2.DIY JTAG调试器,我手头上有几个STM32开发板,github上有人用STM32实现了CMSIS-DAP和DAP-Link,并且引出了JTAG调试接口,CMSIS-DAP配合openocd号称可以实现几乎所有芯片的烧写,一番折腾下来,发现确实能识别芯片,并且里面有mini2440的配置文件,但只能烧到nandflash,而且折腾了半天也没搞出来,估计需要改一些配置,但考虑到openocd门槛有点高,就放弃了。

       2.使用系统总线烧写,mini2440引出了系统总线,当时想着手上有一块探索者STM32F4,想想能不能通过总线外接的方式通过STM32F4直接烧写norflash,后面发现我想多了。

         看上图,norflash的引脚中,地址总线只引出了LADDR0~LADDR6+ LADDR24,而且nGCS0也没引出来,所以这个方案不可行,这里再吐槽一下板子的设计者。

        3.用U-boot更新norflash,目前网上有这种操作,但都是先将U-boot烧录到norflash启动(搞个鬼),不过我发现S3C2440的地址分配特性决定的,如下

        这意味着如果我将U-Boot从nand启动那无法访问bank0的norflash。

       不过并非完全不可行,U-boot中其实是支持了norflash的读写和擦除指令的,如果能把norflash接到bank1,那不就完事了,最简单的方法就是把nGCS0和nGCS1连起来

       不过这里有个遗憾,他喵的nGCS0居然没引出来,这下就不能用杜邦线直插连接了,需要从芯片上的引脚引出线来,方案3得到了成功,具体见下文。

3.准备条件

        mini2440(norflash里面有Bootloader),USB转232(转TTL也行),杜邦线,芯片探针(若条件实在受限可找个兄弟拿杜邦线抵着引脚上),串口调试工具(比如SecureCRT)

4.u-boot源码修改 

        源码取自Mini2440配套光盘,【申嵌视频】-S7或者【申嵌视频】-S3,FriendlyARM-2440-DVD里面也有源码不过尚未移植,这里使用他们移植好了的源码,tekkamanninja也可用不过我没有测试。

4.1将norflash的地址修改到bank1

修改此处,将norflash的地址修改到bank1(0x08000000)

修改的参考如下图(摘自S3C2440芯片手册)

        其实就是把flash改到了bank1所在的地址 

4.2小插曲

        光盘里U-boot源码内norflash的擦除实现是有问题的,我一开始没发现,下面的测试过程中,测试通过后没有擦除直接就开写了,结果把norflash的0地址的1字节数据给改了,推测norflash只能从1写到0,偏偏改了1字节后提示没有擦除,然后执行擦除指令卡死。这时候有点慌,认为u-boot擦除的实现有问题,决定先看看supervivi有没有影响,结果因为0地址的1个字节数据给改了,supervivi挂了,不过好在U-boot能写Nandflash,可以实现自刷写,不然就变砖了。

4.3修改S29AL016J70TFI02扇区擦除代码(可选)

norflash芯片为S29AL016J70TFI02的,经测试读和写均可行,擦除不行,还需要继续修改。

参看S29AL016J70TFI02数据手册,擦除时序如下

源码中对应如下:

注意最后那个CMD_ERASE_CONFIRM,将该宏定义改为0x30,也不知道为什么之前是0x50

4.4修改S29AL016J70TFI02的sector/block定义(可选)

从S29AL016J70TFI02的数据手册中

从上图可以看到:共35个Sector,前4个Sector的大小分别为16KB,8KB,8KB,32KB,后31个扇区的大小都是64K,加起来总共2Mbyte,修改扇区参数如下:

将上面的CONFIG_SYS_MAX_FLASH_SECT改为35

4.5修改flash初始化函数,更改扇区大小分配参数(可选)

根据上一节的sector分布,源码修改如下

可以看到上面有现成的,去掉条件编译,把1601的代码用过来,去掉#else段的代码

(解释一下,这里实际修改的是:将#else段的代码删除,然后去掉#ifndef 1601和#endif)

5.编译,norflash启动通过supervivi的v选项烧录U-Boot到nandflash

       略,也可以通过U-boot烧写自己到Nandflash,具体参看光盘里的手册

        编译器是用光盘里面提供的gcc,非最新版本

6.硬件操作

将norflash的CE引脚接到mini2440系统总线接口的nGCS1

使用探针将引脚连接(淘宝中这家店探针可支持0.3mm的引脚间距

也可使用杜邦线(稳定性不保证),个人尝试过用cmp命令读取norflash,在用杜邦线抵住引脚的条件下可正常读取

该芯片间距约为0.5-0.2≈0.3mm,见下图

 

 连接图如下

此处建议用万用表测量是否连接或者和旁边引脚短路

7.U-boot操作烧写过程

Nandflash启动U-boot,串口输入任意字符进入控制台

首先查询flash信息,验证是否无误

flinfo

先下载supervivi-128M,验证串口下载和norflash读取是否正常

loadb

将下载的和norflash原来的内容进行对比

cmp.b 0x08000000 0x30008000 0x3cefc

留意下第三个长度参数是16进制,对比无误

容易发现supervivi大小只有249596字节≈243kB,连1M都没达到

先尝试将supervivi下载到norflash后1M的空间试试

 从前面flinfo执行的结果可以看到,后面1M未处于保护状态,先擦除后1M区域

erase 08100000 +100000

 将0x30008000开始的supervivi共249596字节写入到norflash的后1M开始的区域,注意用16进制

cp.b 0x30008000 0x08100000 0x3cefc

尝试对比看看是否烧录成功

 使用crc32命令计算校验

crc32 0x08100000 0x3cefc

 PC端计算校验值

校验成功,但还需要考虑是否能擦除,此处建议执行擦除指令,因为教程光盘里给的code擦除指令死机!事后发现S29AL016J70TFI02型号的norflash问题

执行指令擦除

erase 08100000 +100000

检查擦除是否可行

md.b 0x08100000 100

这里看到擦除成功了,如果擦除失败那就停止继续操作,否则norflash的bootloader变砖,可以返回前面看看S29AL016J70TFI02代码那里是不是对SST39VF1602有用,因为我查到SST39VF1602的擦除时序如下

真巧啊!如果此处擦除卡死,参看下前面可选的源码修改部分

接下来准备烧录superboot到norflahs 0 地址处,实现bootload升级,谨慎操作!!

串口下载superboot

loadb

校验一次(注意后面长度用16进制)

crc32 0x30008000 0x40000

 PC端superboot的校验值

 OK,准备烧写,此处再警告一次,操作需谨慎!!!

取消norflash写保护并查看是否取消成功

protect off all

flinfo

擦除并烧写superboot(最后警告

erase 0x08000000 +0x40000

cp.b 0x30008000 0x08000000 0x40000

 校验一次

crc32 0x08000000 0x40000

烧写完毕,断开杜邦线,从norflash启动吧

经过一系列驱动安装之后,连接成功

 真他🐱的秀啊

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值