主题中讨论的其他器件: ADS124S08EVM
工具/软件:
大家好:
我正在使用 ADS124S06 的定制电路板、但无法通信。
我检查了 SPI CS/DIN/SCLK 信号、尽管我无法在 DOUT 中看到任何数据、但看起来很好。
我想时间戳 正常、SPI 时钟为 1MHz、 CS 延时~1us
我使用的是我自己的驱动程序、根据用户手册编写:
void ADS124S0X_send_read_command(void* spi, uint8_t start_adr, void* dest, uint8_t length)
{
if(length == 0)
return;
uint8_t *p8_dest = (uint8_t*)dest;
hal_spi_channel_t* hal_spi = (hal_spi_channel_t*)spi;
hal_spi_result_t result = HAL_SPI_RESULT_OK;
uint8_t command = CMD_RREG | (start_adr & 0x1F);
uint8_t len = (length - 1) & 0x1F;
HAL_SPI_Enable_slave(hal_spi);
HAL_SPI_exchange_byte(hal_spi, command, NULL);
HAL_SPI_exchange_byte(hal_spi, len, NULL);
while(length-- && result == HAL_SPI_RESULT_OK)
{
result = HAL_SPI_exchange_byte(hal_spi, 0, p8_dest);
p8_dest++;
}
HAL_SPI_Disable_slave(hal_spi);
}
void ADS124S0X_send_write_command(void* spi, uint8_t start_adr, void* src, uint8_t length)
{
if(length == 0)
return;
uint8_t *p8_src = (uint8_t*)src;
hal_spi_channel_t* hal_spi = (hal_spi_channel_t*)spi;
hal_spi_result_t result = HAL_SPI_RESULT_OK;
uint8_t command = CMD_WREG | (start_adr & 0x1F);
uint8_t len = (length - 1) & 0x1F;
HAL_SPI_Enable_slave(hal_spi);
HAL_SPI_exchange_byte(hal_spi, command, NULL);
HAL_SPI_exchange_byte(hal_spi, len, NULL);
while(length-- && result == HAL_SPI_RESULT_OK)
{
result = HAL_SPI_exchange_byte(hal_spi, *p8_src, p8_src);
p8_src++;
}
HAL_SPI_Disable_slave(hal_spi);
}
#define ID_ADS124S06 (0x01)
uint8_t AD124S0X_Init(void* hal_spi)
{
uint8_t ads124s0x_id = 0;
ADS124S0X_send_read_command(hal_spi, 0x00, &ads124s0x_id, 1);
if(ads124s0x_id != ID_ADS124S06)
return 1;
return 0;
}


