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.

[参考译文] TMS320F280049-Q1:DCSM:PROTECT RAM 和外设寄存器

Guru**** 2931100 points

Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1411882/tms320f280049-q1-dcsm-protect-ram-and-peripherals-register

器件型号:TMS320F280049-Q1
Thread 中讨论的其他器件:C2000WARE

工具与软件:

尊敬的专家:

我的客户的代码包含 ASIL B 代码和通用代码(这意味着它没有安全功能要求)。 他们希望 将 两部分代码都放在280049中、而想要实现 的基本目标是:通用代码不能更改 RAM、闪存和 外设寄存器的值属于 ASIL B 代码;

我建议他们使用 DCSM 来实现这一目标、但需要您帮助我仔细检查一些信息、假设我将 ASIL B 代码放在 Zone1中、将通用代码放在 Zone2中

1. 如果 Zone2代码想要修改 zone1 RAM 和闪存中的值、则返回0x00;

2.如果 Zone2代码想要修改 zone1 ram 和闪存中的值、它将被阻止; 如果您需要这样做(如 OTA)、您需要  在前面使用函数 dcsm_unlockZone1csm (&psCMDDKey)解锁区域。

3. DCSM 可以保护 外设寄存器吗? 这意味着、如果 zone1使用 PWM1、则 zone2不能修改 PWM1相关寄存器。

4. DCSM 可以实现以下功能吗:例如、CPU 可以访问 LS0RAM、但 DMA 无法访问 LS0RAM、这似乎能确保只有主机可以访问指定的内存范围。 如果 DCSM 无法实现、280049中是否存在其他模块来实现此功能?

我期待着你的回复,谢谢!

此致

周淑清(周舜宇)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1. 如果 Zone2代码想要修改 zone1 RAM 和闪存中的值、则返回0x00;

    是的

    2.如果 Zone2代码想要修改 zone1 ram 和闪存中的值、它将被阻止; 如果您需要这样做(如 OTA)、您需要  在前面使用函数 dcsm_unlockZone1csm (&psCMDDKey)解锁区域。

    是的

    3. DCSM 可以保护 外设寄存器吗? 这意味着、如果 zone1使用 PWM1、则 zone2不能修改 PWM1相关寄存器。

    否、DCSM 无法保护外设寄存器

    4. DCSM 可以实现以下功能吗:例如、CPU 可以访问 LS0RAM、但 DMA 无法访问 LS0RAM、这似乎能确保只有主机可以访问指定的内存范围。 如果 DCSM 无法实现、280049中是否存在其他模块来实现此功能?

    我不确定我是否理解这个问题、您是否在问 DMA 可以读取还是写入安全存储器?

    谢谢!

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Luke:

    感谢您的答复!

    [报价 userid="529193" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1411882/tms320f280049-q1-dcsm-protect-ram-and-peripherals-register/5406757 #5406757"]

    2.如果 Zone2代码想要修改 zone1 ram 和闪存中的值、它将被阻止; 如果您需要这样做(如 OTA)、您需要  在前面使用函数 dcsm_unlockZone1csm (&psCMDDKey)解锁区域。

    是的

    [报价]

    1.如果我没有解锁区域,修改安全 RAM 或闪存中的值,会发生什么? 这将是两种情况。

    a:将忽略该写入操作。 如果会被忽略、我们是否有测试代码或测试报告可以证明非安全区域的代码不会更改安全区域中的数据或程序?

    b.此写入将生成一个中断或设置一个标志、以通知 CPU 发生了非法写入、然后 CPU 可以采取一些措施。

    2、 DCSM 设计两个区域的初衷是什么? 我是否可以仅使用 zone1而不使用 zone2? 例如、我将 ASIL B 代码放置在 zone1安全区域中、将通用代码放置在 zone1不安全代码中、我能否保护 ASIL B 代码?

    3.如果我将 ASIL B 代码放置在 zone1安全区域中、并将通用代码放置在 zone2不安全代码中、是否可以保护 ASIL B 代码、ASIL B 代码是否可以在 zone2不安全区域中读取数据?

    4.如果我解锁区域,它需要执行 PFM 流,我们是否有测试报告,包括该流程需要多长时间? 如果我使用了 正确的密码和 错误的密码、此流程所需的时间是否相同或不同? 如果我使用了不同的密码(例如、正确的密码是0x1234567812345678、错误的密码是0x123xxxxxxxxxxxxx 和0x1234xxxxxxxxxxxx)、此流程所需的时间是相同还是不同? 客户担心不同的 PFM 时间会帮助攻击者获取正确的密码。  

    5.在我的理解下, PFM 流的时间就是时间去提取下面的代码,对吗?

    此致

    周淑清(周舜宇)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.如果我没有解锁区域,修改安全 RAM 或闪存中的值,会发生什么? 这将是两种情况。

    我不知道你是否会得到一个错误,或者如果什么都不会发生,不管怎样,写入将不成功。 如果需要、我可以在我这边进行测试。

    2、 DCSM 设计两个区域的初衷是什么? 我是否可以仅使用 zone1而不使用 zone2? 例如、我将 ASIL B 代码放置在 zone1安全区域中、将通用代码放置在 zone1不安全代码中、我能否保护 ASIL B 代码?

    两个区域的目的是允许两名开发人员在同一器件上编写代码。 例如、主要开发人员可使用第三方的代码来实现某些电机控制算法、但该第三方可在区域2中对其代码进行编程、以保护其专有代码。

    3.如果我将 ASIL B 代码放置在 zone1安全区域中、并将通用代码放置在 zone2不安全代码中、是否可以保护 ASIL B 代码、ASIL B 代码是否可以在 zone2不安全区域中读取数据?

    "区域2不安全代码"是什么意思? 区域2代码由区域2保护。 安全区域(区域1或区域2)中的代码可以读取或写入不安全区域中的数据(任一区域都不安全)

    4.如果我解锁区域,它需要执行 PFM 流,我们是否有测试报告,包括该流程需要多长时间? 如果我使用了 正确的密码和 错误的密码、此流程所需的时间是否相同或不同? 如果我使用了不同的密码(例如、正确的密码是0x1234567812345678、错误的密码是0x123xxxxxxxxxxxxx 和 0x1234xxxxxxxxxxxx)、此流程所需的时间是相同还是不同? 客户担心不同的 PFM 时间会帮助攻击者获取正确的密码。  

    PMF 时序应该没有差异。 在区域解锁 和 PMF 流的最终指令发生之间没有明显的延迟。

    5.在我的理解下, PFM 流的时间就是时间去提取下面的代码,对吗?

    是的。 如果您担心密码匹配 流程的计时因解锁是否成功而异、您可能需要将 driverlib 函数替换为您自己的自定义代码、在这种情况下、代码的计时不依赖于成功或未成功解锁。

    谢谢!

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Luke:

    如果需要、我可以自行测试。

    是的、客户需要此测试。 如果您可以共享该测试程序、效果会更好。

    此致

    周淑清(周舜宇)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Luke:

    1.您能告诉我 最近几天的测试项目或测试结果吗? 客户很紧急、他们的项目正在奖励过程中。

    2.我已经用 EVM 板测试过这个,但遇到了一些困难:

    答:解锁区域并加载程序时,PC 将在 main()中停止;

    b.然后我锁定该区域,代码将始终在 Flash_setWaitstates ()中运行,你能帮我弄清楚为什么会发生这种情况吗?

    3. Z1_GRABSECT1R 可以配置存储器是安全存储在 zone1中还是不安全存储。

    当我在 syscfg 中选择不安全时、寄存器中的值为10、当我选择受此区域保护时、寄存器中的值为01

    那么、 在什么情况下、该寄存器的值变为11?

    我期待着你的回复,谢谢!

    此致

    周淑清(周舜宇)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sunny Zhou、

    默认情况下、该寄存器中的值为"11"。如果 DCSM 区域已锁定、且对应于闪存扇区的寄存器包含"11"、则该闪存扇区将被阻塞、这意味着不得从任何源获取指令或读取数据。

    如果闪存 API 尝试写入或擦除安全区域、那么它应该返回错误。

    您是否从 C2000Ware 运行特定的软件示例? 也许 FLASH_setWaitstates 函数包含在该软件示例中、该函数在器件安全时无法正常工作。

    谢谢!

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Luke:

    1.你能给 我一个明确的测试程序或结果将提供给我吗? 客户迫切需要它。

    如果需要、我可以自行测试。

    2. 可以、我从 C2000Ware 修改 GPIO 示例的代码库、该示例的名称为 gpio_ex3_interrupt。

    Unknown 说:
    您是否正在从 C2000Ware 运行特定的软件示例?

    此致

    周淑清(周舜宇)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Shuqing、

    我可能明天才能提供测试程序、因为我要忙于其它事情、但我可以保证、除 DCSM 保护的代码之外、不能由任何代码对由 DCSM 保护的任何存储器区域进行读取或写入。 例如、如果闪存 API 本身存储在安全存储器中、则闪存 API 只能读取或写入安全存储器。 为了提供额外保护、用户可以将一个存储器区域指定为 EXEONLY。 这将阻止来自任何源的所有数据读取和写入、只允许获取指令。

    我将在明天尝试提供某种测试程序来演示这一点、但我不明白为什么需要这样做。

    谢谢!

    Luke