CX3 Unique Product Descriptor

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
itayc
Level 2
Level 2
First solution authored 10 replies posted 5 questions asked

Hi,

Is there a way to assign a unique product descriptor and serial number descriptor to each CX3?

I prefer to use the DIE_ID as the unique identified.

 

Thanks,

Itay

0 Likes
1 Solution
Rashi_Vatsa
Moderator
Moderator
Moderator
5 likes given 500 solutions authored 1000 replies posted

Hello,

Please refer to this thread for unique ID (64 bits)  Solved: Unique Id-Registers in CYUSB3014 - Infineon Developer Community  . The Unique ID can be used to set the serial number descriptor of CX3 to distinguish CX3 devices with the same VID/PID  Distinguishing Different FX3 Devices with Same VID... - Infineon Developer Community  

Regards,
Rashi

View solution in original post

0 Likes
3 Replies
Rashi_Vatsa
Moderator
Moderator
Moderator
5 likes given 500 solutions authored 1000 replies posted

Hello,

Please refer to this thread for unique ID (64 bits)  Solved: Unique Id-Registers in CYUSB3014 - Infineon Developer Community  . The Unique ID can be used to set the serial number descriptor of CX3 to distinguish CX3 devices with the same VID/PID  Distinguishing Different FX3 Devices with Same VID... - Infineon Developer Community  

Regards,
Rashi
0 Likes

Hi Rashi,

Thanks for your reply.
I'm looking for something more specific - following the suggested method, I cannot change the SN or product descriptor as it constant.

My current solution is as follow:
1. Add to main (at cycx3_uvc.c) the following (before CyU3PKernelEntry):

// Read Die ID
uint32_t GetSerialNumber[2];
uint8_t LUT16[] = "0123456789ABCDEF";

status = CyU3PReadDeviceRegisters((uint32_t *)0xE0055010,2,(uint32_t *)GetSerialNumber);
if (status == CY_U3P_SUCCESS)
{
CyU3PDebugPrint(4,"\r\nCX3 DIE_ID = 0x%x %x\r\n",GetSerialNumber[0],GetSerialNumber[1]);
}
else
{
CyU3PDebugPrint(4,"\r\nCX3 DIE_ID was not found\r\n");
}
CyCx3USBProductDscr[10] = LUT16[((GetSerialNumber[0] & 0x00F00000) >> 20)];
CyCx3USBProductDscr[12] = LUT16[((GetSerialNumber[0] & 0x000F0000) >> 16)];
CyCx3USBProductDscr[14] = LUT16[((GetSerialNumber[0] & 0x0000F000) >> 12)];
CyCx3USBProductDscr[16] = LUT16[((GetSerialNumber[0] & 0x00000F00) >> 8)];
CyCx3USBProductDscr[18] = LUT16[((GetSerialNumber[0] & 0x000000F0) >> 4)];
CyCx3USBProductDscr[20] = LUT16[((GetSerialNumber[0] & 0x0000000F) >> 0)];
CyCx3USBSerialNumberDscr[2] = LUT16[((GetSerialNumber[0] & 0x00F00000) >> 20)];
CyCx3USBSerialNumberDscr[4] = LUT16[((GetSerialNumber[0] & 0x000F0000) >> 16)];
CyCx3USBSerialNumberDscr[6] = LUT16[((GetSerialNumber[0] & 0x0000F000) >> 12)];
CyCx3USBSerialNumberDscr[8] = LUT16[((GetSerialNumber[0] & 0x00000F00) >> 8)];
CyCx3USBSerialNumberDscr[10] = LUT16[((GetSerialNumber[0] & 0x000000F0) >> 4)];
CyCx3USBSerialNumberDscr[12] = LUT16[((GetSerialNumber[0] & 0x0000000F) >> 0)];

2. At cycx3_uvcdscr.c:
- Update CyCx3USB20DeviceDscr and CyCx3USB30DeviceDscr Serial number string index from 0x00 to 0x06.
- Update:
uint8_t CyCx3USBProductDscr[] =
{
0x16, /* Descriptor Size */
CY_U3P_USB_STRING_DESCR, /* Device descriptor type */
'I', 0x00, /* Product Descriptor String */
'M', 0x00,
'M', 0x00,
'-', 0x00,
'0', 0x00,
'0', 0x00,
'0', 0x00,
'0', 0x00,
'0', 0x00,
'0', 0x00
};
- Add:
uint8_t CyCx3USBSerialNumberDscr[] =
{
0x0E, /* Descriptor size */
CY_U3P_USB_STRING_DESCR, /* Device descriptor type */
'0', 0x00,
'0', 0x00,
'0', 0x00,
'0', 0x00,
'0', 0x00,
'0', 0x00
};
3. Update cycx3_uvc.h definitios.

I had some issues when connected 3 CX3 to a single HX3. I hope that it will work now 🙂

Thanks,

Itay


0 Likes
AliAsgar
Moderator
Moderator
Moderator
1000 replies posted 250 solutions authored 750 replies posted

Hi Itay,

The registers mentioned in Rashi's post for DIE_ID is Software RW capable. Hence, you may write the register value depending on your application.

Best Regards,
AlIAsgar

0 Likes