Novatek-loader开发总结

一、启动模式

1、硬件启动模式设计

在这里插入图片描述=注意有两个NDD和NBD
注意有两个NBD和NDD有两种,一种是flash页大小是2k,一种是4k,硬件设计启动模式的时候要注意,如果选错,sd卡烧写的时候,loader会烧进去,但是会烧到OOB区,然后都标记成坏块了,然后一直没办法从flash启动,下次烧写的时候会显示
BB(坏块)
R/W error
如果是2K的flash,配成4K的启动模式会打印
XMXM(不确定啥意思,还有其他的打印也会有,下一次烧写的时候就变成BB打印了)
R/W error
可以尝试将LD98529A.bin改为LD98529T.bin跳过烧录LD的步骤,直接烧录FW。跳过LD后,进入uboot,通过命令nand scrub 0 0x10000000(256M),将oob区一起擦除,重新烧。
在这里插入图片描述

2、启动模式打印说明

在这里插入图片描述

3、添加 spi-nand颗粒

LibExt\LIBExt_src\Ctrl_Flow\nand_ids.c
NAND_FLASH_DEV nvt_nand_ids[] = {
NAND_FLASH_DEV 这个定义不通型号有差异
添加内容1、560的loader,256M微邦flash
SPI_ID_NAND(0xEF, 0xAA22, 2048, 0x20000, SPINAND_QE_NONE, SPINAND_2_PLANE_NONE),
128Mflash
SPI_ID_NAND(0xEF, 0xAA21, 2048, 0x20000, SPINAND_QE_NONE, SPINAND_2_PLANE_NONE),
其他型号可能是
128M
SPI_ID_NAND(0xEF, 0xAA,0x21, 2048, 0x20000, SPINAND_QE_NONE, SPINAND_2_PLANE_NONE),
256M
SPI_ID_NAND(0xEF, 0xAA,0x22, 2048, 0x20000, SPINAND_QE_NONE, SPINAND_2_PLANE_NONE),
};
这两个要打开
LibExt\LIBExt_src\Ctrl_Flow\bl_func.c
在这里插入图片描述
LibExt\LIBExt_src\Ctrl_Flow\bl_u2.c
在这里插入图片描述

4、ddr的初始化表格

表格在这个,速率和大小在这里找不到的话,loader会编译失败
$ls -l Tools/ConfigRam/560/
在这里插入图片描述

ddr速率大小改这里,/Project/Model/ModelConfig_EMU_EVB.txt在这里插入图片描述
这个CHIP也要和cpu对上,不然会烧写失败

5、编译loader配置

1、产生不同的loader配置文件及作用
ModelConfig_EMU_EVB.txt 配置 STORAGEEXT
STORAGEEXT = NONE —> 最终编译文件 LD9856XA.bin;没有外部SDIO
STORAGEEXT = Sdio1 —> 最终编译文件 LD9856XA.bin;有外部SDIO,可以通过SD卡刷机等
STORAGEEXT = Usb —> 最终编译文件 LD9856XA.bin可重命名为UsbLD9856XA.bin;用于USB烧写模式时 FwUpgrade.exe 烧录工具 'Load WrLoader’界面 加载用
STORAGEEXT = Eth —> 最终编译文件 loader.bin;用于 网络烧写模式时,放到 ftp工具的当前目录下
STORAGEEXT = Uart —> 最终编译文件 LD9856XA.bin可重命名为UartLD9856XA.bin;用于Uart烧写模式 FwUpgrade.exe 烧录
2、编译
编译(小于1.0.004的版本)
cd na51089_loader_v1.00.000/MakeCommon
make clean
./make_combo_loader.sh //选择1.make NT98560 standalone loader(MODEL = EMU_EVB)
编译(大于等于1.0.004的版本)
cd na51089_loader_v1.01.004/MakeCommon
make clean
make release
编译之前最好确认loader里面LOADER_TYPE这个参数是否用了,主要影响这个,有的loader没判断这个

6、个别参数说明

[DRAM1_MUX] : Dram1 mux --> Dram controller 1
FB //4层板
UBT //2层板
TB //ddr正反叠
DRAM1_MUX = TB

DRAM1_CLK = 1866 —> ;DDR速率 1866对应DDR频率为1866x2=3732,也就是3733
DRAM1_DDR1_SIZE = 8192 —> Dram控制器1;DDR1表示低16位大小,单位Gb;基本上是向下兼容

7、sd卡烧写的时候如何配置检测管脚

1、SD卡的SD_CD脚如何修改
修改 Project\Model\Src\prj_main.h 的 DGPIO_CARD_DETECT 对应 GPIO

如果 SD卡硬件设计没有SD_CD信号,强制将检测函数返回true
Project\Model\Src\prj_main.c

_THUMB2 static BOOL prj_checkCardExist(void)
{
#if (STORAGE_EXT_TYPE == STORAGE_EXT_ETH)
return TRUE; // force ethernet probe DHCP server
#else

  •    return (gpio_getPin(DGPIO_CARD_DETECT) == 0 ? TRUE : FALSE);
    
  • return TRUE; //如果tf卡没有cd管脚,检测cd管脚需要强制返回true
    #endif
    }

2、SD卡cd检测管脚配置
从SD卡加载loader时,需要注意正确的设置CD管脚[56x为例]
\Project\Model\Src修改这个目录下的prj_main.h中的 DGPIO_CARD_DETECT (P_GPIO_17) 需要根据实际gpio管脚进行修改。
loader启动时先判断cd管脚,为低才会从sd卡中尝试读取LD和FW固件,如果TF卡插入管脚不正确的话,会导致SD卡插入升级功能无法使用。

注意:如果flash为空,会忽略cd管脚,强制从tf卡读取loader载入内存启动,但是loader启动后,如果loader中cd管脚设置的不正确,会导致无法进一步从tf卡中读取FW,然后报如下类型错误

no card insert

E:invalid dtb
load fdt failed

8、使用SD卡烧录固件提示NVT_LINUX_SMP_ONE:not support smp

update loader
Pad driving increased
SPI NAND MID=0000002C DEV=00000024
WWWWWWWWWWWWWWWWRC
Check SRAM fw
fdt addr 0x020000C8
fdt size 0x00004C94
tmp_addr 0x02000000
LdCtrl2 0x00000003
upd_src_addr= 0x02000000
upd_src_size= 0x01619048
uboot_addr 0x1E000000
nodep 0x00104468
NVT_LINUX_SMP_ONE:not support smp
Nrml
uiUpdateFileLen 0xFFFEFFFF
rtos start 0x00000000
【原因1】
smp代表开启双核,520,525都是单核心,请在info.dtsi中关闭smp选项
【原因2】
执行MakeCommon下的脚本make_combo_loader.sh下编译loade

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值