Part Number:DS90UB949A-Q1
现在采用mcu+949->948+屏幕的方案
1.可以检测到948的des id,但是无法利用948的7位地址通过I2C获取948的寄存器值,想知道是什么原因?
2.949寄存器的手册中并没有DES ALIAS寄存器的地址和描述,而slave alias[0]看描述似乎适用于remote slave的,而不是用于948(DES)的,而且将slave alias[0]配置成跟des id一样的值时,依旧无法访问948的寄存器
Amy Luo:
您好,
您可以提供 SER 的register dump吗?以查看 I2C 配置寄存器, DES address/alias等中的值
,
HUI sq:
您好,我将这些949寄存器的值放到了图片中,其中0x6是Des ID,0x8是slave alias[0],ox3配置的i2C pass through,0x17配置的是i2C pass all,根据手册,我同时配置了pass through和pass all,此时不用配置Des alias也是可以和948通信的,但实际不能,而且949的寄存器中并存在Des alias寄存器
,
HUI sq:
上述最后一句话有误,实际上949的寄存器中并不存在Des Alias寄存器
,
Amy Luo:
感谢您提供的信息,您能否分享您尝试写入 / 读取的地址? 您可以附上发送命令读写的波形图吗
根据寄存器 0x06 , DES ID 为 0x58。您能否验证一下未使用错误的地址?
,
HUI sq:
您好,我尝试写入的地址是0x2C,因为I2C是通过7位地址进行对外设的访问(0x58>>1 = 0x2C),
第一次访问948寄存器时,发现sda线从高被拉低,且不能恢复
再次访问948时,并发送start信号和0x2C设备,sda线信号如下图所示,没有得到948的ACK
,
Amy Luo:
0x58<<1 是0XB0,应该是地址错误的原因,您使用0XB0地址看是否可以
下面应用手册不知道您看过没,希望对您有帮助:
I 2C over DS90UB913/4 FPD-Link III with BCC:https://www.ti.com.cn/cn/lit/an/snla222/snla222.pdf
,
HUI sq:
0x58是948 7位地址左移一位后显示在寄存器上的,那么我应该是右移一位的,所以是0x2c
,
Amy Luo:
寄存器 0x06 高7位的值是访问498的地址,应该不用移位
I2C Communication Over FPD-Link III with BCC:https://www.ti.com/cn/lit/an/snla131a/snla131a.pdf
,
HUI sq:
0x2C是948的7位地址,当你将他转移到8位的寄存器时,那么不就相当于0x2C<<1 = 0x58吗?而且如下图所示,948的7位地址就是2C,我的I2C是采用7位地址的,那么我就应该采用0x2C吧;另外,我的I2C目前是软件模拟的I2C,不是硬件I2C,这个会有什么影响吗?
,
Amy Luo:
我的理解是寄存器 0x06 高7位的值是访问498的地址,就是Des alias,0x58就是0101 1000,取前7位,就是0101 100,写地址就是0101 1000(0x58),读地址就是0101 1001(0x59),您 能验证一下这读写的地址是否可以访问吗
,
HUI sq:
I2C采用7位地址传输,最后一位用于区分读和写而已,那么我本质上还是应该使用0x2C,也就是说我写948的时候是0x2C<<1 = 0x58,读的时候是0x2C<<1 | 0x01 = 0x59的,..;所以你们还是确认一下软硬件不同方式实现的I2C是否会存在问题呢?
,
Amy Luo:
这里的I2C有时钟拉伸(Clock Stretching)的机制,不知道您在模拟I2C时有没做相应的处理,是否有检测SCLK的状态?