
tadata[6]以上都是回读正确的
tadata[7]回读就是不对,说明没写进去 可是写复位数据 0x80 回读又是正确的,其他的值都写不进去





下午好🌅🌅🌅
本答案参考通义千问
你提到的 AD7779 是一款 16位、低功耗、可编程增益、Σ-Δ ADC,支持 SPI接口。根据你的描述:
“0x13地址配置成SPI接口读ADC为啥写不进去”,“tadata[6]以上都是回读正确的,tadata[7]回读就是不对,说明没写进去”,“可是写复位数据 0x80 回读又是正确的,其他的值都写不进去”。
这表明你在尝试通过 SPI 接口对 AD7779 的寄存器进行写操作时,某些寄存器(如 0x13)无法成功写入,但复位寄存器(如 0x80)可以正常写入和回读。
AD7779 使用 4字节的 SPI 命令格式,包括:
对于 写操作,需要发送一个包含地址、写标志和数据的 24-bit 命令帧(共 3 字节),然后读取返回的 16-bit 数据。
[CMD][ADDR][RD/WR][RES][DATA]
0x13: Configuration Register 3(可写)
// 假设使用 STM32 的 SPI 驱动
void write_AD7779(uint8_t reg_addr, uint16_t data) {
uint8_t tx_buffer[3];
uint8_t rx_buffer[2];
// 构造写命令:CMD=0, ADDR=reg_addr, WR=1, RES=0
tx_buffer[0] = (0 << 7) | (reg_addr << 4) | (1 << 3) | (0 << 2);
tx_buffer[1] = (data >> 8) & 0xFF; // 高字节
tx_buffer[2] = data & 0xFF; // 低字节
// 执行 SPI 传输
HAL_SPI_TransmitReceive(&hspi1, tx_buffer, rx_buffer, 3, 100);
// 回读数据
uint16_t read_data = (rx_buffer[0] << 8) | rx_buffer[1];
}
write_AD7779(0x13, 0x1234); // 写入
uint16_t val = read_AD7779(0x13); // 读回
if (val == 0x1234) {
printf("Write successful!\n");
} else {
printf("Write failed! Read value: 0x%04X\n", val);
}
| 问题点 | 解决方法 | |--------|----------| | 寄存器不可写 | 确认地址是否为可写寄存器 | | SPI 时序错误 | 检查 CPOL 和 CPHA 设置 | | 写操作格式错误 | 按照 24-bit 格式构造命令 | | 硬件连接问题 | 检查 SPI 引脚和电源 | | 回读地址错误 | 确保回读地址与写入地址一致 |
如果你能提供 具体的代码片段 或 SPI 波形截图,我可以进一步帮你定位问题。