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.

DS90UB949-Q1EVM: Accessing remote I2C MCU slave connected with Deserializer-DS90UB926 via Serializer DS90UB949

Part Number: DS90UB949-Q1EVM
Other Parts Discussed in Thread: ALP, USB2ANY

Hi, 

I have a setup of Host PC --> Serializer --> Deserializer --> MCU (s32k144) as in below picture,

I am writing a script using Analog Launch pad to read and write on remote slave, The device ID are Seriailizer ID: 0x18, Deserializer ID: 0x5A, and the Slave ID: 0x6C, register address: 0x10

Here is the script,

import time

val = board.ReadI2C(0x18, 0x06, 1)
time.sleep(0.1)
print "Read Deserializer Address from Serializer: ", hex(val)

val = board.ReadI2C(0x5A, 0x00, 1)
time.sleep(0.1)
print "Actual Deserializer ID: ", hex(val)

board.WriteI2C(0x18, 0x03, 0xDA)  #Enabling pass through
time.sleep(0.1)

board.WriteI2C(0x18, 0x07, 0x6C) #Setting Slave ID
time.sleep(0.1)

board.WriteI2C(0x18, 0x08, 0x6C) #Setting Slave alias 
time.sleep(0.1)

print "Writing to remote slave..."
val = board.WriteI2C(0x6C, 0x10, 0x03)
time.sleep(0.1)

print "Reading From remote slave..."
val = board.ReadI2C(0x6C, 0x10, 1)
time.sleep(0.1)

print "Read Data:" , val

Here is the ALP output,

When we run the script in ALP for the first time, the Write function is properly writing to the MCU, but Read function is not working at all. When I try to run the Script again, entire communication got stuck. I am not getting any response even from serializer or deserializer. In MCU code, I2C is in Fast mode (400 KHz), Clock stretching is properly enabled.

Here is a example of write on salve ID: 0x6C and register address 0x83, data: 52, 0F, 05, 08, 6E. I2C Write to MCU is properly working.

Reading from salve ID: 0x6C and register address 0x83, data length = 5 (expecting to read 52, 0F, 05, 08, 6E), but I am getting below response.

The I2C read not working as expected and entire i2c communication got hung up.

Here is the Serializer and Deserializer register configuration,

//SERIALIZER Register Configuration

[REGISTERS]
Device = ALP Nano 1 - DS90UB949, Connector 1
Comments = ""
Date = 05/30/2023
Time = 20:03:48
Reg = 0,0x0000,0x18
Reg = 0,0x0001,0x00
Reg = 0,0x0003,0xDA
Reg = 0,0x0004,0x80
Reg = 0,0x0005,0x00
Reg = 0,0x0006,0x5A
Reg = 0,0x0007,0x00
Reg = 0,0x0008,0x00
Reg = 0,0x0009,0x00
Reg = 0,0x000A,0x46
Reg = 0,0x000B,0x00
Reg = 0,0x000C,0x17
Reg = 0,0x000D,0x20
Reg = 0,0x000E,0x00
Reg = 0,0x000F,0x00
Reg = 0,0x0010,0x00
Reg = 0,0x0011,0x00
Reg = 0,0x0012,0x00
Reg = 0,0x0013,0x88
Reg = 0,0x0014,0x00
Reg = 0,0x0015,0x01
Reg = 0,0x0016,0xFE
Reg = 0,0x0017,0x1E
Reg = 0,0x0018,0x7F
Reg = 0,0x0019,0x7F
Reg = 0,0x001A,0x01
Reg = 0,0x001B,0x00
Reg = 0,0x001C,0x00
Reg = 0,0x001D,0x00
Reg = 0,0x001E,0x01
Reg = 0,0x001F,0xF6
Reg = 0,0x0020,0x00
Reg = 0,0x0021,0x00
Reg = 0,0x0022,0x25
Reg = 0,0x0023,0x00
Reg = 0,0x0024,0x00
Reg = 0,0x0025,0x00
Reg = 0,0x0026,0x00
Reg = 0,0x0027,0x00
Reg = 0,0x0028,0x01
Reg = 0,0x0029,0x20
Reg = 0,0x002A,0x20
Reg = 0,0x002B,0xA8
Reg = 0,0x002C,0x00
Reg = 0,0x0030,0x00
Reg = 0,0x0031,0x00
Reg = 0,0x0032,0x00
Reg = 0,0x0033,0x00
Reg = 0,0x0034,0x00
Reg = 0,0x0035,0x00
Reg = 0,0x0036,0x00
Reg = 0,0x0037,0x00
Reg = 0,0x0038,0x00
Reg = 0,0x0039,0x00
Reg = 0,0x003A,0x00
Reg = 0,0x003B,0x00
Reg = 0,0x003C,0x00
Reg = 0,0x003D,0x00
Reg = 0,0x003E,0x00
Reg = 0,0x003F,0x00
Reg = 0,0x0040,0x14
Reg = 0,0x0041,0x55
Reg = 0,0x0042,0x00
Reg = 0,0x0043,0x00
Reg = 0,0x0044,0x80
Reg = 0,0x0045,0x00
Reg = 0,0x0046,0x00
Reg = 0,0x0047,0x00
Reg = 0,0x0048,0x0D
Reg = 0,0x0049,0x00
Reg = 0,0x004A,0x02
Reg = 0,0x004B,0x00
Reg = 0,0x004C,0x00
Reg = 0,0x004D,0x00
Reg = 0,0x004E,0x00
Reg = 0,0x004F,0x00
Reg = 0,0x0050,0x97
Reg = 0,0x0051,0xA1
Reg = 0,0x0052,0x1E
Reg = 0,0x0053,0x00
Reg = 0,0x0054,0x28
Reg = 0,0x0055,0x0C
Reg = 0,0x0056,0x2A
Reg = 0,0x0057,0x00
Reg = 0,0x0058,0x00
Reg = 0,0x0059,0x00
Reg = 0,0x005A,0xDD
Reg = 0,0x005B,0x20
Reg = 0,0x005C,0x02
Reg = 0,0x005D,0x06
Reg = 0,0x005E,0x44
Reg = 0,0x005F,0x20
Reg = 0,0x0060,0x22
Reg = 0,0x0061,0x02
Reg = 0,0x0062,0x00
Reg = 0,0x0064,0x10
Reg = 0,0x0065,0x00
Reg = 0,0x0066,0x00
Reg = 0,0x0067,0x00
Reg = 0,0x0068,0x00
Reg = 0,0x0069,0x00
Reg = 0,0x006A,0x00
Reg = 0,0x006B,0x00
Reg = 0,0x006C,0x00
Reg = 0,0x0070,0x00
Reg = 0,0x0071,0x00
Reg = 0,0x0072,0x00
Reg = 0,0x0073,0x00
Reg = 0,0x0074,0x00
Reg = 0,0x0075,0x00
Reg = 0,0x0076,0x00
Reg = 0,0x0077,0x00
Reg = 0,0x0078,0x00
Reg = 0,0x0079,0x00
Reg = 0,0x007A,0x00
Reg = 0,0x007B,0x00
Reg = 0,0x007C,0x00
Reg = 0,0x007D,0x00
Reg = 0,0x0080,0x00
Reg = 0,0x0081,0x00
Reg = 0,0x0082,0x00
Reg = 0,0x0083,0x00
Reg = 0,0x0084,0x00
Reg = 0,0x0090,0x00
Reg = 0,0x0091,0x00
Reg = 0,0x0092,0x00
Reg = 0,0x0093,0x00
Reg = 0,0x0094,0x00
Reg = 0,0x0098,0x00
Reg = 0,0x0099,0x00
Reg = 0,0x009A,0x00
Reg = 0,0x009B,0x00
Reg = 0,0x009C,0x00
Reg = 0,0x009D,0x00
Reg = 0,0x009E,0x00
Reg = 0,0x009F,0x00
Reg = 0,0x00A0,0x00
Reg = 0,0x00A1,0x00
Reg = 0,0x00A2,0x00
Reg = 0,0x00A3,0x00
Reg = 0,0x00C0,0x00
Reg = 0,0x00C1,0x00
Reg = 0,0x00C2,0xA8
Reg = 0,0x00C3,0x00
Reg = 0,0x00C4,0x68
Reg = 0,0x00C5,0x00
Reg = 0,0x00C6,0x00
Reg = 0,0x00C7,0x40
Reg = 0,0x00C8,0xC0
Reg = 0,0x00C9,0x00
Reg = 0,0x00CA,0x00
Reg = 0,0x00CB,0x00
Reg = 0,0x00CC,0x00
Reg = 0,0x00CE,0xFF
Reg = 0,0x00D0,0x00
Reg = 0,0x00D1,0x00
Reg = 0,0x00D2,0x00
Reg = 0,0x00D3,0x00
Reg = 0,0x00E0,0x00
Reg = 0,0x00E1,0x00
Reg = 0,0x00E2,0xA8
Reg = 0,0x00E3,0x00
Reg = 0,0x00E4,0x68
Reg = 0,0x00E5,0x38
Reg = 0,0x00E6,0x00
Reg = 0,0x00E7,0x00
Reg = 0,0x00F0,0x5F
Reg = 0,0x00F1,0x55
Reg = 0,0x00F2,0x42
Reg = 0,0x00F3,0x39
Reg = 0,0x00F4,0x34
Reg = 0,0x00F5,0x39
Reg = 0,0x00F6,0x00
Reg = 0,0x00F8,0x00
Reg = 0,0x00F9,0x00

//DESERIALIZER Register Configuration

[REGISTERS]
Device = ALP Nano 1 - DS90UB926, Connector 1
Comments = ""
Date = 05/30/2023
Time = 20:04:11
Reg = 0,0x0000,0x5A
Reg = 0,0x0001,0x04
Reg = 0,0x0002,0x00
Reg = 0,0x0003,0xF0
Reg = 0,0x0004,0xFE
Reg = 0,0x0005,0x1E
Reg = 0,0x0006,0x00
Reg = 0,0x0007,0x18
Reg = 0,0x0008,0x00
Reg = 0,0x0009,0x00
Reg = 0,0x000A,0x00
Reg = 0,0x000B,0x00
Reg = 0,0x000C,0x00
Reg = 0,0x000D,0x00
Reg = 0,0x000E,0x00
Reg = 0,0x000F,0x00
Reg = 0,0x0010,0x00
Reg = 0,0x0011,0x00
Reg = 0,0x0012,0x00
Reg = 0,0x0013,0x00
Reg = 0,0x0014,0x00
Reg = 0,0x0015,0x00
Reg = 0,0x0016,0x00
Reg = 0,0x0017,0x00
Reg = 0,0x0018,0x00
Reg = 0,0x0019,0x01
Reg = 0,0x001A,0x00
Reg = 0,0x001B,0x00
Reg = 0,0x001C,0x0B
Reg = 0,0x001D,0xA0
Reg = 0,0x001E,0x00
Reg = 0,0x001F,0x00
Reg = 0,0x0020,0x00
Reg = 0,0x0021,0x00
Reg = 0,0x0022,0x46
Reg = 0,0x0023,0x10
Reg = 0,0x0024,0x08
Reg = 0,0x0025,0x00
Reg = 0,0x0026,0x83
Reg = 0,0x0027,0x84
Reg = 0,0x0028,0x00
Reg = 0,0x0029,0x00
Reg = 0,0x002A,0x00
Reg = 0,0x002B,0x00
Reg = 0,0x002C,0x00
Reg = 0,0x002D,0x00
Reg = 0,0x002E,0x00
Reg = 0,0x002F,0x00
Reg = 0,0x0030,0x00
Reg = 0,0x0031,0x00
Reg = 0,0x0032,0x10
Reg = 0,0x0033,0x25
Reg = 0,0x0034,0xFA
Reg = 0,0x0035,0x00
Reg = 0,0x0036,0x00
Reg = 0,0x0037,0x00
Reg = 0,0x0038,0x00
Reg = 0,0x0039,0x00
Reg = 0,0x003A,0x00
Reg = 0,0x003B,0x02
Reg = 0,0x003C,0x00
Reg = 0,0x003D,0xA0
Reg = 0,0x003E,0x00
Reg = 0,0x003F,0x10
Reg = 0,0x0040,0x43
Reg = 0,0x0041,0x03
Reg = 0,0x0042,0x03
Reg = 0,0x0043,0x00
Reg = 0,0x0044,0x30
Reg = 0,0x0045,0x70
Reg = 0,0x0046,0x00
Reg = 0,0x0047,0x00
Reg = 0,0x0048,0x0F
Reg = 0,0x0050,0x03
Reg = 0,0x0051,0x10
Reg = 0,0x0052,0x00
Reg = 0,0x0053,0x01
Reg = 0,0x0054,0x80
Reg = 0,0x0055,0x00
Reg = 0,0x0056,0x08
Reg = 0,0x0057,0x00
Reg = 0,0x0058,0x00
Reg = 0,0x0059,0x3F
Reg = 0,0x005A,0x20
Reg = 0,0x005B,0x20
Reg = 0,0x005C,0x00
Reg = 0,0x005D,0x00
Reg = 0,0x005E,0x00
Reg = 0,0x005F,0x00
Reg = 0,0x0060,0x00
Reg = 0,0x0061,0x00
Reg = 0,0x0062,0x00
Reg = 0,0x0063,0x00
Reg = 0,0x0064,0x10
Reg = 0,0x0065,0x00
Reg = 0,0x0066,0x00
Reg = 0,0x0067,0x00
Reg = 0,0x0068,0x00
Reg = 0,0x0069,0x00
Reg = 0,0x0070,0x00
Reg = 0,0x0071,0x00
Reg = 0,0x0072,0x00
Reg = 0,0x0073,0x07
Reg = 0,0x0074,0x07
Reg = 0,0x0075,0x08
Reg = 0,0x0076,0x00
Reg = 0,0x0077,0x00
Reg = 0,0x0078,0x00
Reg = 0,0x0079,0x00
Reg = 0,0x007A,0x00
Reg = 0,0x007B,0x4D
Reg = 0,0x007C,0x02
Reg = 0,0x0080,0x00
Reg = 0,0x0081,0x00
Reg = 0,0x0082,0x00
Reg = 0,0x0083,0x00
Reg = 0,0x0084,0x00
Reg = 0,0x0090,0x00
Reg = 0,0x0091,0x00
Reg = 0,0x0092,0x00
Reg = 0,0x0093,0x00
Reg = 0,0x0094,0x00
Reg = 0,0x0098,0x00
Reg = 0,0x0099,0x00
Reg = 0,0x009A,0x00
Reg = 0,0x009B,0x00
Reg = 0,0x009C,0x00
Reg = 0,0x009D,0x00
Reg = 0,0x009E,0x00
Reg = 0,0x009F,0x00
Reg = 0,0x00C0,0x00
Reg = 0,0x00C1,0x00
Reg = 0,0x00C4,0x00
Reg = 0,0x00C5,0x00
Reg = 0,0x00C8,0x40
Reg = 0,0x00C9,0x00
Reg = 0,0x00CA,0x00
Reg = 0,0x00CB,0x00
Reg = 0,0x00CC,0x00
Reg = 0,0x00E0,0x00
Reg = 0,0x00E1,0x00
Reg = 0,0x00E2,0x00
Reg = 0,0x00E3,0x00
Reg = 0,0x00F0,0x5F
Reg = 0,0x00F1,0x55
Reg = 0,0x00F2,0x42
Reg = 0,0x00F3,0x39
Reg = 0,0x00F4,0x32
Reg = 0,0x00F5,0x36
Reg = 0,0x00F6,0x00
Reg = 0,0x00F8,0x00
Reg = 0,0x00F9,0x00

 I gone through multiple discussions and forums. They have mentioned about configuring only Serializer part. Am I missing any part? Do we need to set any register in deserializer as well?

  • Hi Mohamed,

    Are you able to bypass the SER and DES and do direct connection between  USB2ANY and MCU to see if issues still persist?

    When in locked up condition, does doing a MCU reset recover the I2C bus?

    I'm wondering if the MCU is not releasing the SDA after the read command.

    Regards,

    Logan

  • Hi, I have the deserializer and MCU slave within same PCB. So, I removed the FPD-link cable and directly connected the I2C of MCU to DB90UB949 Serializer EVM board's I2C (J20 pins). In ALP I clicked on scan connected device, I could see serializer, deserializer and as well as MCU device addresses. I used below script to read from MCU

    val = board.ReadI2C(0x6C, 0x10, 1)

    But the output seems to be a random data. After read, I am facing the same issue. The entire communication goes off.

    I also tried resetting the MCU after locked up condition, still I2C bus is not recoverable. 

  • Hi Mohamed, 

    Can you try holding the SER/DES in PDB low status and fully take those out of the equation? 

    Regards, 

    Logan

  • Hi, I tried as you mentioned. I connected MSP430's I2C in DS90UB949 EVM board to my MCU I2C. Set the PDB of both Serializer and Deserializer to Low. Now I am able to Read from MCU, but for only one time. I am getting Read ACK from MCU with random data. After first Read, the I2C communication goes hung. Now I suspect, Whether USB2ANY driver problem is there, I am using latest USB2ANY 2.8.x.x driver and latest APIs.

  • Hi Mohamed, 

    Thanks for the additional data. This experiment would rule out any issues specific to the SER/DES in this set-up. So you will need to investigate the slave MCU device and host controller further.

    Antidotally speaking, if you are able to communicate to the USB2ANY at all, then I doubt it is driver related. Thus this seems more related to an I2C issue in the MCU slave itself.

    Regards, 

    Logan

  • Hi, I repeated the test again. I connected the MCU's I2C directly to the MSP430's (USB2ANY) I2C pins on the EVM. I held the PDB of both the Serializer and Deserializer low. I used the "Example_USB2ANY_I2C_GUI" application from the USB2ANY SDK Sample code. The write and read functions are working correctly in this setup.

    I also tested the configuration by enabling the PDB of the serializer while keeping the MCU's I2C connected to the MSP430's (USB2ANY) I2C on the EVM. I used ALP scripting for read and write operations, and everything worked fine in this scenario as well.

    However, when I connect the FPD link cable between the serializer and deserializer, and configure the MCU's I2C as a slave to the deserializer, the read operation on the I2C is not functioning at all. It consistently returns a "Read Timeout Error."

  • Hi Mohamed, 

    When issue is present, can you do a DES reset (soft reset 0x1=0x1) to see if issue recovers? 
    Likewise, can you try a reset of the MCU to see if bus recovers? 

    If you only read 1 byte size, does issue still exist?

    Regards, 

    Logan

  • Hi, I tested the above possibilities,  Bus is not recovering after Resetting Deserializer and MCU. Only after unplugging Serializer from power, the bus is recovering.

    Yes, the Issue still exist even for single byte read. 

    I have an another Query too, when we change the register values via ALP tool or by scripting, the serializer registers are not saving the values. Whenever we turn off the serializer power, the register values goes off. I have to enter the register values again with the help of ALP register settings. What might be the issue?

  • Hi Mohamed, 

    I connected the MCU's I2C directly to the MSP430's (USB2ANY) I2C pins on the EVM. I held the PDB of both the Serializer and Deserializer low. I used the "Example_USB2ANY_I2C_GUI" application from the USB2ANY SDK Sample code. The write and read functions are working correctly in this setup.

    Did you do the above test also using ALP script tab directly?

    Lets try to change as little variables as possible when doing the with/without SERDES testing. 

    n MCU code, I2C is in Fast mode (400 KHz), Clock stretching is properly enabled.

    By default, I2C from 948 is actually ~100kHz. Can you set MCU code to operate in 100kHz and see if this makes a difference? 

    I have an another Query too, when we change the register values via ALP tool or by scripting, the serializer registers are not saving the values. Whenever we turn off the serializer power, the register values goes off. I have to enter the register values again with the help of ALP register settings. What might be the issue?

    This is expected. Registers are volatile memory and does not save after power-down.

    Regards, 

    Logan