主题中讨论的其他器件:TMS570LS1114、
TI Hercules TMS570LS1114和射频收发器 CC1200。
我开发了一个使用主控和多受控布置且可正常工作的无线电系统、并利用 TDM 架构、因此时序在我的应用中至关重要。
我利用代码中的多个时隙来安排、
- 构建一个长度为62字节的无线电数据包
- 将数据包加载到 CC1200收发器中
- 发送数据包(选通)
从器件同步到主器件上、并在分配的时隙中接收和发送数据包。 对讲机通讯系统工作正常。
现在、我想使用 CC1200中的 AES128模块对无线电通信进行加密。 我已按照 SWRA483.pdf 第5节中的说明操作、但似乎无法触发加密过程。
示例2中的步骤10建议在发出选通空闲时触发加密过程。
我从未在我的代码中看到 AES.AES_RUN = 1。
- 加密过程需要多长时间? 没有关于加密时间的文档。
- 我是否假设加密64个字节而不是16个字节需要4倍的时间?
- 是否可以在 TXFIFO 中对62个字节进行加密(AES 算法对16个字节有效)?
- 在将0x09写入 CC120X_MARK_SPARE 后、它回读为0x41。 这似乎不正确。
我已经 使用调试代码检查了寄存器的配置、并验证了它们是否似乎正确配置了密钥/数据、但上述情况除外。
- 如何在发送前调试/读取 TXFIFO 加密数据包? 我没有在从器件处接收加密数据包。
- 我是否认为 TXFIFO 加密数据包的副本位于 CC1200_DMA_FIFO_TX 0x3E00–0x3E3F 中?
- 我是否可以在第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);
