Change MC Module PID

dirkan

Neues Mitglied
25. Apr. 2008
5
0
0
Sprachen
Hallo,
mit Hilfe des ChangeMCModulePID konnte ich erfolgreich von USBXPress driver mode auf VCP driver umschalten.
Aber ich schaffe es nicht, damit zurückzuschalten.
Ist das ein Einwegtool ?
Kennt jemand den Weg zurück ?

Gruss Dirk
 
Hallo Dirk,

mit dem Tool kannst du normalerweise beliebig zwischen USBxpress und VCP hinundher schalten.

Wenn du auf VCP umschaltest, dauert es (bei WindowsXP) etwa 2 Sekunden länger als bei Umschaltung auf USBxpress, bis das Device neu erkannt wird. Bei dir wird aber anscheinend der Button "zurück nach USBxpress" garnicht enabled. Anscheinend liegt das am Betriebssystem bzw. an einem anderen Programm, was sich beim einstecken oder DeviceChange das USB-VCP-Device sofort "an sich reißt".

Du hast ja sowohl den USBxpress- wie auch den VCP-Treiber installiert. Mach mal folgendes: Bei der Installation von USBxpress wird im Laufwerk C: ein Verzeichnis Silabs angelegt. Starte mal das Tool von Silabs:

C:\SiLabs\MCU\USBXpress\Utilities\CP210x Set IDs\AN144SW\CP210xSetIDs.exe

Wenn Du ein USBxpress oder VCP Device anschließt, erscheint dieses in der oberen Auswahlzeile und die unteren Felder werden ausgefüllt. Es kann sein, dass bei dir die Felder nicht automatisch ausgefüllt werden, das hängt mit dem Problem zusammen, was anscheinend besteht.

Im Feld PID (Produkt Idend) kannst du das Device einstellen, also entweder USBxpress oder VCP.

Das sind die Werte:

PID
0xEA61 = USBXpress
0xEA60 = VCP

Achtung: Auf keinen Fall andere Werte angeben, auch nicht im Feld VID (Vendor Ident) etwas ändern, wenn du das machst, erkennt der Silabs-Treiber das Device nicht mehr.

Setze den Haken vor dem Feld PID (nur diesen, keinen anderen!), trage den richtigen Wert ein, zB für USBxpress 0xEA61 und drücke dann auf den Button "Program Device".

Ich stelle später nochmal ein Screenshot vom SilabsTool hier rein.

Gruß,
Dirk
 

Anhänge

  • silabs_set_id.png
    silabs_set_id.png
    17,7 KB · Aufrufe: 15
Hallo Dirk,

da ich auch Dirk heisse und du als Admin auch, werde ich ein A. anhängen, damit es nicht so verwirrend wird.
In der Tat geht es mit dem Silab Tool CP210xSetIDs von VCP wieder zurück nach XPress. Dann sehe ich das Gerät aber nicht mehr in CP210xSetIDs, sondern nur in ChangeMCModule.
Schalte ich dann wieder auf VCP, ist die Situation genau umgekehrt.
Seltsam! Ich versuche mal mit der DLL zu erforschen, was da abgeht.

Weitere Fragen:
Ist die 3.3V vom CP2102 verbunden mit dem ATXMEGA, oder muss der selbst versorgt werden ?
Ist der Bootloader bereits im ATXMEGA drin, oder muss der erst geflashed werden ?

Gruss Dirk A
 
Hallo Dirk A :),

In der Tat geht es mit dem Silab Tool CP210xSetIDs von VCP wieder zurück nach XPress. Dann sehe ich das Gerät aber nicht mehr in CP210xSetIDs, sondern nur in ChangeMCModule.
Schalte ich dann wieder auf VCP, ist die Situation genau umgekehrt.
Seltsam! Ich versuche mal mit der DLL zu erforschen, was da abgeht.

es hat anscheinend irgendetwas mit der Version der CP210xManufacturing.dll von Silabs zu tun. Ich warte hier noch auf Antwort von Silabs.

Weitere Fragen:
Ist die 3.3V vom CP2102 verbunden mit dem ATXMEGA, oder muss der selbst versorgt werden ?

Das Modul benötigt eine eigene Versorgungsspannung, man kann es dadurch nicht nur mit 3,3V, sondern auch mit 1,8V laufen lassen und dabei mit 500kBit/s via USART/USB übertragen. Der Mikrocontroller läuft auch mit 1,6V, dafür ist allerdings der Leveltransceiver zwischen USARTF0 und CP2102 nicht spezifiziert, vobei das bei den Tests bei mir funktioniert hat.
Maximale Versorgungsspannung ist 3,6V!

Ist der Bootloader bereits im ATXMEGA drin, oder muss der erst geflashed werden ?
Bei den letzten Modulen die rausgegangen sind haben wir den Bootloader drauf gelassen. (Wir testen mit Hilfe des Bootloaders die Übertragung mit USARTF0)

Ich würde sagen, einfach mal ausprobieren:
  1. Auf USBxpress schalten
  2. Programmertool starten
  3. Modul an USB anstecken und Betriebsspannung 3,3V anschließen/einschalten
  4. "Read Module Info" drücken.
sollte es ein Timeout geben, dann den Bootloader über PDI programmieren und das Fusebit BOOTRST programmieren.

Achso, wenn der Bootloader programmiert ist und es befindet sich keine Applikation im Flash (ApplicationSection) dann blinkt ein paarmal die LED neben der PowerLED. Die LED blinkt auch dann, wenn du die Taste PQ2 gedrückt hältst und dabei ein RESET\ gibst (natürlich nur dann wenn der Bootloader im Flash ist, BootloaderSection). Das mit der PQ2 Taste ist ein Hintertürchen, so kannst du immer wieder über USB programmieren, auch wenn du dich mal in deinem Programm "abgehängt" hast, also nicht mehr auch das Kommando "Starte Bootloader" reagierst.

Grüße,
Dirk
 
Danke für die rasche Antwort.
Spricht was dagegen, den 3.3V Ausgangspin des CP2102 mit der Vcc des uC zu verbinden ?

Dirk A
 
Super,

hat funktioniert, Power über USB, Bootloader geht auch. Jetzt geht's ans Programmieren.

Danke für die Hilfe!
 
Guten Tag allerseits!
Arbeite mit dem MEGA128-USB Modul seit einem halben Jahr und bisher lief alles perfekt. Auch oft zwischen USB und COM gewechselt, alles wunderbar.
Heute habe ich aber bei der Umstellung von COM auf USB ist etwas schief gegangen. Device wird nicht mehr erkannt, weder von dem Mega128-USB-Programmer, noch von CP210x Change IDs.
In UVCView (Usb device viewer) wird das Geraet mit folgenden Informationen aufgelistet:

Code:
          ---===>Device Information<===---
*!*ERROR:  no String Descriptor for index 2!

ConnectionStatus:                  
Current Config Value:              0x00  -> Device Bus Speed: Full
Device Address:                    0x00
Open Pipes:                           0
*!*ERROR:  No open pipes!

          ===>Device Descriptor<===
bLength:                           0x12
bDescriptorType:                   0x01
bcdUSB:                          0x0110
bDeviceClass:                      0x00  -> This is an Interface Class Defined Device
bDeviceSubClass:                   0x00
bDeviceProtocol:                   0x00
bMaxPacketSize0:                   0x40 = (64) Bytes
idVendor:                        0x10C4 = Silicon Laboratories, Inc.
idProduct:                       0xEA61
bcdDevice:                       0x0100
iManufacturer:                     0x01
*!*ERROR:  no String Descriptor for index 1!
iProduct:                          0x02
*!*ERROR:  no String Descriptor for index 2!
iSerialNumber:                     0x03
*!*ERROR:  no String Descriptor for index 3!
bNumConfigurations:                0x01

Also, die ID stimmt und die LED auf dem Modul leuchtet, die kommunikation funktioniert aber nicht mehr.
Kann mir bitte jemand helfen?
 
Hallo Ivangood,

wird das Modul von unserem Progrmmiertool noch erkannt?

Hast du eventuell Treiber VCP und/oder USBXpress neu installiert?

Schau dir mal diesen Beitrag an, vielleicht hilft das schon weiter.

Grüße,
Dirk
 
Hallo Dirk,

nein, von dem Programmiertool wird es nicht mehr erkannt.
Die Treiber habe ich nicht neu installiert.
Ich habe auf einem neuen Rechner gleiche treiber installiert wie ich sonst erfolgreich verwendet habe, dort wurde beim Einstecken des Moduls Gerätemanager von Windoze gestartet und konnte die "neue Hardware" :pleasantry: nicht installieren. Jetzt hängt es in der Liste mit einem Fragezeichen davor.
Ich nehme an, CP2102 ist fehlprogrammiert. An dem Rechner sind keine weiteren USB-Geräte installiert, kann ich vielleicht "CP210x Change IDs" zwingen das erste Gerät zu nehmen auch wenn es von der Konfiguration her nicht passt? --yes-im-absolutely-sure-do-it oder so? :)

Danke für deine Hilfe!
Digitale Grüße, Ivan


P.S.
Die Funktion CP210x_GetNumDevices() aus CP210xManufacturing.dll liefert jetzt immer eine Null.
Und da diese auch in "CP210x Change IDs" in FillDeviceList() verwendet wird, funktioniet es natuerlich nicht.
 
Hallo Ivan,

der CP2102 scheint noch auf
idVendor: 0x10C4 = Silicon Laboratories, Inc.
idProduct: 0xEA61 = USBXpress Device

zu stehen.

Unser Programmiertool benötigt noch die Seriennummer "MEGA128-USB", damit es das Mikrocontrollermodul erkennt.

"CP210x Change IDs" sollte den CP2102 normalerweise erkennen (Beim Umstellen muss man hier aber vorsichtig sein, VID nicht ändern und PID nur auf 0xEA60=VCP oder 0xEA61=USBXpress stellen!)

Was jedoch wichtig ist, in der USBXpress Installation ist anscheinend noch eine ältere Version von "CP210x Change IDs", dort ist auch eine alte Version 'manufacturer.dll" vorhanden. Das Silabs Tool "CP210x Change IDs" funktioniert dann nicht mehr. Ich weiß nicht, ob sie es in der zwischenzeit in der aktuellen USBxpress Installation geändert haben. Du musst die aktuelle Verison von "CP210x Change IDs" downloaden, die ist in der AN144SW.zip auf der Silabs Produktseite, oder in diesem Beitrag im Anhang.

Versuch dann erst mal, den CP2102 mi dem Tool zu erkennen, und schaue dir die Seriennummer an. Es kann natürlich auch sein, dass nun irgendwas geschossen ist, da ja an dem einem Rechner der CP2102 nicht mehr erkannt wird, hmmm probiere es esinfach mal so aus.

Grüße,
Dirk

EDIT:
Hier ein "Descriptor Dump" mit diesem Tool.

Information for device CP2102 USB to UART Bridge Controller (VID=0x10C4 PID=0xEA61):

Connection Information:
------------------------------

Connection status: Device connected
Device actual bus speed: Full
Device is hub: No
Device adress: 0x0001
Current configuration value: 0x01
Number of open pipes: 2

Device Descriptor:
------------------------------

Value Valuename
0x12 bLength
0x01 bDescriptorType
0x0110 bcdUSB
0x00 bDeviceClass
0x00 bDeviceSubClass
0x00 bDeviceProtocol
0x40 bMaxPacketSize0 (64 Bytes)
0x10C4 idVendor
0xEA61 idProduct
0x0100 bcdDevice
0x01 iManufacturer (Silicon Labs)
0x02 iProduct (CP2102 USB to UART Bridge Controller)
0x03 iSerialNumber (MEGA128-USB)
0x01 bNumConfigurations
Hex dump:
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x40 0xC4 0x10
0x61 0xEA 0x00 0x01 0x01 0x02 0x03 0x01

Configuration Descriptor:
------------------------------

Value Valuename
0x09 bLength
0x02 bDescriptorType
0x0020 wTotalLength
0x01 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0x80 bmAttributes (Bus-powered Device)
0x32 MaxPower (100 mA)
Hex dump:
0x09 0x02 0x20 0x00 0x01 0x01 0x00 0x80 0x32

Interface Descriptor:
------------------------------

Value Valuename
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x02 bNumEndPoints
0xFF bInterfaceClass (Vendor specific)
0x00 bInterfaceSubClass
0x00 bInterfaceProtocol
0x02 iInterface (CP2102 USB to UART Bridge Controller)
Hex dump:
0x09 0x04 0x00 0x00 0x02 0xFF 0x00 0x00 0x02

Endpoint Descriptor:
------------------------------

Value Valuename
0x07 bLength
0x05 bDescriptorType
0x81 bEndpointAddress (In-Endpoint)
0x02 bmAttributes
Transfer Type: Bulk-Transfer
Synchronization Type: None
Usage Type: Data
0x0040 wMaxPacketSize (64 Bytes)
0x00 bIntervall
Hex dump:
0x07 0x05 0x81 0x02 0x40 0x00 0x00

Endpoint Descriptor:
------------------------------

Value Valuename
0x07 bLength
0x05 bDescriptorType
0x01 bEndpointAddress (Out-Endpoint)
0x02 bmAttributes
Transfer Type: Bulk-Transfer
Synchronization Type: None
Usage Type: Data
0x0040 wMaxPacketSize (64 Bytes)
0x00 bIntervall
Hex dump:
0x07 0x05 0x01 0x02 0x40 0x00 0x00
 
Hallo Dirk,

habe mit der neuen Version von Manufacturing.dll ausprobiert,
die Funktion CP210x_GetNumDevices() liefert immer eine Null,
also wird die Device List in "Change IDs" nicht gefuellt. :eek:

Hier ist der Dump von meinem CP2102:
Code:
Information for device CP2102 USB to UART Bridge Controller (VID=0x10C4 PID=0xEA61): 



Connection Information:

------------------------------



Connection status: Device connected

Device actual bus speed: Full 

Device is hub: No

Device adress: 0x0002

Current configuration value: 0x00

Number of open pipes: 0



Device Descriptor:

------------------------------



Value	Valuename

0x12	bLength

0x01	bDescriptorType

0x0110	bcdUSB

0x00	bDeviceClass   

0x00	bDeviceSubClass   

0x00	bDeviceProtocol   

0x40	bMaxPacketSize0   (64 Bytes)

0x10C4	idVendor

0xEA61	idProduct

0x0100	bcdDevice

0x01	iManufacturer   (Si??con Labs)

0x02	iProduct   (CP2102 USB to UART Bridge Controller)

0x03	iSerialNumber   (MEGA128-USB)

0x01	bNumConfigurations

Hex dump: 

0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x40 0xC4 0x10 

0x61 0xEA 0x00 0x01 0x01 0x02 0x03 0x01 



Configuration Descriptor:

------------------------------



Value	Valuename

0x09	bLength

0x02	bDescriptorType

0x0020	wTotalLength

0x01	bNumInterfaces

0x01	bConfigurationValue

0x00	iConfiguration

0x80	bmAttributes   (Bus-powered Device)

0x32	MaxPower   (100 mA)

Hex dump: 

0x09 0x02 0x20 0x00 0x01 0x01 0x00 0x80 0x32 



Interface Descriptor:

------------------------------



Value	Valuename

0x09	bLength

0x04	bDescriptorType

0x00	bInterfaceNumber

0x00	bAlternateSetting

0x02	bNumEndPoints

0xFF	bInterfaceClass   (Vendor specific)

0x00	bInterfaceSubClass   

0x00	bInterfaceProtocol   

0x02	iInterface   (CP2102 USB to UART Bridge Controller)

Hex dump: 

0x09 0x04 0x00 0x00 0x02 0xFF 0x00 0x00 0x02 



Endpoint Descriptor:

------------------------------



Value	Valuename

0x07	bLength

0x05	bDescriptorType

0x81	bEndpointAddress   (In-Endpoint)

0x02	bmAttributes

   Transfer Type:           Bulk-Transfer

   Synchronization Type:    None

   Usage Type:              Data

0x0040	wMaxPacketSize   (64 Bytes) 

0x00	bIntervall

Hex dump: 

0x07 0x05 0x81 0x02 0x40 0x00 0x00 



ERROR: Specified length (0x70) of descriptor (type: 0x58) is greater than the remaining descriptor data


Vielleicht ist das hier der Grund:
ERROR: Specified length (0x70) of descriptor (type: 0x58) is greater than the remaining descriptor data
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)