Thread 中讨论的其他器件:C2000WARE
工具与软件:
我希望处理器始终引导至闪存。 如果我对 OTP 进行编程、使得 BMSP0和 BMSP1都是0xFF、这是否会导致两者都读取为1、然后强制使用 Get Boot 选项(从而从闪存引导)?
我注意到、FF 表示器件上物理上不存在 GPIO254。
这个方法在2838x 处理器上使用来配置一个到闪存的强制启动。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我希望处理器始终引导至闪存。 如果我对 OTP 进行编程、使得 BMSP0和 BMSP1都是0xFF、这是否会导致两者都读取为1、然后强制使用 Get Boot 选项(从而从闪存引导)?
我注意到、FF 表示器件上物理上不存在 GPIO254。
这个方法在2838x 处理器上使用来配置一个到闪存的强制启动。
尊敬的 Charles:
感谢您的答复。 下面提供了更多详细信息。 这样做的动机是网络安全、我不希望黑客能够启动除我在闪存中编程的内容之外的任何内容。
查看 TRM (CPU1独立和休眠引导流程)中的图4-4、可以看到处理器始终会检查引导 GPIO 引脚以确定如何引导。 如果两个引脚都为1、则处理器将处于 Get Mode (获取模式)、并且可以进行闪存引导。 如果引导引脚有其他值、则处理器将无法引导至闪存、而是引导至并行 IO、SCI 或等待模式。 因此、将两个引脚读作1至关重要。
进入获取模式后、处理器将按照表4-6获取模式解码进行处理。 正如您提到的、key!= 0x5A (即未编程)的默认设置是引导至闪存。
我想将 OTP 中的 BMSP0和 BMSP1设置为0xFF (即 GPIO254)、希望它们读为1并强制进入获取模式。 这需要 KEY 为0x5A、因此我还需要为闪存引导编程 BMODE 值(根据表4-6)。
遗憾的是、没有记录用于为 BMSP0和 BMSP1分配不存在 GPIO 的引导 ROM 的行为(至少没有记录)。 这是我的真实问题、确认了引导 ROM 在本例中是如何运行的。
谢谢!
Allen
您好、Allen:
Unknown 说:该方法用于2838x 处理器
您是指 F2838x 还是 F2837xD? 这些器件具有不同的引导流程、但似乎您所描述的是 F2837xD 器件。
将来、我将介绍 F2837xD 器件:
[报价 userid="637933" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1460605/tms320f28377s-force-boot-to-flash-regardless-of-boot-mode-select-pin-state/5605361 #5605361"]我想将 OTP 中的 BMSP0和 BMSP1设置为0xFF (意思是 GPIO254)、希望将它们读作1并强制设置为 Get 模式。 这需要密钥为0x5A、因此我还需要对闪存引导的 BMODE 值进行编程(根据表4-6)。[/QUOT]查看 C2000Ware 中的引导 ROM 源代码(libraries\boot_rom\f2837xd\revB\rom_sources\F2837x_bootrom\cpu01-bootrom\source)、 BMSP 被 限制为最大引脚值168、否则使用默认 BMSP (GPIO72/84)。 我同意缺少相关文档、并将确保在下一个修订版中注明。
uint16_t c1brom_decode_bootpins(uint16_t pinconfig) { uint16_t bootpin0 = 0; uint16_t bootpin1 = 0; uint16_t bmode = 0; //default boot pins - mode0 is GPIO84, mode1 is GPIO72 if((pinconfig &0xFF) == 0x0) { bootpin0 = 84; } else { bootpin0 = (pinconfig & 0xFF) - 1; } if(((pinconfig & 0xFF00) >> 8) == 0x0) { bootpin1 = 72; } else { bootpin1 = ((pinconfig & 0xFF00) >> 8) - 1; } if(bootpin0 > 168) { //restrict the max pin to be used to GPIO168 bootpin0 = 84; } if(bootpin1 > 168) { //restrict the max pin to be used to GPIO168 bootpin1 = 72; } bmode = (c1brom_GPIO_ReadPin(bootpin1) << 1); bmode |= c1brom_GPIO_ReadPin(bootpin0); return bmode; }
Charles'的想法仍然不变:如果您编程到 BOOTCTRL OTP 密钥寄存器的某个错误(!= 0x5A)、并且 GPIO72/84连接到高电平以选择 Get 模式、那么该器件将始终启动到闪存 高电平的情况下仍可继续进行此操作 . 请注意 、如果 BOOTCTRL KEY!= 0x5A、那么默认 BMSP 将按照 TRM 中的图4-7使用。
请告诉我这对于您的应用是否合理。
此致!
Matt