IIC读取传感器信息的方式都是相同的,读opt3001的厂商信息TI和设备ID3001都可以正常读出,但是将寄存器地址改为0后读取光照值就一直为0,将配置寄存器,配置后也能正常读出配置的值
IIC读取流程:起始信号—>发送设备地址加写信号,等待应答—>发送寄存器地址(一个字节)—>起始信号—>发送设备地址加读信号,等待应答—>读两个字节—>停止信号
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.
IIC读取流程:起始信号—>发送设备地址加写信号,等待应答—>发送寄存器地址(一个字节)—>起始信号—>发送设备地址加读信号,等待应答—>读两个字节—>停止信号
您好,如果寄存器地址不变的话,不需要重新发起起始信号。
比如要读取00h的值,流程如下:
start+7bit slave address+R+ACK+00h+ACK+MSB(00h)+ACK+ LSB(00h) +NACK+stop
您好,这是读操作的时序。
起始信号—>发送设备地址加写信号,等待应答—>发送寄存器地址(一个字节)—>起始信号—>发送设备地址加读信号,等待应答—>读两个字节—>停止信号
在这个时序中,7bit从机地址后面是W写操作,那说明是要对某个寄存器进行配置,但是后面加了寄存器的地址之后,又重新发送给了repeat 起始信号对其进行读操作,实际并没有进行寄存器的写。
Device ID和读取光照的寄存器(00h)都是只读寄存器,不需要对其进行配置,所以直接参考Figure21的read timing 就可以。
如果是配置寄存器,我们可以先写,再读,流程如下:
Start+7bit address+ W+ ACK+ Configure register address+ ACK + 7bit address +R+ Ack +Configure register data +NACK + Stop
因为读写都是configure regsiter,所以不需要发送repeat command。
但假如先对configure register 进行写操作,再去读取其他寄存器,也就是其他寄存器地址改变,需要主机重新发送起始命令。
设备上电,读取设备id和厂商,往配置寄存器(01h)里写两个字节0xC410,然后读取结果寄存器(00h)
对配置寄存器先写,然后并没有读配置寄存器,而是先读取结果寄存器00h是吗?
这样的话,在写完配置寄存器,有收到ACK信号之后,因为要读取的寄存器变了,所以是需要主机再发送一个repeat 起始命令,然后7 bit地址+Read+00h+ACK+data(00h MSB )+ACK+LSB(00h)。
然后这时候读取的00h的值都为零是吗?
接着读取配置寄存器(01h)里面的内容
读完寄存器00h,接着又去读的配置寄存器吗?
读完寄存器00h后,再去读配置寄存器,发现00h读到的数据是0xc490,
您的第一个帖子说00h读取的值为00,现在读取的是0xC490了吗?每一次读写都能收到ACK信号吗?
您好,我建议您去验证两个方面:
1)上电后,对配置寄存器配置完之后可以紧接着去读配置寄存器,然后再去读结果寄存器,看光照结果是不是正确?
2。 将配置寄存器的bit 10:9连续转换模式改为one shot单次转换试试,看光照结果是否正确?
好的,我这边收到您的反馈,我再看看这个问题。
也就是说每次读取到的结果寄存器的值都不会随着转换而更新是吗?
并且您现在读取的结果寄存器的值和光照匹配吗?