ADI 技术
直播中

李远恒

7年用户 181经验值
私信 关注
[问答]

请问ad7175-2无法写入寄存器怎么解决?

最近调试ad7175 有问题卡住了,求助于大家.用的硬件是STM32l4和EVAL-AD7175-2开发板,芯片的ID和内部寄存器读取都正常,但是写入不正常.比如我读取里面的通道寄存器地址0x10,默认值是0x8001和手册上相符合.但是发送命令改写0x10中的内容则无效,读取结果还是默认值0x8001.
  下图是SPI分别写入0x10,0x80,0x04三个字节的时序,写入后再读取通道寄存器地址0x10,发现还是默认值0x8001


下图是SPI连续写入0x10,0x80,0x04三个字节的时序,写入后再读取通道寄存器地址0x10,读取结果还是默认值0x8001


也就是说我写入的数据没有到AD7175相应的寄存器中,请教大家有没有类似的经历,如何解决,先谢谢啦!

回帖(3)

李远恒

2018-8-2 09:47:45
这是写AD7175寄存器的代码
/**************************************************************************//**
* @brief Writes the value of the specified register
*
* @param reg - Register structure holding info about the register to be written
*
* @return Returns 0 for success or negative error code.
******************************************************************************/
int32_t AD7175_WriteRegister(st_reg reg)
{
    int32_t ret      = 0;
    int32_t regValue = 0;
    uint8_t wrBuf[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    uint8_t i        = 0;
    uint8_t crc      = 0;
   
    /* Build the Command word */
    wrBuf[0] = COMM_REG_WEN | COMM_REG_WR | reg.addr;
   
    /* Fill the write buffer */
    regValue = reg.value;
    for(i = 0; i < reg.size; i++)
    {
        wrBuf[reg.size - i] = regValue & 0xFF;
        regValue >>= 8;
    }
    /* Compute the CRC */
    if(AD7175_st.useCRC)
    {
        crc = AD7175_ComputeCRC(wrBuf, reg.size+1);
        wrBuf[reg.size + 1] = ~crc;
    }
    /* Write data to the device */
    ret = SPI_Write(AD7175_SLAVE_ID,
                    wrBuf,
                   AD7175_st.useCRC ? reg.size + 2 : reg.size + 1);
   //ret = SPI_RW(AD7175_SLAVE_ID,
     //               wrBuf,
     //              AD7175_st.useCRC ? reg.size + 2 : reg.size + 1);
   
    return ret;
}
举报

郝思雨

2018-8-2 10:04:22
您的示波器两个通道距离太远,我看不清读数。
通信时的第一个字节有读命令和写命令。

我没看到读命令对应的波形。
举报

haitianyise000

2018-8-30 20:47:56
你先读AD7175的ID看正确不,然后再读所有的寄存器; 现将AD7175进行软件复位看能写进去吗
举报

更多回帖

发帖
×
20
完善资料,
赚取积分