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.

[参考译文] CC1200:AES TX FIFO CTR 加密

Guru**** 2399305 points
Other Parts Discussed in Thread: TMS570LS1114, CC1200

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1201930/cc1200-aes-tx-fifo-ctr-encryption

器件型号:CC1200
主题中讨论的其他器件:TMS570LS1114

TI Hercules TMS570LS1114和射频收发器 CC1200。

我开发了一个使用主控和多受控布置且可正常工作的无线电系统、并利用 TDM 架构、因此时序在我的应用中至关重要。

我利用代码中的多个时隙来安排、

  1. 构建一个长度为62字节的无线电数据包
  2. 将数据包加载到 CC1200收发器中
  3. 发送数据包(选通)

从器件同步到主器件上、并在分配的时隙中接收和发送数据包。  对讲机通讯系统工作正常。

现在、我想使用 CC1200中的 AES128模块对无线电通信进行加密。  我已按照 SWRA483.pdf 第5节中的说明操作、但似乎无法触发加密过程。

示例2中的步骤10建议在发出选通空闲时触发加密过程。

我从未在我的代码中看到 AES.AES_RUN = 1。

  1. 加密过程需要多长时间? 没有关于加密时间的文档。
  2. 我是否假设加密64个字节而不是16个字节需要4倍的时间?
  3. 是否可以在 TXFIFO 中对62个字节进行加密(AES 算法对16个字节有效)?
  4. 在将0x09写入 CC120X_MARK_SPARE 后、它回读为0x41。 这似乎不正确。

我已经 使用调试代码检查了寄存器的配置、并验证了它们是否似乎正确配置了密钥/数据、但上述情况除外。

  1. 如何在发送前调试/读取 TXFIFO 加密数据包? 我没有在从器件处接收加密数据包。
  2. 我是否认为 TXFIFO 加密数据包的副本位于 CC1200_DMA_FIFO_TX 0x3E00–0x3E3F 中?
  3. 我是否可以在第7步中假设,如果我将数据包长度设置为62字节,加密过程将应用于位于 TXFIFO 中的所有数据包?

当我 在加密数据寄存器不变之前和之后从 CC1200_DMA_FIFO_TX 读取寄存器时、数据并不代表我加载到 TXFIFO 寄存器中的数据包。

非常感谢您提供的任何帮助。  

示例2. AES TX FIFO 加密

#define AES_BLOCK_SIZE 16.

第30章我是谁

静态 uint8 writeByte;

UINT8 txBuffer[PKTLEN];

UINT8 ramData[4];

静态 uint8 aesKey[AES_BLOCK_SIZE];

静态 uint8 nonce [AES_BLOCK_SIZE];

// 1)确保无线电处于空闲状态(无线电必须处于空闲状态才能执行 AES 命令)

TrxSpiCmdStrobe (CC120X_sidle);

// 2)清空 TXFIFO

TrxSpiCmdStrobe (CC120X_SFTX);

// 3)将数据包写入 TXFIFO

cc120xSpiWriteTxFifo (txBuffer、sizeof (txBuffer));

// 4)将 MARC_SPARE:AES_COMMAND 设置为0x09 (AES TXFIFO)

writeByte = 0x09;

cc120xSpiWriteReg (CC120X_MARK_SPARE、&writeByte、1);

// 5)写入 AES 密钥以扩展寄存器空间地址0xE0

cc120xSpiWriteReg (CC120X_AES_KEY15、aesKey、sizeof (aesKey));

// 6)启用 SPI 直接存储器访问(SPI_DIRT_ACCESS_CFG = 1)

writeByte = 0x20;

cc120xSpiWriteReg (CC120X_SERIAL_STATUS、&writeByte、1);

// 7)写入 AES TXFIFO 命令

// TXFIFO 起始指针@ 0x3EF0 (扩展存储器空间、可用区域0x3EF0)(字长2B)

// TXFIFO 包大小@ 0x3EF2 (扩展存储器空间、可用区域0x3EF2)(字长2B)

ramData[0]= 0x00;// TXFIFO 起始指针

ramData[1]= 0x00;//由于 RAM 中的字写入而导致填充零

ramData[2]=(PKTLEN+1);// TXFIFO 字节大小

ramData[3]= 0x00;//零焊盘

Trx16BitRegAccess ((RADIO_BURST_ACCES|RADIO_WRITE_ACCESS)、0x3E、0xF0、ramData、sizeof (ramData));

// 8)将 nonce 向量(16B)写入0x3880扩展存储器空间、自由区0x2E80

//此矢量必须以字节反向的方式写入将要放入 AES 缓冲区的内容。

// AES 命令将在执行时旋转矢量

Trx16BitRegAccess ((RADIO_BURST_ACCES|RADIO_WRITE_ACCESS)、0x3E、0x80、nonce、sizeof (nonce));

// 9)禁用 SPI 直接存储器访问(SPI_DIRT_ACCESS_CFG = 0)

writeByte = 0x00;

cc120xSpiWriteReg (CC120X_SERIAL_STATUS、&writeByte、1);

// 10)通过发出 IDLE 选通来执行 AES 命令(无线电必须已经处于 IDLE 状态)

TrxSpiCmdStrobe (CC120X_sidle);

// 11)等待 GPIO0变为低电平,表示命令完成

//假定 GPIO0上的 AES_COMMAND_ACTIVE (0x16)会在下降沿中断时设置 aesSemaphore

while (!aesSemaphore);

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

    大家好

    我没有试图弄清楚你的代码中有什么错、而是在我的办公桌上附上了一个示例、这个示例对62字节长的有效载荷很有效。

    请将我的代码与您的代码进行比较、看看您是否能找出不同的做法。

    至于您的问题:

    1. 加密过程需要多长时间? 没有关于加密时间的文档。
    2. 我是否假设加密64个字节而不是16个字节需要4倍的时间?
    3. 是否可以在 TXFIFO 中对62个字节进行加密(AES 算法对16个字节有效)?
    4. 在将0x09写入 CC120X_MARK_SPARE 后、它回读为0x41。 这似乎不正确。

    1和2)很遗憾、这不是我们已经确定的、我建议您只需使用不同的数据包长度进行一些测试、以查看所需的时间以及时间如何依赖于数据包长度

    3) 3)您可以加密62字节长的数据包

    4) 4)您为什么要读取此寄存器? 大多数值是保留的、这是用于发送命令的寄存器、因此读取它没有意义。

    Siri.