首先芯片是加密型的C6748
先不考虑对程序进行KEK加密,只让它充当普通芯片能用就行
我利用NANDWriter工程将led.bin的程序写进NAND FLASH后,让启动模式设置成从NAND启动,boot mode[7:0]为0001 0000

说明:1、我并没有每写512bytes就做一次CRC校验,也即每页只写了前2048bytes,剩下的64个sparebytes没有写东西,我想只要在.ini文件同样设置成不进行CRC校验就应该没问题
2、没有对使用到的block1进行坏块检测。
3、不过我确定,led.bin成功无误写进了NAND FLASH,因为我每写一页,都会重新从该页回读验证一下,以保证写入的跟读出的一致,这里验证是正确的
4、下载程序时用到了DDR读写数据,之前也做过DDR2的压力测试,好像DDR2也都没啥问题
那么NAND FLASH无法自启动到底是哪里出问题了,我想有可能跟.ini的设置有关(key_hdr_sha256_enc.bin这个会影响么?),或者是cmd文件有问题,或者其他问题,还请大神们给给意见,究竟问题问在哪里了?

baokun hu:
led.bin文件从UART2烧写进入DSP内部RAM或者DDR2倒是可以正常运行的! (当时和led.bin相关的cmd是没有红色区域这段语句的,估计加进去也不会影响)
Tony Tang:
难道你把TI提供的 NANDwriter修改了?
是ECC,不是CRC,一定要加ECC的,bootloader要读出ECC与计算得出的ECC做比较才知道boot时读的NAND的数据对不对。
注释掉key_hdr_sha256_enc.bin
红色区域这段话的存在,是因为代码里用到了变量_NANDStart和_EXTERNAL_RAM_START.
baokun hu:
回复 Tony Tang:
我没有官方提供的标准NANDwriter的CCS工程,我的NANDwriter是自己在OMAP-L138_FlashAndBootUtils_2_40文件夹中,利用.c和.h文件自己做的一个工程,你们有没有标准的NANDwriter的CCS V6工程?如果自己写ECC,好写么?还请发个NANDwriter的CCS V6工程链接
baokun hu:
回复 Tony Tang:
是的,我用的就是这个OMAP-L138_FlashAndBootUtils_2_40文件夹中的NANDwriter工程,关键是这个文件夹下面的nand.c文件中,所有关于ECC的函数,都是依靠函数指针在调用ECC的相关函数,而函数指针指向的函数定义并没有给出,我找了好多文件,都没有给出这些指针所指向的函数的定义,程序走到这里就无法前进,所以只能将其屏蔽掉,那么这个该怎么办,我自己写么?还是在哪个地方我没看到?
baokun hu:
回复 Tony Tang:
我用的是CCS V6,这个NANDWriter不能直接导入,所以重新做了个工程,但如前所述,无法找到ECC相关的函数定义,不过我倒是在OMAP-L138_FlashAndBootUtils_2_40\Common\UtilLib下面找到了用C#写的一个ECC.cs文件,会不会是CCS在下面调用了类似ECC.cs的一些文件或者脚本啥的
Tony Tang:
回复 baokun hu:
baokun hu我用的是CCS V6,这个NANDWriter不能直接导入,
先把这个不能导入的问题解决,无非是一些文件路径之类的小问题,而不是修改函数,当然除非你对这个非常有信心,那也可以自己写。
baokun hu:
回复 Tony Tang:
这个NANDWriter工程是NANDWriter_DSP.pjt,这是CCS V6根本无法识别的工程(跟CCS V6工程的后缀不一样),可能这是用低版本的CCS写的工程,我再下个CCSV 5试试行不。
baokun hu:
回复 Tony Tang:
Tony Tang
现在已经可以从NAND FLASH启动了,谢谢你,官方这个确实比我写那个好用多了,我的还是通过从串口给dsp发指令来控制和显示,这个直接在console下就能实现,我写的应该就是没有考虑ECC校验的问题。非常感谢!
TI中文支持网

