Présentation
Le port USB a pris un essor considérable avec la disparition progressive du port série asynchrone RS232. Cette page présente le développement d'applicatif permettant de gérer en mode HID le port USB entre un applicatif windows et une carte embarquée à base de microncontrôleur PIC18F4550
Outils nécessaires
Kit de développement windows (DDK) pour le développement de la DLL (noyau 32bits)
Microsoft Visual studio pour la compilation de la DLL
Borland C++ pour le développement de l'applicatif sous la plateforme Windows
Le compilateur CCS PIC18F pour l'applicatif du PIC18F4550
Développement de l'applicatif sous Borland C++
Ils existent 3 fonctions précompilées dans le fichier hiddllR.lib :
bool Initialize();// initialisation des tubes vers la terminaison EP1
int write(unsigned char buffer[64]); // emission dans le tube (terminaison EP1) de 64 Octets
unsigned char* read();// réception de 64 octets attention à l'allocation dynamique.
Inclure la librairie dans le projet hiddllR.lib et la DLL hiddllR.dll avec l'executable
Sous Borland C++ declarez les 3 fonctions externes:
extern "C" __declspec(dllimport) bool __stdcall Initialize();
extern "C" __declspec(dllimport) int __stdcall write(unsigned char buffer[64]);
extern "C" __declspec(dllimport) unsigned char* __stdcall read();
Dans le constructeur de l'objet Form1 de la classe TForm1
iRet = Initialize(); // initialisation des tubes
Dans les différentes méthodes de la classe Tform1 faire appel aux méthodes de lecture écriture
tamponout[0]=0x00; //non envoye attention au Report ID bit 8 a 0
tamponout[1]=0x00; // premier octet envoye
tamponout[2]=0x01; // demande lecture ID device
//Label1->Caption="c'est prêt";
write(tamponout); //Label1->Caption="ecriture realise";
unsigned char *p= (unsigned char*) malloc(64);
p=read();// réception des octets
Développement de l'applicatif sous le compilateur CCS PIC18F4550
Dans la fonction Main faites appels aux fonctions de haut niveau de CCS pour l'USB:
usb_init();
usb_task();
usb_wait_for_enumeration();
while (TRUE)
{
if (usb_enumerated())
{
if(usb_kbhit(1)){
usb_get_packet(1, in_data, 64); // Réception du paquet des 64 octets à partir de la terminaison EP 1
usb_put_packet(1, out_data, 64, USB_DTS_TOGGLE);// émission des 64 octets vers EP1
Bien compléter le fichier usb_desc_hid.h notamment le VID et le PID:
0x61,0x04, //vendor id (0x04D8 is Microchip, or is it 0x0461 ??) VID
0x20,0x00, //product id ==11,12 //don't use ffff says usb-by-example guy. oops PID
Le VID et le PID sont codés dans le fichier hiddllR.dll
Les fichiers
La DLL La librairie Fichier de simulation sous Proteus
