AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi PIC 16C745 und USB : Wie gehe ich vor ?
Thema durchsuchen
Ansicht
Themen-Optionen

PIC 16C745 und USB : Wie gehe ich vor ?

Ein Thema von moelski · begonnen am 28. Dez 2006 · letzter Beitrag vom 29. Dez 2006
Antwort Antwort
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

PIC 16C745 und USB : Wie gehe ich vor ?

  Alt 28. Dez 2006, 22:16
Moin !

Ich habe mal das Forum durchsucht nach USB ... Dieses Thema scheint nicht eins der einfachsten zu sein, dennoch hät ich da mal gerne ein Problem ...

Und zwar habe ich hier ein Gerät liegen, das mit einem PIC 16C745 Mikrokontroller bestückt ist. Und ich weiss dass dieser PIC ein USB Interface bietet. Was ich auch noch weiss ist die Tatsache, dass mit dieser PIC irgend ein HID Interface darstellt. So und nu is Ende mit meinen Erkenntnissen.

Der PIC ist in einem Datenlogger verbaut, zu dem ich leider keinerlei Informationen habe. Ich weiss also nicht wie das Ding genau mit dem PC kommuniziert. Bei einer seriellen Schnittstelle ist das einfach, man installiert PortMon, schnüffelt ein bisserl auf der Leitung und betreibt etwas reverse engenering was das Protokoll angeht ... Fertig.

Nur wie kann ich das bei USB angehen? Wie kann ich rausbekommen, wie die Orginalsoft mit dem PIC kommuniziert? Und was mich dann noch viel brennender interessiert ... Wie kann ich dann mit dem PIC kommunizieren? Gibt es da eine Art "Standartprotokoll" was da gesprochen wird und ich muss mir "nur noch" den Inhalt ansehen, oder baut da jeder sein eigenes Süppchen?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#2

Re: PIC 16C745 und USB : Wie gehe ich vor ?

  Alt 29. Dez 2006, 00:35
Zitat von moelski:
Moin !

Ich habe mal das Forum durchsucht nach USB ... Dieses Thema scheint nicht eins der einfachsten zu sein, dennoch hät ich da mal gerne ein Problem ...

Und zwar habe ich hier ein Gerät liegen, das mit einem PIC 16C745 Mikrokontroller bestückt ist. Und ich weiss dass dieser PIC ein USB Interface bietet. Was ich auch noch weiss ist die Tatsache, dass mit dieser PIC irgend ein HID Interface darstellt. So und nu is Ende mit meinen Erkenntnissen.

Der PIC ist in einem Datenlogger verbaut, zu dem ich leider keinerlei Informationen habe. Ich weiss also nicht wie das Ding genau mit dem PC kommuniziert. Bei einer seriellen Schnittstelle ist das einfach, man installiert PortMon, schnüffelt ein bisserl auf der Leitung und betreibt etwas reverse engenering was das Protokoll angeht ... Fertig.

Nur wie kann ich das bei USB angehen? Wie kann ich rausbekommen, wie die Orginalsoft mit dem PIC kommuniziert? Und was mich dann noch viel brennender interessiert ... Wie kann ich dann mit dem PIC kommunizieren? Gibt es da eine Art "Standartprotokoll" was da gesprochen wird und ich muss mir "nur noch" den Inhalt ansehen, oder baut da jeder sein eigenes Süppchen?
Hallo,

google mal mit "usb protocol analyzer", dann bekommst du einen ungefähren Überblick über den notwendigen Aufwand.

Gruss Reinhard
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: PIC 16C745 und USB : Wie gehe ich vor ?

  Alt 29. Dez 2006, 06:05
Es ist doch etwas einfacher. Da es ein HID-Geraet ist, kann man meine HID-Komponente http://www.soft-gems.net/HID.php benutzen.
Setz die beiden Demos CollectionDemo und UsagesDemo auf das Geraet an. HID-Geraete zeigen ausfuehrlich was sie koennen.
Man kann natuerlich Pech haben und die Beschreibung des Geraetes ist insoweit abstrakt als das sie nur sagt man kann Bytes austauschen, aber immerhin weiss man dann schon mehr. Schick mir die Ausgaben doch direkt zu robert_marquardt att gmx dott de. Ich dsag dir dann was sie bedeuten.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#4

Re: PIC 16C745 und USB : Wie gehe ich vor ?

  Alt 29. Dez 2006, 10:09
Hallo Robert !

Da habe ich ja gleich den richtigen erwischt Ich hatte dir auch schon mal ne Mail geschrieben vor ein paar Tagen. Aber die ist wohl im Nirvana verschunden Anyway ...

Ich habe eben mal die beiden Demos rennen lassen. Und ich habe jetzt ein paar Zeilen für dich ...
CollectionDemo:
Zitat:
HID-Devices
"USB Mouse" VID=$046D PID=$C00C
xxxxxxxx uninteressant
" " VID=$0461 PID=$0121
UsagePage=FF00 ($FF00) Usage=1 ($0001) CollectionType=Application ($01)
Value Input Range: UsagePage=FF00 ($FF00) 1..7
Value Output Range: UsagePage=FF00 ($FF00) 1..7
UsageDemo:
Zitat:
" " " " VID=$0461 PID=$0121
Input Report Size=7
Output Report Size=7
Feature Report Size=0

Value Input
===========

0)
UsagePage: FF00 ($FF00)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 0
LinkUsage: 1 ($0001)
LinkUsagePage: FF00 ($FF00)
IsRange: True
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
HasNull: False
BitSize: 8
ReportCount: 1
UnitsExp: 0
Units: 0
LogicalMin: -128
LogicalMax: 127
PhysicalMin: 0
PhysicalMax: 0
UsageMin: 1 UsageMax: 7
StringMin: 0 StringMax: 0
DesignatorMin: 0 DesignatorMax: 0
DataIndexMin: 0 DataIndexMax: 6

Value Output
============

0)
UsagePage: FF00 ($FF00)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 0
LinkUsage: 1 ($0001)
LinkUsagePage: FF00 ($FF00)
IsRange: True
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
HasNull: False
BitSize: 8
ReportCount: 1
UnitsExp: 0
Units: 0
LogicalMin: -128
LogicalMax: 127
PhysicalMin: 0
PhysicalMax: 0
UsageMin: 1 UsageMax: 7
StringMin: 0 StringMax: 0
DesignatorMin: 0 DesignatorMax: 0
DataIndexMin: 0 DataIndexMax: 6
Ich hoffe du kannst damit was anfangen und mir was sagen
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#5

Re: PIC 16C745 und USB : Wie gehe ich vor ?

  Alt 29. Dez 2006, 10:13
Nachtrag ...
Mail ist auch zu dir unterwegs mit den Daten.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: PIC 16C745 und USB : Wie gehe ich vor ?

  Alt 29. Dez 2006, 10:52
Das ist eine Feld-Wald-und-Wiesen-Maus

Bei HID-Geraeten tauscht man Datenbloecke (Reports) aus, die kompliziert strukturiert sein koennen. Bei der Maus
Code:
   "USB Mouse" VID=$046D PID=$C00C
      UsagePage=Generic Desktop ($0001) Usage=Mouse ($0002) CollectionType=Application ($01)
         Button Feature: UsagePage=Generic Desktop ($0001) Usage=Motion Wakeup ($003C)
         UsagePage=Generic Desktop ($0001) Usage=Pointing Device ($0001) CollectionType=Physical ($00)
            Button Input Range: UsagePage=Button ($0009) 1..3
            Value Input: UsagePage=Generic Desktop ($0001) Usage=Wheel ($0038)
            Value Input: UsagePage=Generic Desktop ($0001) Usage=Y Axis ($0031)
            Value Input: UsagePage=Generic Desktop ($0001) Usage=X Axis ($0030)
sieht man das jedem Wert eine Bedeutung mitgegeben ist. Man koennte also nur den Wert fuer die Y-Achse extrahieren.

Bei deinem Device ist allerdings die Strukturierung wie vermutet nur als Byte-Array angegeben. Das nuetzt also zur Analyse nicht viel.
UsagesDemo gibt die Strukturierung genauer an. Man kann genau einen Reporttyp lesen, der 7 Bytes (Einheiten a 8 Bit) enthaelt. Gleiches gilt fuer den Report den man schreiben darf.

Zur weiteren Analyse setzt man jetzt SimpleHIDWrite ein. Den Read-Button aktivieren und am Geraet rumspielen. Damit sollte man die vom Geraet gesendeten Reports bekommne. Bei 7 Bytes sollte es nicht zu schwierig sein den Inhalt zu erraten. Pech hat man wenn das Geraet nur sendet wenn man es mit einem zu schreibenden Report aktiviert. Da sollte aber ein herzhafter Schreibbefehl mit 0-Bytes gute Chancen haben.

Oft kommuniziert das Programm ueber eine DLL mit dem Geraet. Da lohnt es sich die Namen der exportierten Funktionen herauszubekommen. Damit laesst sich auf die Strategie der Kommunikation schliessen.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#7

Re: PIC 16C745 und USB : Wie gehe ich vor ?

  Alt 29. Dez 2006, 11:16
Moin Robert,

so auch SimpleHIDWrite ist nun ausgeführt, aber mit geringem Erfolg. Zwar erkennt das Tool schon mal das Gerät (wenngleich auch ohne namen), aber ansonsten tuts nix.
Ich habe mal auf Write geklickt. Dann schreibt er W 00 00 00 00 00 00 00 00. Als Ergebnis kommt leider nix an. Wenn ich bei ReportID was rein schreibe (Zahl) und dann auf Write, dann kriege ich Write Error: Falscher Parameter (57).

Was kann ich nun noch tun?
Kann ich mit deiner Komponente auch irgendwie den Datenverkehr zwischen Orginal-Prog und Gerät loggen? Weil dann wüsste ich doch was ich senden muss und was ich darau empfange. Wenn das deine Komponente nicht kann ... Kannst du mir ein gutes Tool nennen wmit das geht (vorausgesetzt das bingt auch was).

zu den DLLs ...
Also ich habe mir die Installation der Org Soft mal genau angesehen. Da gibt es keine mitgelieferten DLLs. Es muss also über irgendwelche "Standard Befehle" laufen die Windows eh im Bauch hat.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#8

Re: PIC 16C745 und USB : Wie gehe ich vor ?

  Alt 29. Dez 2006, 14:14
Moin Robert!

Ich bin doch noch etwas weiter gekommen. Und zwar habe ich mal das Tool SourceUSB installiert. Und siehe da, dass kann den Traffic loggen.
Also flux die Software gestartet und die Orginalsoft mal angestartet. Voila, 1000 und 1 USB Info. Das ist soviel Krams das ich gonet weiss was wichtig ist.

Nuja, ich habe dann mal ein Kommando rausgepickt und in dein Tool gepackt. Und was soll ich sagen ... Da kommt eine Antwort.
Zitat:
W 00 12 00 00 00 00 19 00
R 00 0B 05 05 21 04 00 00
R 00 E8 03 6D 01 80 FD 01
R 00 FF 0A 80 0A 00 00 65
R 00 0C 00 00 01 00 01 40
Dieses Kommando liest scheinbar ein paar Werte aus dem Logger aus. Was das genau ist kann ich noch nicht sagen. Ich verstehe auch nicht die Kommunikation die da statt findet, aber ich habe schon mal ein paar Daten

Wie kann ich denn nun weiter machen? Hoffe du meldest dich nochmal.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: PIC 16C745 und USB : Wie gehe ich vor ?

  Alt 29. Dez 2006, 15:02
Da das Geraet nur einen Input- und einen Output-Report hat, muss die ReportID immer 0 sein. Die ReportID geht nicht ueber den Bus wenn sie 0 ist. SourceUSB fuehrt sie dann wahrscheinlich nicht auf. Auf Ebene des HID API bastelt Windows die ReportID 0 beim Lesen immer dran und entfernt sie beim Schreiben.
Entsprechend zeigt SimpleHIDWrite immer 8 Bytes mit der ReportID 0 als erstem Byte.

Ob die 7 Bytes in 1 2 oder 4 Byte Werte aufgeteilt sind, ist schwer zu entscheiden. 4 Byte ist aber unwahrscheinlich und da 7 ungerade ist, muss mindestens ein 1 Byte wert dabei sein.
Von der Position der 19 wuerde ich auf einen 2 Byte Wert am Ende schliessen. Von den Werten 00 00, FD 01, 00 65 und 01 40 wuerde ich auf ein Smallint tippen, also ein vorzeichenbehafteter Wert mit 2 Byte.
Es werden aber offensichtlich kompliziertere Kommandos geschrieben. Die Antwort kann entsprechend auch kompliziert sein. Es muessen also nicht 4 gleich aufgeteilte Reports als Antwort zurueckkommen. Da dies aber ein Datenlogger ist, koennten dies 4 Kanaele sein.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz