大家好、TI 人、
我正在使用 FR6989的 AES 和 DMA 对 RAM 处的一个卡尺进行解密、并将结果直接传输到 FRAM。 并找到目标地址是否在0xFFFF 以上、它总是失败的。
但是,如果目标地址低于0x10000,它会很好地工作。 需要您的帮助,提前感谢。
在这里、我连接了代码。(用于 MSP430 V6.50)的 IAR
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.
大家好、TI 人、
我正在使用 FR6989的 AES 和 DMA 对 RAM 处的一个卡尺进行解密、并将结果直接传输到 FRAM。 并找到目标地址是否在0xFFFF 以上、它总是失败的。
但是,如果目标地址低于0x10000,它会很好地工作。 需要您的帮助,提前感谢。
在这里、我连接了代码。(用于 MSP430 V6.50)的 IAR
#include "msp430fr6989.h"
#include "stdint.h"
typedef 枚举
{
加密= 0x00、
解密= 0x01、
}AESMODE_t;
typedef 枚举
{
false = 0、
真= 1、
中性= 2
}bol_t;
const uint8_t pincode[16]={0x11、0x22、0x33、0x44、0x55、0x66、0x77、0x88、0x99、0xAA、0xBB、0xCC、0xDD、0xEE、0xFF、0x00};
uint16_t xx[16]={
0x0011、0x2233、0x3344、0x4455、0x5566、0x6600、0x7788、0x8811、0x9933、0xAABB、0xBBCC、
0xCCAA、0xDDD4、0x2AEE、0x57FF
};
__monitor bool_t aes128_ECB_Word (uint32_t MspAddr、uint16_t *输入、uint16_t WordCnt);
void OpenFW_ZoneRW (void);
void INLAM_FRAM_Alter (void);
void InitAES_pincode (AESmode_t 模式);
/*********
SEG1:4400-EFFF
SEG2:F000-FFFF
SEG3:10000结束
此代码位于 SEG2。SEG1\SEG3打开写权限。
xx 为 chipertxt,AES 解密 xx 并传输(通过 DMA)
seg3 (>0xFFFF)时的结果(plaintxt)总是失败的。 但是,如果解址在 seg1,
这是可以的。
(二 /
void main( void ){
//停止看门狗计时器以防止超时复位
WDTCTL = WDTPW + WDTHOLD;
InitAES_pincode(解密);
AES128_ECB_Word (0x10000、xx、16);
while (1);
}
/********
(三 /
__monitor bool_t aes128_ECB_Word (uint32_t MspAddr、uint16_t *输入、uint16_t WordCnt)
{
if (MspAddr & 1)
返回 false;
AESAST|=AESKEYWR;
AESACTL0|=AESCMEN; // AESCMEN = 1、AESCMx = 00
DMACTL0=DMA0TSEL_11 | DMA1TSEL_12; //设置 DMA 0-1触发器
DMA0CTL=DMADD_0 | DMALEVEL | DMASRCINCR_0 | DMADSTINCR_3; //配置 DMA 0
__data20_write_long (((uint32_t)&DMA0SA、(uint32_t)&AESADOUT); //源地址
__data20_write_long (((uint32_t)&DMA0DA、(uint32_t) MspAddr); //目标地址
DMA0SZ=WordCnt; //以字表示数据包大小
OpenFW_ZoneRw();
DMA0CTL|= DMAEN; //启用 DMA 0
DMA1CTL=DMADD_0 | DMALEVEL | DMASRCINCR_3 | DMADSTINCR_0; //配置 DMA 1
__data20_write_long (((uint32_t)&DMA1SA、(uint32_t)输入); //源地址
__data20_write_long (((uint32_t)&DMA1DA、(uint32_t)&AESADIN); //目标地址
DMA1SZ=WordCnt; //数据包字中的大小
DMA1CTL|= DMAEN; //启用 DMA 1.
AESACTL1=WordCnt>>3;
while (!(DMA0CTL 和 DMAIFG));
prohibe_FRAM_Alter();
返回 true;
}
/********
(三 /
void OpenFW_ZoneRW (void)
{
MPUCTL0 = MPUPW;
MPUSEGB1 = 0xF000>>4;
MPUSEGB2 = 0x10000>>4;
MPUSAM = MPUSEG1RE|MPUSEG1WE|
MPUSEG2RE|MPUSEG2XE |
MPUSEG3RE|MPUSEG3WE|
MPUSEGIRE|MPUSEGIWE;
MPUCTL0 = MPUPW | MPUENA;
MPUCTL0_H = 0xDD;
}
/********
(三 /
void prohibe_FRAM_Alter (void)
{
MPUCTL0 = MPUPW;
MPUSEGB1 = 0xF000>>4;
MPUSEGB2 = 0x10000>>4;
MPUSAM = MPUSEG1RE|MPUSEG2RE|MPUSEG2XE|
MPUSEG3RE|MPUSEGIRE;
MPUCTL0 = MPUPW | MPUENA;
MPUCTL0_H = 0xDD;
}
/********
(二 /
__ROOT void InitAES_pincode (AESmode_t 模式)
{
uint16_t i;
AESACTL0 = AESSWRST;
if (decrypt == mode){
AESACTL0=AESKL__128|AESOP0;}
否则{
AESACTL0=AESKL__128;
}
for (i=0;i<16;i++)
{
AESAKEY_L=pincode[i];
}
while (AESAST&AESBUSY);
}
您好、Wei、
我已经根据以下主题找到了解决方案:
https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/564374
然后,我返回 IAR,找到有关此问题的更明确的说明。
总之、感谢您的提示。 )