This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TLA2528:TLA2528

Guru**** 1630180 points
Other Parts Discussed in Thread: TLA2528
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1366706/tla2528-tla2528

器件型号:TLA2528

工具与软件:

您好!  

   当尝试从 TLA2528读取 ADC 值时、我疯了。  

I2C 单寄存器可进行读取和写入。 我在 寄存器 DATA_CFG 上设置了 FIX_PAT_ENABLE 标志。

在本例中、读取2个字节、我得到0xA5A5 (不是0xA5A)、是否正确?

我已将捕获设置为手动模式。 读取状态寄存器返回0x80。

代码将通道编号从0设置为7、然后读取 ADC 值。

当我移除  FIX_PAT_ENABLE 标志时、在第一次读取通道0之后、I2C 电平保持低电平、所以当我尝试写入寄存器0x11来设置下一个通道1时、I2C 总线上有一个错误。  

读取 ADC 值后、是否由主器件发送 STOP?

这是我用于读取通道数据的代码:

uint16_t TLA2528_READ_ONE_CHANNEL_DATA (uint8_t CHANNEL_num)
{
ERR_t ret;
uint16_t 数据区= 0;

I2C_cmd_handle_t cmd = i2c_cmd_link_create ();
I2C_MASTER_START (cmd);
I2C_MASTER_WRITE_BYTE (cmd、(m_TLA2528_ADDRESS << 1)| READ_BIT、ACK_CHECK_EN);

I2C_MASTER_READ (cmd、(uint8_t*)&dataread、2、I2C_MASTER_ACK);

I2C_MASTER_STOP (cmd);
REt = i2c_master_cmd_BEGIN (I2C_master_NUM、cmd、100 / portTick_period_MS);
I2C_cmd_link_delete (cmd);

ERROR_CHECK (ret);
if (ret!= OK) looge (TAG,"TLA2528 I2C 读取错误通道%d\n",CHANNEL_num);

返回数据区;

我的代码出了什么问题?

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    最终我发现了问题。  

    在 I2C 读取函数中、我必须设置仅为最后一个字节读取设置 NAK 的标志。 如果我为每个字节设置 ACK 或 NACK、则读取函数不起作用。 我尚未完全理解这一点(它似乎不符合数据表指令)、但它可以正常工作。