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.
我在解锁2级闪存时遇到问题。 根据 spnu239b TRM、当已从闪存包装程序向偏移量0x8输入正确的密钥时、F05闪存电平2指示器位15被置位。
我有一个 J 标记,它使用以下命令 poke [address] valueToWrite 和 PEEK [address] ReadsWordFromAdress。
Poke FFFFFFE0 4007 // SYSECR 会在发生地址访问冲突时禁用复位。但是、此芯片上似乎没有位0-2、不知道如何修复、这些位通常可用:
位2 PACCOVR。 外设访问违规覆盖位。
防止外设访问违规错误导致复位或中止。
例外。
用户和特权模式(读取):
特权模式(写入):
0 =外设访问违规错误会导致复位或中止
1 =未对外设访问违规采取任何操作
位1 ACCOVR。 存储器访问复位覆盖位。
防止存储器访问权限违规导致复位或中止
例外。
用户和特权模式(读取):
特权模式(写入):
0 =存储器访问违规权限错误会导致复位或中止
1 =发生违反存储器访问权限的情况时未采取任何操作
位0 ILLOVR。 非法地址复位覆盖位。
防止一个非法访问导致一个复位或中止。
用户和特权模式(读取):
特权模式(写入):
0 =一个非法地址导致一个复位或中止。
1 =未对非法地址采取任何操作。
Poke FFFFFE00 //
Poke FFF8701C 00000918 //将 FMMAC2设置为00000918 (*(int *)(Reg_FlashWrapBase + 0x1c)>>3)<< 3),因为原始 FMMAC@为00000918
Poke FFF87004 11 //设置 FMBAC2 = FMBAC2 | 0xff、因为原始 FMBAC2是7F11
PEEK 1FF0 //虚拟读取第一个闪存密钥
PEEK 1FF4 //虚拟读取第二个闪存密钥
PEEK 1FF8 //虚拟读取第3个闪存密钥
PEEK 1FFC //虚拟读取4闪存密钥
POKE FFF8710C 00 //写入第一个闪存密钥
POKE FFF8710C 00 //写入第二个闪存密钥
POKE FFF8710C 00 //写入第三个闪存密钥
POKE FFF8710C 00 //写入第4个闪存密钥
Poke FFF87100 2 //恢复 FMREGO,原始值为2
POKE FFF87004 7F11 //恢复 FMAC2
读取 FFF87108 //FMBBUSY 如果第15位处于不安全状态、则设置闪存级别2、所有四个密钥均已正确输入。 (0x8000 = bit set),这在尝试解锁之前读为0x4000,在尝试解锁之后读为0x4001。
我肯定所有的钥匙是零,为什么我不得到一个积极的解锁? 我将刷写到该芯片中的 bin 文件、地址1ff0至1fff 全部为零。
您是否具有要在 C 语言中执行的示例闪存擦除、或者针对 TMS470PVF24xB/34xB 的 ARM7组装、这看起来与 TMS470PLF111非常相似。
此外、我发现具有全局控制的所有示例我在此芯片上找不到。 请参阅下面的不同 TMS470
/*设置 GLBCTRL.4 */
target_read_u32 (target、0xFFFFFFDC、&glbctrl);
target_WRITE_u32 (target、0xFFFFFFDC、glbctrl | 0x10);
在上一篇文章中、您提到您是一名学生。 我不明白您为什么要选择已停产的器件来学习。 此器件已使用25年以上。 如果您想了解 MCU 的工作原理、有许多严格的软件配套资料和 EVM 以及支持选项。 大学在其嵌入式 MCU 课程中使用了 TM4C Tiva MCU。 它需要您查看。 我无法在这里回答您的许多问题、因为我没有此已停产器件的相关经验。 每次回答你的问题时,我都要研究他们的工作原理,并搜索已不在公众面前的内部文件。 在您的第一篇文章中、我已经说过我们在 e2e 上不支持此器件。 出于善意、我会尽力为您提供帮助、但我相信我们的资源可以更好地用于现有产品。 请考虑其他拥有专家的 MCU 来为您提供帮助。 我将能够在 TM4C Tiva MCU 方面为您提供帮助。 如果您坚持使用此设备作为您的学习工具、我将无法再提供支持、您将自行承担、抱歉。
好的、是的、这是因为它是一个控制卡车 BCM 的处理器、除非您对 BCM 进行重新设计、否则我无法将该处理器替换为较新的处理器。 我想为其添加远程启动功能。 在此过程中、我们将全面了解基于嵌入式系统编程的 ARM7和触控库。 我认为这将是一个有趣的项目工作,而在大学。 而不是开发板仅修改 LED、数字板等。
我有很多投入去放弃,并真正感谢你的所有帮助。 我关系非常密切、并根据我的需求对原始代码进行了一些成功的更改。
如果问题不多、 除了 TRM 中的内容外、您已经 给我提供了更详细的 TMS470PVF24xB/34xB F05闪存模块和系统寄存器手册。 我找到了非常详细的针对闪存和系统寄存器的 TI 专用手册、但是它们针对 TMS470R1、似乎有很大不同。
谢谢-Jamie
如果问题不多, 除了 TRM 中的手册外,是否有更详细的 TMS470PVF24xB/34xB F05闪存模块和系统寄存器手册 ? 我找到了非常详细的针对闪存和系统寄存器的 TI 专用手册、但是它们针对 TMS470R1、似乎有很大不同。
如果您阅读器件型号约定、请参阅下文、它属于平台架构。 这与 TMS470PLF111和 TMS470PVF24xB/34xB 所基于的平台相同。 换句话说、TRM 将是相同的。 区别在于各个数据表。 同一平台系列的不同变体可能具有或没有特定组件、或者组件的实例数可能会不同、更不用说它们之间的不同存储器大小了。 TMS470R1架构来自于更早一代的 MCU。 在阅读闪存或系统模块等特定模块的用户指南时、您可能会发现有相似之处、但它们并不相同。 您不能依赖 TMS470R1 TRM 来实现 TMS470PLF111。 出现在 TMS470R1 TRM 中的那些寄存器字段不再适用于平台架构。
太棒了、我对 TRM 更有信心了、现在就有了、只希望它有更多细节。 我在 FFF87108上无法获得正解锁级别2消息、应该设置位15。 即使我99%确信我有正确的密钥。
我不在乎是否丢失了所有数据,是否有办法恢复出厂设置或全部擦除,将密钥重置为默认的所有1111111111或所有 FFFFFFF?
再次,我很抱歉,它是这样一个旧的设备,并会喜欢任何帮助!
前8k 扇区的最后4个字中的四个保护密钥是什么? 请参见下方的。
在 TRM 中、显示 首次使用的器件发货后、默认设置为全部使用。 但是、您的器件中已经有固件。 你怎么知道这四个钥匙是否仍然都是一个? 也许、固件所有者已经更改了四个保护密钥以防止互换。 除非您知道发生了什么变化、否则您怎么知道向 FMPKEY 寄存器写入了什么值? 假设先前的固件所有者将密钥更改为0x12345678…… ,除非您知道此值,否则不能像我在代码序列中所看到的那样将0写入 FMPKEY。
6.3.4.2四字保护密钥
通过以下闪存 API 函数来实现保护密钥的解锁:
•闪存匹配密钥_B
如果这个选项存在、CPU 从闪存存储体中一次读取四个已存储的保护密钥、并且
闪存模块中的一个寄存器中。 当 CPU 将每个密钥从存储体加载到控制逻辑后、CPU
必须将相同的用户密钥加载到 FMPKEY 控制寄存器中。 CPU 必须加载并匹配所有四个密钥
然后才能向闪存模块发送编程或擦除命令。
为了使能模块编程、CPU 必须将每个存储的密钥值从存储体加载到控制中
对闪存模块中四个保护密钥地址中的一个进行正常的读取访问、从而进行逻辑操作。
然后、CPU 必须将匹配的用户密钥值加载到 FMPKEY 寄存器中。 重复此过程
直到加载并匹配所有四个密钥。 控制逻辑监控哪些键已匹配、因此
在加载并匹配所有四个密钥至少一次且没有任何干预之前、CPU 无法获得写入访问权限
不匹配。
如果 CPU 随时写入不匹配的密钥(即用户密钥与最匹配的密钥不匹配)、
控制逻辑)后、将所有密钥匹配状态清零、并且 CPU 必须
重新加载所有四个密钥并重新匹配、获得对该模块的写入访问权限。 此功能可用于禁用
编程完成后的写入访问。
CPU 成功加载并匹配全部四个密钥后、闪存写入访问被启用并且
PROTL2DIS 标志(FMBBUSY.15)被置位、直到器件发生复位或 CPU 写入
密钥与 FMPKEY 寄存器不匹配。
为了存储键值、CPU 通过执行正常编程并
对这四个保护密钥地址执行擦除操作。 键值作为普通值存储在组中
数据、因此 CPU 必须先提供正确的密钥、然后才能对密钥执行任何编程或擦除操作
试验。
将新器件交付给客户时、密钥将为全1、因此应使用所有1的密钥
来首次启用闪存写入。 一旦在闪存组中更改了密钥、CPU 必须
故意向 FMPKEY 写入一个不匹配的密钥值、以便在新的 RTOS 周期
已加载并匹配键值。 换言之、闪存模块将在
此编程会话的剩余部分、即使已在闪存中修改密钥也是如此。
闪存保护密钥读取访问和其它读取的区别在于、密钥数据不会
传播到 CPU 数据总线、直到正确的密钥被写入并且用户已经采取了全部所需的步骤来
获得编程访问。 这是为了防止通过读取 PMBus 命令
将它们从 CPU 传出。 只有已经知道密钥的用户才能访问密钥。
在您的以下代码序列中、您似乎正在写入0。 您怎么知道前8kB 闪存扇区的最后4个字中存储的内容全部为零?
PEEK 1FF0 //虚拟读取第一个闪存密钥
PEEK 1FF4 //虚拟读取第二个闪存密钥
PEEK 1FF8 //虚拟读取第3个闪存密钥
PEEK 1FFC //虚拟读取4闪存密钥
POKE FFF8710C 00 //写入第一个闪存密钥
POKE FFF8710C 00 //写入第二个闪存密钥
POKE FFF8710C 00 //写入第三个闪存密钥
POKE FFF8710C 00 //写入第4个闪存密钥
是的、嗯、我似乎能够读取目标上的所有寄存器、RAM、闪存等、只是 ECC。 进行了比较。 不确定他是如何实现的、但似乎绕过了内置的闪存保护? 但只用于读取? 我无法使用他的程序来擦除芯片、他说这是因为它被"锁定在2级闪存上"、并且还让我找到全局控制位4寄存器。 我认为 ECC 是彻底禁用的、这很好、我认为我什么都不需要它。
因此,与转储从他的程序,我比较它与它之前,我写它的 bin 文件,它变砖,他们是相同的。 此外,我以前使用 VPW 2类读出整个闪存内容,这也是相同的,除了,我添加的功能之前,它使自己变硬。
由正常工作的 VPW 2类内核上传的内核解剖图显示它从0x00001ff0读取密钥、我认为这是第一个闪存扇区的最后4个字节、因此这是有道理的。 内核虚拟从 0x00001ff0读取四次、每次迭代添加0x4。 然后从 RAM 中写入密钥、位置0x080006c6、这是我可以告诉的0块。 然后内核将这些写入0xFFF8710C、这一切都很合理。
这是 bin 文件的片段、其中显示的地址为1ff0、整行均为零。
在此循环之前、请参阅上文的反汇编、R4 = 0x00001ff0、R5 = 0x080006c6、r7 = 0xFFF87000、R6 = 0x10c。 我不相信模拟 C 代码、因为它只向指针添加0x1、但 ARM7实际代码显示了真实情况、即添加0x4 (4字节)更有意义。
由于我拥有整个闪存转储、我可以在任何其他地方检查可能的关键位置? 或者、0x00001ff0是唯一一个用于架构 TMS470P 的器件。
F035闪存有一个极其详细的 F035闪存手册和 C 库、具有 HALCoGen 支持和 SPNU493E 手册。 我很想为 F05闪存找到这个。
我很想为 F05闪存找到此文件。 [/报价]SM470R1B1M-HT 是一款使用 F05闪存的有源器件(使用 SM470R1B1M-HT 数据表快速查看)。 闪存 API 模块(修订版 B) 是 https://www.ti.com/product/SM470R1B1M-HT 产品页面上提供的下载链接、可能适用于您的 TMS470PLF111。 spnc031b.zip 下载包含 Install_TI_ELF_F05a_v1.01_FlashAPI.exe 安装程序、但尚未安装它以查看内容。
还可在 TMS470R1x F05闪存参考指南 中获取帮助
以下是 bin 文件的一个片段,其中显示地址1ff0整行均为零。 [/报价]读取零并不意味着密钥实际上是0。 尽管密钥可能是一些其他值、但闪存控制器会强制在 CPU 总线上为零。 如果有人可以从闪存中读取密钥并将其写入 FMPKEY 寄存器、那么保护方案就没有什么用处。
将新器件交付给客户时、密钥将为全1、因此应使用所有1的密钥
来首次启用闪存写入。 一旦在闪存组中更改了密钥、CPU 必须
故意向 FMPKEY 写入一个不匹配的密钥值、以便在新的 RTOS 周期
已加载并匹配键值。 换言之、闪存模块将在
此编程会话的剩余部分、即使已在闪存中修改密钥也是如此。
闪存保护密钥读取访问和其它读取的区别在于、密钥数据不会
传播到 CPU 数据总线、直到正确的密钥被写入并且用户已经采取了全部所需的步骤来
获得编程访问。 这是为了防止通过读取 PMBus 命令
将它们从 CPU 传出。 只有已经知道密钥的用户才能访问密钥。