主题中讨论的其他器件:ADS1298、
您好!
我与 ADS1298的 SPI 通信存在一些严重问题。
我正在尝试读取 Device-ID 寄存器、但我没有从器件获得任何响应。
加电后、我将器件复位、如下所示:
// CS HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET); // RESET LOW HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET); HAL_Delay(100); // RESET HIGH HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); HAL_Delay(100); // RESET CMD HAL_SPI_Transmit(&this->spi_handle, &COMMANDS.RESET, 1, 250); while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY); // CS HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
之后、我发出 SDATAC 命令:
// CS HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET); HAL_SPI_Transmit(&this->spi_handle, &COMMANDS.SDATAC, 1, 250); while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY); // CS HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
然后尝试读取 Device-ID:
constexpr uint8_t reg_addr = 0x00; uint8_t opcodes[3]; opcodes[0] = 0x20 | reg_addr; opcodes[1] = 0x00; opcodes[2] = 0x00; uint8_t receive; // CS HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET); HAL_SPI_Transmit(&this->spi_handle, &opcodes[0], 1, 250); while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY); HAL_SPI_Transmit(&this->spi_handle, &opcodes[1], 1, 250); while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY); HAL_SPI_TransmitReceive(&this->spi_handle, &opcodes[2], &receive, 1, 250); while(HAL_SPI_GetState(&this->spi_handle) != HAL_SPI_STATE_READY); // CS HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET); return (receive >> 5);
但我只接收0x00。 有什么想法、我可能会遗漏什么? 我已经检查了1.2V 的 VCAP1