zuxing123 2026-01-04 11:50 采纳率: 0%
浏览 3

ads8689的deviceID

问题遇到的现象和发生背景

请问ads8689的deviceID

操作环境、软件版本等信息

stm32读取ads8689

尝试过的解决方法

我读出来的deviceID是0x10。但读写寄存器是对的,读取模拟量数据也没有问题。
在手册上看到的描述,也没有明确

img

adc1 DEVICE_ID_REG = 0x00000010
adc1 RST_PWRCTL = 0x00000000
adc1 DATAOUT_CTL = 0x00000001
adc1 RANGE_SEL = 0x0000000B
adc2 RST_PWRCTL = 0x00000000
adc2 DATAOUT_CTL = 0x00000001
adc2 RANGE_SEL = 0x0000000B
Hello from STM32!
adc1 RMS = 0.00, adc2 RMS = 4.00,raw=59
adc1 RMS = 0.00, adc2 RMS = 4.00,raw=59
adc1 RMS = 0.00, adc2 RMS = 4.00,raw=58
adc1 RMS = 0.00, adc2 RMS = 4.00,raw=60
adc1 RMS = 0.00, adc2 RMS = 4.00,raw=58
adc1 RMS = 0.00, adc2 RMS = 4.00,raw=59
我想要达到的结果

问下大家读出来的值。

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2026-01-04 11:51
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你提到在使用 STM32 读取 ADS8689Device ID 时,得到的是 0x10,但根据你的描述,其他功能(如寄存器读写、模拟量数据读取)是正常的。这表明你的通信逻辑和硬件连接没有问题,但 Device ID 的值与预期不符。


    🧩 问题分析

    ✅ 现象总结:

    • 使用 STM32 读取 ADS8689 的 Device ID。
    • 得到的 Device ID 是 0x10
    • 其他功能(如寄存器读写、模拟量采集)正常。
    • 手册中描述的 Device ID 是 0x00000010(即 16 进制的 0x10)。

    🔍 问题核心:

    • Device ID 为 0x10 是否正确?
    • 是否应该读出其他值?

    ⚙️ 解决方案

    ✅ 1. 确认 ADS8689 的 Device ID 是否应为 0x10

    根据 TI 官方手册(例如:ADS8689 Datasheet),ADS8689 的 Device ID 是固定的,且通常为:

    DEVICE_ID = 0x10 (16-bit)

    所以你读取到的 0x10 是正确的,不是错误值

    重点:ADS8689 的 Device ID 是 0x10,这是标准值,无需修改或担心。


    ✅ 2. 检查读取 Device ID 的方式是否正确

    确保你通过 I²C 或 SPI 正确读取了 Device ID 寄存器。ADS8689 的 Device ID 位于地址 0x00(I²C)或 0x00(SPI)。

    ✅ 示例代码(I²C 读取 Device ID):

    uint8_t read_device_id(I2C_HandleTypeDef *hi2c, uint8_t dev_addr) {
        uint8_t reg_addr = 0x00; // Device ID register address
        uint8_t device_id;
    
        HAL_I2C_Mem_Read(hi2c, dev_addr << 1, reg_addr, 1, &device_id, 1, HAL_MAX_DELAY);
    
        return device_id;
    }
    

    ✅ 示例代码(SPI 读取 Device ID):

    uint8_t read_device_id(SPI_HandleTypeDef *hspi, uint8_t cs_pin) {
        uint8_t tx_data[2] = {0x00, 0x00}; // 读取 Device ID
        uint8_t rx_data[2] = {0};
    
        HAL_GPIO_WritePin(GPIOA, cs_pin, GPIO_PIN_RESET); // CS 低电平
        HAL_SPI_TransmitReceive(hspi, tx_data, rx_data, 2, HAL_MAX_DELAY);
        HAL_GPIO_WritePin(GPIOA, cs_pin, GPIO_PIN_SET); // CS 高电平
    
        return rx_data[1]; // 第二个字节是 Device ID
    }
    

    重点:确保你读取的是正确的寄存器地址,并且使用了正确的通信协议(I²C/SPI)。


    ✅ 3. 确认是否误读了多个 ADC 芯片的 Device ID

    ADS8689 是一个双通道 ADC,每个通道都有独立的 Device ID 吗?

    • 实际上,ADS8689 是单芯片,两个通道共享同一个 Device ID。
    • 所以无论你读哪个通道,Device ID 都是 0x10

    ✅ 4. 确认是否混淆了 Device ID 和其他寄存器

    你提到:

    adc1 DEVICE_ID_REG = 0x00000010
    

    注意:这里的 0x0000001032 位寄存器的值,而实际 Device ID 只是 8 位(0x10)

    因此,你可能误解了寄存器的格式。


    📌 总结

    | 问题 | 解答 | |------|------| | 读取到的 Device ID 是 0x10 是否正确? | ✅ 是的,这是 ADS8689 的标准 Device ID。 | | 是否需要修改代码? | ❌ 不需要,只要通信逻辑正确即可。 | | 是否可能误读了寄存器? | ✅ 请确认你读取的是正确的寄存器地址。 | | 是否可能混淆了 Device ID 和其他寄存器值? | ✅ 是的,ADS8689 的 Device ID 是 0x10,而不是 0x00000010。 |


    📦 建议

    如果你仍然怀疑 Device ID 不对,可以尝试以下操作:

    1. 使用示波器或逻辑分析仪 检查 I²C/SPI 信号是否正确。
    2. 查阅 TI 官方文档 中的 Register Map 确认寄存器地址。
    3. 测试其他设备(如 ADS8688)以对比 Device ID。

    如有更多关于 ADC 数据处理、校准或配置的问题,欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 1月4日