TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6748: 加密版,当bootExitType = SECUREWITHSK,DDR2的数据异常,IOPU相关资料缺失

Part Number:TMS320C6748Other Parts Discussed in Thread: OMAP-L138

目的:编写一个辅助加密版TMS320C6748的烧录程序,退出模式为SECUREWITHSK(因为要加密UserKey),辅助程序运行在128K共享RAM里,实现串口启动辅助烧录程序并通过串口接收要烧录的程序数据,接收的数据存放在DDR2里,然后调用加密函数根据KEK加密CEK在内的UserKey,最后将完整数据烧录到NandFlash,完成加密版C6748的加密烧录工作。

问题:当bootExitType = SECUREWITHSK,串口接收完毕烧录的程序数据,Debug暂停查看数据结构时,发现数据异常。

分析:疑似跟INI文件里IOPU的配置有关,但是IOPU的资料极其缺乏,仅能从零星的几个英文回复里找到一些信息,描述IOPU的文献《Memory_Protection_03_2012_v01.pdf》更是没有获取渠道,没辙,只好发此贴求助这个10年老芯片。

我的问题与英文论坛里此链接反馈的问题一致,但是回复里面并未找到解决办法:e2e.ti.com/…/ddr-problem-with-secure-device-in-secure-mode

San Zhang:

我使用的INI文件

SecureWithSK_ZZY.zip

,

Nancy Wang:

邮件中看到了您之前的回复,请问问题解决了吗?

,

San Zhang:

并没有,是我自己搞错了退出模式,跟IOPU4无关

,

Tony Tang:

bootExitType = SECUREWITHSK的bin文件跑起来后,能用JTAG通过CCS查看内存数据?

,

San Zhang:

能,数据存放在L2RAM,通过JTAG查看是正常的;放在DDR2,通过JTAG查看就不正常了,上面有图。因为要烧录到NandFlash的程序大小超过了256K,所以我想存放在DDR2,加密完头部,再从DDR2写入到NandFlash,但是放在DDR2却是这样的异常

,

Tony Tang:

可以先用NONSECURE模式解锁JTAG, 通过JTAG用通用的flash writer将用CEK加密后的bin写到flash里,再将binidng app以SECUREWITHSK模式启动读出flash的header,用KEK加密再写回flash.

,

San Zhang:

这样就太麻烦了,一:要连接JTAG使用CCS运行通用flash writer.out,需要专业人士来操作烧录工作;二:切换退出模式需要再次上下电;

目前大于256KB的bin文件要烧录和加密,我想过这样来完成烧录和加密工作: “先调整为串口启动,第一次上电,通过串口启动以NONSECURE模式运行程序1,程序1通过串口接收用CEK加密后的bin写到flash里,然后断电第二次上电,通过串口启动以SECUREWITHSK模式运行程序2,读出flash存放header的block,用KEK加密后再写回flash,最后把调整为flash启动”  。还是有点麻烦,希望解决DDR2数据异常的问题。

小于256KB的bin文件要烧录和加密我已经能实现以下流程: “先调整为串口启动,第一次上电,通过串口启动以SECUREWITHSK模式运行程序3,程序3通过串口接收用CEK加密后的bin,读出bin的header,用KEK加密,然后整体写入flash,最后把调整为flash启动” ,这个流程我在L2RAM已经能实现,目前的问题就是当bin超过256KB转存到DDR2上时,数据是异常的。

,

Tony Tang:

San Zhang 说:目前大于256KB的bin文件要烧录和加密,我想过这样来完成烧录和加密工作: “先调整为串口启动,第一次上电,通过串口启动以NONSECURE模式运行程序1,程序1通过串口接收用CEK加密后的bin写到flash里,然后断电第二次上电,通过串口启动以SECUREWITHSK模式运行程序2,读出flash存放header的block,用KEK加密后再写回flash,最后把调整为flash启动” 

这样是可以的。我看到的binding过程的建议都是这样分两步的。只是TI没有提供“程序1”,只提供了通过JTAG烧写的CCS工程。原理是一样的。

你的第二种方法里是怎么查看DDR上的数据的?

,

San Zhang:

1、使用“SecureHexAIS_OMAP-L138.exe”工具生成解锁JTAG和以SECUREWITHSK退出模式的bin文件,使用的是空白的out文件和简化后的ini文件;

2、使用“GenericSecureUartHost.exe”工具进行串口启动,使用的文件是第1步生成的bin文件;(此时已解锁JTAG)

3、使用“CCS 5.5版本”,Debug程序3工程,使用的gel文件是我根据官方gel文件和自己的板子硬件修改得来的;

4、PC通过串口助手发送第1步生成的bin文件;

5、CCS暂停程序3,可以看到unAppData起始地址是0xC010 0000,这是DDR2的映射范围,我的DDR2是256MB,是在有效范围内的;

6、查看unAppData的数据结构内容,对应MagicWord应该为0x41504954,代表AIS启动的标记,但在异常情况下显示0x0005A120,同理数据结构里其它数据也是错误的。

,

Tony Tang:

secureboot_test.ini

在你的ini文件里没有看到DDR的配置,参考附件的ini文件。

,

San Zhang:

加和不加都一样出错,INI文件我也试过加上DDR配置,而且Debug时的软复位后加载gel文件会重新初始化DDR,目前我需要的资料是关于IOPU的解释,我现在遇到的问题跟IOPU的配置有关联,我怀疑是IOPU设置不对,保护了DDR不给访问,我查遍了互联网都找不到[IOPUCONFIG]段的参数解释

,

San Zhang:

C6748_ZZY_SecureWithSK.zip

这是我完整的INI文件

,

Tony Tang:

关注一下我发的那个ini文件里的这个注释。可能跟这个有关系,试一下吧。

[EMIF3DDR]PLL1CFG0 = 0x18010001PLL1CFG1 = 0x00000002DDRPHYC1R = 0x000000C5SDCR = 0x00134832SDTIMR = 0x264A3209SDTIMR2 = 0x3C14C722SDRCR = 0x00000492CLK2XSRC = 0x00000000

; This section allow setting the MPU1 or MPU2. If the ; rangenum is out of the allowed range then all the ranges; (including the fixed range) take the start, end, and ; protection values.; |——24|——16|———-8|———-0|; MPUSELECT: | RSVD | mpuNum | rangeNum |; STARTADDR: | startAddr |; ENDADDR: | endAddr |; MPPAVALUE: | mppaValue |;; This MPU control must happen after the DDR init or else the; MPU control has no effect[MPUCONFIG]MPUSELECT = 0x000002FFSTARTADDR = 0x00000000ENDADDR = 0xFFFFFFFFMPPAVALUE = 0xFFFFFFFF

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6748: 加密版,当bootExitType = SECUREWITHSK,DDR2的数据异常,IOPU相关资料缺失
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1