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.

[参考译文] LAUNCHXL-CC26X2R1:将密钥加载到密钥存储区存储器中

Guru**** 2457430 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1489493/launchxl-cc26x2r1-loading-keys-to-key-store-memory

器件型号:LAUNCHXL-CC26X2R1
Thread 中讨论的其他器件:SYSBIOS

工具与软件:

您好!

我想从外部存储器添加密钥来存储密钥。 我查阅了参考手册文档、并决定使用"12.7.4.2.1从外部存储器中加载密钥"部分。 但是、这些寄存器是加密寄存器、因此无法直接访问。 根据"12.5.6关键区域寄存器"部分的了解、只能通过 DMA 更改这些寄存器。 在这种情况下、我遇到了一个错误、并且可能是这个错误与未 正确配置 DMA 有关。 那么正确配置 DMA 的方法是什么呢? 下面显示了伪代码。

12.7.4.2.1从外部存储器中加载密钥
伪代码中的以下软件示例介绍了主机软件通常为将一个或多个密钥加载到密钥存储模块中而执行的操作。
//配置主控制模块
写入 ALGSEL 0x0000_0001 //启用到密钥存储模块的 DMA 路径
写入 IRQCLR 0x0000_0001 //清除任何未处理的事件
//配置密钥存储模块(区域、大小)
写入密钥大小0x0000_0001 // 128位密钥大小
写入 KEYWRITEAREA 0x0000_0001 //启用密钥进行写入(例如密钥0)
//配置 DMAC
写入 DMACH0CTL 0x0000_00001 //启用 DMA 通道0
写入 DMACH0EXTADDR //外部存储器中密钥的基地址
写入 DMACH0LEN //以字节为单位的密钥总长度(例如16表示1 x 128位密钥)
//等待完成
等待 IRQSTAT[0]='1'//等待操作完成
检查 IRQSTAT[31:30]=‘00'//检查 DMA 和密钥存储中是否没有错误
写入 IRQCLR 0x0000_0001 //确认中断
写入 ALGSEL 0x0000_0000 //禁用主控制/DMA 时钟
//检查状态
检查 KEYWRITTENAREA 0x0000_00001 //检查是否写入了密钥0
//算法结束

我期待着你的回应。

谢谢。

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

    Cetin、您好!

    这似乎是您 之前的 E2E 主题的延续。   

    TRM 的 DMA 部分 (第12.5.3章)外、此处是  此模块的 driverlib 和寄存器。  您可以尝试查看错误值、重置 DMA 并检查其状态。

    此致、
    Ryan

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

    Ryan、您好!

    我尝试了你的建议,我无法解决我的问题。 实际上、我的主要问题是我在调试时注意到的一种情况(当我运行代码时它也不起作用)。 我定义了相关寄存器并通过 TRM 分配了正确的地址。 然后当这些寄存器被尝试在诸如 while 和 if 块之类的块中被读取时、代码的流动首先会进入 Hwi_asm_gcc.s 文件(第一个代码部分)中的以下代码块。 然后在该代码中、它从 blx 行跳转到 Hwi.c 文件并输入以下代码片段(第二个代码部分)。 在这个部分中、它进入 Hwi_excHandlerFunc (excStack、lr)函数、然后它进入 if 块(您可以在下面看到)中的 for (;)部分、位于 Code Error.c 文件的 void Error_raiseX (Error_Block * eb、int prefix、const char * id、intptr_t a0、intptr_t a1)函数内、并且无法退出(第三个部分 Error.c)。

    我的主要目标是摆脱这个问题、解决这个问题的方法是什么? 也许有  不同的方法、我愿意使用这些方法。 另外、我需要指出的是、我是一名大学生、但我的知识不像工程师那样渊博。

    --- 我的代码中有一个有问题的块---

    while (!(HWREG (IRQSTAT_REG)和0x00000001){}

    --我提到的第一个代码部分----
    TI_SysBIOS_family_arm_m3_Hwi_excHandlerAsm:
    TST LR、PSP 上#4 @环境?
    ITE NE
    mrsne r0、PSP @如果是、则使用 PSP
    moveq r0、sp @使用 MSP
    mv sp、r0 @使用此堆栈
    stmfd sp!、{r4-r11}@我们在其中保存 r4-r11
    mov r0、sp @将 sp 传递给异常处理程序
    MOV R1、LR @通过 LR 也
    MOV R4、LR @在 R4中保留 LR

    LDR R2、excHandlerAddr
    黑色 R2

    MOV r0、sp @ ROV
    MOV R1、R4 @ ROV

    --- 我提到的第二个代码部分---

    void Hwi_excHandler (unsigned int * excStack、unsigned int LR)

    Hwi_module->excactive = TRUE;

    /*如果未插入异常处理程序、则返回到 SPIn 循环*/
    如果(Hwi_excHandlerFunc => NULL){
    返回;
    }

    HWI_excHandlerFunc (excStack、LR);
    }

    --- 我提到的第三个代码部分---
    if (Error_policy_D == Error_spin){
    for (;;){
    }
    }
    否则为(((EB ==&defErr)&&(Error_POLICY_D == Error_UNWIND))||(Error_Policy_D == Error_Terminate)){
    system_abort ("ti_sysbios_runtime_Error_raISE:终止执行\n");
    }

    此致、
    Cetin

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

    以下是 调试指南、 包含 HWI 异常。

     source\ti\devices\cc13x2_cc26x2\driverlib\aes.c 中的 F2 SDK 中有一个使用加密密钥存储的示例、该示例来自 AESWriteToKeyStore & AESStartDMAOperation 函数。  如果您不打算使用相关 E2E 主题中推荐的 AES TI 驱动程序、那么您有望了解如何使用 driverlib 函数应用此操作。

    此致、
    Ryan

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

    Ryan、您好!

    这些函数帮助我完成了任务。 谢谢你。

    此致、
    Cetin