<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: USB Serial number in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/USB-Serial-number/m-p/523091#M5727</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by danhauck on Fri Mar 15 02:17:08 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Ive solved it&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;you only have to add the index (in my case 0x04) in the usb descriptor and add the following code in CALLBACK_USB_GetDescriptor &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;switch (DescriptorNumber)...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0x04:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Address = SerialNoStringPtr;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Size&amp;nbsp;&amp;nbsp;&amp;nbsp; = pgm_read_byte(&amp;amp;SerialNoStringPtr-&amp;gt;Header.Size);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;then you have to add the string&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t SerialNoString[] =&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; USB_STRING_LEN(12),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; DTYPE_String,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('U'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('C'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('R'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_Descriptor_String_t *SerialNoStringPtr = (USB_Descriptor_String_t*)SerialNoString;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and then you have to add and call a init function (in my case USB_DescriptorInit) which reads the UID&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void DescriptorInit(void){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;unsigned int *pd = IO_IAP_GetDeviceUID();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Eindeutige einmalige ID des Prozessors laden&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;unsigned int p = pd[0]^pd[1]^pd[2]^pd[3];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 128bit sind mir zuviel ich mach 32bit draus&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;char b[8];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mysprintf(b,"%08x",p);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // In String wandeln&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// In den Deskriptor laden&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[10] = b[0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[12] = b[1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[14] = b[2];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[16] = b[3];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[18] = b[4];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[20] = b[5];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[22] = b[6];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[24] = b[7];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The IO_IAP_GetDeviceUID-function you can find in the attachment&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;daniel&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 16:43:53 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T16:43:53Z</dc:date>
    <item>
      <title>USB Serial number</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/USB-Serial-number/m-p/523090#M5726</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Muis on Tue Jan 22 13:05:53 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;In the current release of NXPUSBlib (0.98) the device returns no USB serial number to the host. This can be annoying because Windows tries to generate an unique serial number based on PID/VID/Port, and will show the 'new device' message every time you plug it into a different port. For devices like Virtual Serial ports this is even more annoying because a different comm-port number get assigned every time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Could the next release of NXPUSBlib read the UUID of the uC via IAP and place it in the descriptor?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:43:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/USB-Serial-number/m-p/523090#M5726</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:43:52Z</dc:date>
    </item>
    <item>
      <title>Re: USB Serial number</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/USB-Serial-number/m-p/523091#M5727</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by danhauck on Fri Mar 15 02:17:08 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Ive solved it&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;you only have to add the index (in my case 0x04) in the usb descriptor and add the following code in CALLBACK_USB_GetDescriptor &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;switch (DescriptorNumber)...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0x04:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Address = SerialNoStringPtr;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Size&amp;nbsp;&amp;nbsp;&amp;nbsp; = pgm_read_byte(&amp;amp;SerialNoStringPtr-&amp;gt;Header.Size);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;then you have to add the string&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t SerialNoString[] =&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; USB_STRING_LEN(12),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; DTYPE_String,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('U'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('C'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('R'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; WBVAL('0'),&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;USB_Descriptor_String_t *SerialNoStringPtr = (USB_Descriptor_String_t*)SerialNoString;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and then you have to add and call a init function (in my case USB_DescriptorInit) which reads the UID&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void DescriptorInit(void){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;unsigned int *pd = IO_IAP_GetDeviceUID();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Eindeutige einmalige ID des Prozessors laden&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;unsigned int p = pd[0]^pd[1]^pd[2]^pd[3];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 128bit sind mir zuviel ich mach 32bit draus&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;char b[8];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mysprintf(b,"%08x",p);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // In String wandeln&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// In den Deskriptor laden&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[10] = b[0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[12] = b[1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[14] = b[2];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[16] = b[3];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[18] = b[4];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[20] = b[5];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[22] = b[6];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SerialNoString[24] = b[7];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The IO_IAP_GetDeviceUID-function you can find in the attachment&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;daniel&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:43:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/USB-Serial-number/m-p/523091#M5727</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:43:53Z</dc:date>
    </item>
  </channel>
</rss>

