Vous n'êtes pas identifié(e).

#1 Le 08/01/2023, à 11:13

P'skhal
Explorateur
Lieu : Au-delà du portail
Inscription : Le 18/08/2016,
Messages : 37 482

Réalisez un adaptateur USB / Ethernet...

... avec un microcontrôleur et des logiciels open-source
Rémy Dziemiaszko a écrit :

J’utilise souvent un adaptateur USB <-> Ethernet pour ajouter à ma machine de développement un port réseau supplémentaire et pouvoir ainsi facilement me connecter avec une IP statique sur une carte de développement.

Ce type d'équipement électronique est très probablement basé sur un ASIC spécialisé, qui réalise entièrement la fonction de façon “matérielle”, mais je vous propose aujourd’hui de construire la même fonction avec un microcontrôleur et des briques logicielles open-source.

Pour vous aider durant la lecture de cet article, le code source de ce projet est disponible sur le dépôt Github suivant:

https://github.com/remdzi/stm32-eth-usb

Le bus USB et la classe CDC-ECM

Un bus USB est constitué d’un "host" (l'hôte, votre PC par exemple) et de un ou plusieurs "devices" (périphériques, vos souris, clavier, etc). Chaque "device" implémente un ou plusieurs "endpoints" (EP) qui sont ses canaux de communication avec le "host". Les EP peuvent être de type "OUT" si l’échange des données se fait du "host" vers le "device", "IN" du "device" vers le "host" et "INOUT" si la communication est bi-directionnelle.

Lorsque vous connectez un "device" sur le bus, le "host" commence par la phase d’énumération qui consiste à lire le descripteur USB du "device" sur son EP0 qui est toujours de type "INOUT". Ce descripteur contient la fiche d’identité du "device" avec notamment son PID (ou "Product ID") et son VID (ou "Vendor ID") mais aussi le type de classe USB implémentée par le "device". Si le "device" annonce une classe USB standardisée alors le "host" connaît le rôle et le format des données supportées par chacun des autres EPs du "device" et peut donc charger un driver standard supportant cette classe. Si au contraire le "device" annonce une classe non standard alors c’est le couple PID/VID qui permet au "host" de reconnaître le "device" et de charger (s'il existe) le bon driver qui implémente la communication requise pour joindre les EPs du "device".

Il existe une multitude de classes USB standardisées, chacune étant destinée à un type de périphérique: "Human Interface Devices" (HID) pour les claviers et souris, USB "Video Class" pour les webcam, USB "Audio Class" pour les micros et casques, etc.

La suite du HowTo dans Linux Embedded


“ Aujourd'hui plus qu'hier et bien moins que demain „

P'skhal

#1 Le 08/01/2023, à 11:13

Explorateur
Lieu : Au-delà du portail
Inscription : Le 18/08/2016,
Messages : 37 482
... avec un microcontrôleur et des logiciels open-source
Rémy Dziemiaszko a écrit :

J’utilise souvent un adaptateur USB <-> Ethernet pour ajouter à ma machine de développement un port réseau supplémentaire et pouvoir ainsi facilement me connecter avec une IP statique sur une carte de développement.

Ce type d'équipement électronique est très probablement basé sur un ASIC spécialisé, qui réalise entièrement la fonction de façon “matérielle”, mais je vous propose aujourd’hui de construire la même fonction avec un microcontrôleur et des briques logicielles open-source.

Pour vous aider durant la lecture de cet article, le code source de ce projet est disponible sur le dépôt Github suivant:

https://github.com/remdzi/stm32-eth-usb

Le bus USB et la classe CDC-ECM

Un bus USB est constitué d’un "host" (l'hôte, votre PC par exemple) et de un ou plusieurs "devices" (périphériques, vos souris, clavier, etc). Chaque "device" implémente un ou plusieurs "endpoints" (EP) qui sont ses canaux de communication avec le "host". Les EP peuvent être de type "OUT" si l’échange des données se fait du "host" vers le "device", "IN" du "device" vers le "host" et "INOUT" si la communication est bi-directionnelle.

Lorsque vous connectez un "device" sur le bus, le "host" commence par la phase d’énumération qui consiste à lire le descripteur USB du "device" sur son EP0 qui est toujours de type "INOUT". Ce descripteur contient la fiche d’identité du "device" avec notamment son PID (ou "Product ID") et son VID (ou "Vendor ID") mais aussi le type de classe USB implémentée par le "device". Si le "device" annonce une classe USB standardisée alors le "host" connaît le rôle et le format des données supportées par chacun des autres EPs du "device" et peut donc charger un driver standard supportant cette classe. Si au contraire le "device" annonce une classe non standard alors c’est le couple PID/VID qui permet au "host" de reconnaître le "device" et de charger (s'il existe) le bon driver qui implémente la communication requise pour joindre les EPs du "device".

Il existe une multitude de classes USB standardisées, chacune étant destinée à un type de périphérique: "Human Interface Devices" (HID) pour les claviers et souris, USB "Video Class" pour les webcam, USB "Audio Class" pour les micros et casques, etc.

La suite du HowTo dans Linux Embedded


“ Aujourd'hui plus qu'hier et bien moins que demain „

Hors ligne

Hors ligne

#2 Le 08/01/2023, à 11:21

M'lou
MétalWoman
Lieu : Quelque part dans la Galaxie
Inscription : Le 18/08/2016,
Messages : 41 818

Re : Réalisez un adaptateur USB / Ethernet...

Chouette ça  !

Des simples adaptateurs USB / Ethernet, j'en ai dans mes réserves   tongue   big_smile   


L'amour est comme un jardin, il doit se cultiver chaque  jour pour donner le meilleur de lui-même

M'lou

#2 Le 08/01/2023, à 11:21

MétalWoman
Lieu : Quelque part dans la Galaxie
Inscription : Le 18/08/2016,
Messages : 41 818

Chouette ça  !

Des simples adaptateurs USB / Ethernet, j'en ai dans mes réserves   tongue   big_smile   


L'amour est comme un jardin, il doit se cultiver chaque  jour pour donner le meilleur de lui-même

Hors ligne

Hors ligne

#3 Le 08/01/2023, à 11:24

P'skhal
Explorateur
Lieu : Au-delà du portail
Inscription : Le 18/08/2016,
Messages : 37 482

Re : Réalisez un adaptateur USB / Ethernet...

Non ?   q_mdr5


“ Aujourd'hui plus qu'hier et bien moins que demain „

P'skhal

#3 Le 08/01/2023, à 11:24

Explorateur
Lieu : Au-delà du portail
Inscription : Le 18/08/2016,
Messages : 37 482

Non ?   q_mdr5


“ Aujourd'hui plus qu'hier et bien moins que demain „

Hors ligne

Hors ligne

#4 Le 08/01/2023, à 11:24

M'lou
MétalWoman
Lieu : Quelque part dans la Galaxie
Inscription : Le 18/08/2016,
Messages : 41 818

Re : Réalisez un adaptateur USB / Ethernet...

Si !   tongue  lol  lol  lol


L'amour est comme un jardin, il doit se cultiver chaque  jour pour donner le meilleur de lui-même

M'lou

#4 Le 08/01/2023, à 11:24

MétalWoman
Lieu : Quelque part dans la Galaxie
Inscription : Le 18/08/2016,
Messages : 41 818

Si !   tongue  lol  lol  lol


L'amour est comme un jardin, il doit se cultiver chaque  jour pour donner le meilleur de lui-même

Hors ligne

Hors ligne

#5 Le 08/01/2023, à 11:26

P'skhal
Explorateur
Lieu : Au-delà du portail
Inscription : Le 18/08/2016,
Messages : 37 482

Re : Réalisez un adaptateur USB / Ethernet...

lol  lol  lol  wink


“ Aujourd'hui plus qu'hier et bien moins que demain „

P'skhal

#5 Le 08/01/2023, à 11:26

Explorateur
Lieu : Au-delà du portail
Inscription : Le 18/08/2016,
Messages : 37 482

lol  lol  lol  wink


“ Aujourd'hui plus qu'hier et bien moins que demain „

Hors ligne

Hors ligne

#6 Le 08/01/2023, à 11:29

M'lou
MétalWoman
Lieu : Quelque part dans la Galaxie
Inscription : Le 18/08/2016,
Messages : 41 818

Re : Réalisez un adaptateur USB / Ethernet...

lol     wink


L'amour est comme un jardin, il doit se cultiver chaque  jour pour donner le meilleur de lui-même

M'lou

#6 Le 08/01/2023, à 11:29

MétalWoman
Lieu : Quelque part dans la Galaxie
Inscription : Le 18/08/2016,
Messages : 41 818

lol     wink


L'amour est comme un jardin, il doit se cultiver chaque  jour pour donner le meilleur de lui-même

Hors ligne

Hors ligne

Pied de page des forums