我一直在尝试使用 SPI 写入外部EEPROM,但我取得了好坏参半。数据确实以相反的方式移出。EEPROM 需要一个起始位,然后是一个操作码,该操作码本质上是用于读取、写入和擦除的 2 位代码。本质上,起始位和操作码组合成一个字节。我正在创建一个 32 位无符号整数,然后将值移位到其中。当我传输这些时,我看到首先看到的是实际数据,然后是 SB+操作码,然后是内存地址。我如何反转这个以首先查看操作码,然后是内存地址,然后是实际数据。如下图所示,数据为BCDE,SB+opcode为07,内存地址为3F。正确的顺序应该是 07、3F 和 BCDE(我认为!)。
这是代码:
uint8_t mem_addr = 0x3F;
uint16_t data = 0xBCDE;
uint32_t write_package = (ERASE << 24 | mem_addr << 16 | data);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_SPI_Transmit(&hspi1, &write_package, 2, HAL_MAX_DELAY);
HAL_Delay(10);
}
/* USER CODE END 3 */