Thread 中讨论的其他器件:SysConfig、 C2000WARE
C2000朋友和家人、
我们的客户对用于在 F28379D 双核项目中引导刷写 CPU01/CPU02的 BOOTCRL 寄存器有一些疑问。
第一个问题与每个 CPU 的 BOOTCTLR 正确地址和值有关。 由于 CPU01的 SPRUHM8I (技术参考手册、第4章)中未编程器件将引导闪存、但对于 CPU02、情况看起来不同、用户可能需要对 Z1-BOOTCTRL 或 Z2-BOOTCTRL 区域进行编程以进行闪存引导。 该客户已使用我们的示例测试了其 CPU02文件中的代码、其能力如下:
2837x_flash_lnk_cpu2.cmd
第0页:/* 程序内存*/
/*内存(RAM/FLASH)块可移动到 Page1进行数据分配*/
/* begin 用于"引导至闪存"引导加载程序模式 */
。
/*双代码安全模式*/
DCSM_OTP_Z1_LINKPOINTER :origin = 0x78000,length = 0x00000C // Z1 OTP。 LinkPointers */
DCSM_OTP_Z1_PSWDLOCK :origin = 0x78010,length = 0x000004 // Z1 OTP。 PSWDLOCK/保留*/
DCSM_OTP_Z1_CRCLOCK :origin = 0x78014,length = 0x000004 // Z1 OTP。 CRCLOCK/保留*/
DCSM_OTP_Z1_BOOTCTRL :origin = 0x7801C,length = 0x000004 // Z1 OTP。 被保留/ BOOTCTRL */
DCSM_ZSEL_Z1_P0 :origin = 0x78020,length = 0x000010 // Z1 OTP。 Z1密码位置/闪存和 RAM 分区- DCSM Z1区域选择内容(!可移动!!)*/
DCSM_OTP_Z2_LINKPOINTER :origin = 0x78200,length = 0x00000C // Z2 OTP。 LinkPointers */
DCSM_OTP_Z2_GPREG :origin = 0x7820C,length = 0x000004 // Z2 OTP。 GPREG1/GPREG2 *
DCSM_OTP_Z2_PSWDLOCK :origin = 0x78210,length = 0x000004 // Z2 OTP。 PSWDLOCK/保留*/
DCSM_OTP_Z2_CRCLOCK :origin = 0x78214,length = 0x000004 // Z2 OTP。 CRCLOCK/保留*/
DCSM_OTP_Z2_BOOTCTRL :origin = 0x7821C,length = 0x000004 // Z2 OTP。 GPREG3/BOOTCTRL *
DCSM_ZSEL_Z2_P0 :origin = 0x78220,length = 0x000010 // Z2 OTP。 Z2密码位置/闪存和 RAM 分区- DCSM Z1区域选择内容(!可移动!!) *
第1页:/*数据存储器*/
/*内存(RAM/FLASH)块可移动到 PAGE0进行程序分配*/
。
/*双代码安全模式*/
DCSM_Z1 :origin = 0x05F000、length = 0x000030 //区域1双代码安全模块寄存器*/
DCSM_Z2 :origin = 0x05F040,length = 0x000030 //区域2双代码安全模块寄存器*/
DCSM_COMMON :origin = 0x05F070,length = 0x000010 //通用双代码安全模块寄存器*/
DCSM_Z1_OTP :origin = 0x078000,length = 0x000020 // Z1 OTP 的一部分。 LinkPointer/JTAG 锁定/引导模式*/
DCSM_Z2_OTP :origin = 0x078200,length = 0x000020 // Z2 OTP 的一部分。 LinkPointer/JTAG 锁定*/
部分
{
。
。
/*双代码安全模式分配*/
DCSM_OTP_Z1_linkpointer :>DCSM_OTP_Z1_LINKPOINTER PAGE = 0
DCSM_OTP_Z1_pswdlock :>DCSM_OTP_Z1_PSWDLOCK PAGE = 0
DCSM_OTP_Z1_CLOCK :>DCSM_OTP_Z1_CRCLOCK PAGE = 0
DCSM_OTP_Z1_BOOTctrl :>DCSM_OTP_Z1_BOOTCTRL PAGE = 0
dcsm_zsel_z1 :>dcsm_ZSEL_Z1_P0 page = 0
/*双代码安全模式分配*/
DCSM_OTP_Z2_linkpointer :>DCSM_OTP_Z2_LINKPOINTER PAGE = 0
DCSM_OTP_Z2_pswdlock :>DCSM_OTP_Z2_PSWDLOCK PAGE = 0
DCSM_OTP_Z2_crclock :>DCSM_OTP_Z2_CRCLOCK PAGE = 0
DCSM_OTP_Z2_bootctrl :>DCSM_OTP_Z2_BOOTCTRL PAGE = 0
dcsm_zsel_z2 :>dcsm_ZSEL_Z2_P0 page = 0
此外、在 Out DCSM_Z1_ZoneSelectBlock.asm 中的 DCSM 分配设置了以下值:
.sect "Dcsm_otp_z1_linkpointer"
长0x1FFFFFFF ;Z1-LINKPOINTER1
长整型0xFFFFFFFF ;保留
长0x1FFFFFFF ;Z1-LINKPOINTER2
长整型0xFFFFFFFF ;保留
长0x1FFFFFFF ;Z1-LINKPOINTER3
长整型0xFFFFFFFF ;保留
.sect "Dcsm_otp_z1_pswdlock "
长整型0xFFFFFFFE ;Z1-PSWDLOCK
长整型0xFFFFFFFF ;保留
.sect "Dcsm_otp_Z1_crclock"
长整型0xFFFFFFFF ;Z1-CRCLOCK
长整型0xFFFFFFFF ;保留
.sect "Dcsm_otp_z1_bootctrl"
长整型0xFFFFFFFF ;Z1-GPREG3
长整型0xFFFFFF0B5A ;Z1-BOOTCTRL:BMODE = 0x0B (闪存启动)、KEY = 0x5A
一个问题是、用户是否必须为 CPU02设置 Z1-BOOTCTRL 或 Z2BOOTCTRL、或者我们是否有另一条路由来避免在 CPU02中写入 Z1或 Z2 DCSM 区域以从闪存引导它。 因为一旦编程、DSCM 将无法恢复、他们希望在开发和生产阶段通过固件更新避免这种情况。 第二个问题是,他们是否可以使用二进制1对 DSCM 进行编程,并且一旦在 DSCM 区域中设置二进制0,就会被锁定,这是否正确?
他们 尝试使用 CCS 7中的片上闪存工具对 Z1-BOOTCTRL/Z2-BOOTCTRL 进行编程、 但地址看起来与它们的链接器文件和片上闪存不同、例如在片上闪存中、OTPBOOTCTRL 地址为0x7821E (32位)、在链接器文件中、我们将为 Z2-BOOTCTRL 寄存器设置地址0x7821C。
我们认为 Z2-BOOTCTRL 寄存器的地址可能必须为0x7821E、删除了长寄存器 Z2-GPREG3、但让我们知道更可取的地方。
感谢您的帮助!
Ty、
是的