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.

DS90C3202的IIC读取问题

Other Parts Discussed in Thread: DS90C3202

最近在做一款DS90C3202设计。通过MCU配置DS90C3202的寄存器。写操作都没有问题,但是读操作会错误。

每次读操作的最后能收到MCU的NACK信号,但是之后DS90C3202的SDA信号就一直是低了,MCU的stop信号就接收不到了。MCU总线上还挂有EEPROM,读写EEPROM都没有问题,很奇怪。不明白为什么每次的读操作收到NACK以后为什么SDA会一直被拉低呢?苦恼

每次断电重新上电后似乎写好的寄存器值又恢复到默认状态了,这是为什么呢?

 

我现在找了一块板子,只有MCU和ds90c3202,发现读操作还是有问题,每次读操作的前面一切正常,就是到了最后sda就被拉低,奇怪了。还有就是每次掉电DS90C3202似乎不保存配置信息,都恢复到默认状态了

3月1日:

总结了一下目前的状态,写操作都没有问题,虽然datasheet里面提到只支持byte读写操作,但是连续写寄存器没问题,连续写8byte寄存器也不会出错。读操作的时候比较特殊。datasheet里面提到:

The data byte has the most significant bit first. At the end of a read, the DS90C3202 can accept either Acknowledge or No Acknowledge from the Master (No Acknowledge is typically used as a signal for the slave that the Master has read its last byte).

在读操作结束的时候,3202能接收ack或者nack信号,典型情况下接收nack信号。

首先尝试发送ack信号后面发送stop信号。,3202会响应ack,并继续发送下一个byte的数据。这样接收不到紧跟在ack后面的stop信号,所以MCU停止发送时钟,sda也就被3202拉低保持在忙状态。

然后尝试发送nack后面发送stop信号。3202依然会响应nack,并发送下一个byte的第一个bit,然后就停止。如果下一个byte的第一个bit是低,3202依然接收不到stop信号,读操作结束的时候sda就被拉低并保持。如果下一个byte的第一个bit是高,那么3202就恰巧能收到mcu的stop信号了,这时候读操作停止,并且sda信号被释放,下次读写操作依然可以进行。

 

感觉3202在接收到mcu的ack或者nack后还要继续发送一个bit,然后再判断,如果是ack就继续发送,如果是nack就等待stop信号。另外就是每次掉电重新上电后3202的寄存器会恢复到默认状态,需要重新配置,如果不掉电,reset3202的话,那寄存器的配置就不会丢失。

不知道是板子设计的时候时序问题还是3202本身的iic接口有bug,ti的支持能不能解答一下?

 

 

x 出现错误。请重试或与管理员联系。