Brevet FR2898752A1 — publié le 20070921

Procédé et dispositif d'assemblage de paquets de données. 1. Domaine de l'invention. La présente invention concerne le domaine des télécommunications et plus précisément la réception de paquets à haut débit. 2. Arrière-plan technologique. Selon l'état de la technique, des procédés de transmission de paquets de données mettent en oeuvre des mécanismes de découpage de paquets en blocs de données coté émetteur puis de réassemblage des blocs en paquets coté récepteur. Dans la couche MAC (de l'anglais Medium Access Control ou Contrôle d'accès au médium ), les données à transmettre ou MSDU (de l'anglais MAC Service Data Unit ou unité de données de services MAC ) sont encapsulées dans des PDU (ou unité de données de protocole de l'anglais Protocol Data Unit ) avec un entête MAC. Lorsque des MSDU sont transmis, ils peuvent être fragmentés, une ou plusieurs parties (ou fragments) d'un MSDU étant transmises dans un même PDU, les parties restantes étant transmises dans un ou plusieurs autres PDU). Un PDU peut également comprendre des fragments de MSDU différents. Un tel procédé mis en oeuvre par un microprocesseur d'une station réceptrice compatible avec une norme IEEE802.16 est illustré en regard de la figure 1 et commence par une étape d'initialisation 10. Puis, au cours d'une étape 11, un ou plusieurs paquets de données correspondants à un MSDU associé à un ensemble de blocs sont reçus. Ensuite, au cours d'une étape 12, la station identifie les blocs reçus correctement. Puis, au cours d'une étape 13, le microprocesseur essaie d'assembler les blocs reçus en MSDU. L'étape 13 commence par une étape 130 d'initialisation d'un bloc courant pointant sur le premier bloc reçu. Ensuite, au cours d'un test 131, le microprocesseur vérifie si le bloc courant est valide (à l'aide par exemple d'un code de détection d'erreur). Dans la négative, l'étape 13 se termine avec un statut d'échec d'assemblage de MSDU. Dans l'affirmative, au cours d'une étape 132, le microprocesseur construit un MSDU en y insérant le bloc courant. Ensuite, au cours d'un test 133, le microprocesseur vérifie si le bloc courant est le dernier bloc du MSDU. Dans l'affirmative, l'étape 13 se termine avec succès, un MSDU étant assemblé. Dans la négative, au cours d'une étape 134 le bloc courant pointe sur le bloc suivant reçu et le test 131 est réitéré. Ainsi, le processus d'assemblage des MSDU est relativement long puisque le nombre d'opérations élémentaires est élevé (au moins trois fois (correspondant aux étapes 131 à 133) le nombre de blocs présents dans un MSDU, chacun de ces blocs étant testés par le microprocesseur). Cette technique présente donc l'inconvénient d'être mal adaptée aux applications requérant une forte réactivité (par exemple applications de type transmission d'un flux audiovisuel). 3. Résumé de l'invention. L'invention a pour but de pallier ces inconvénients de l'art antérieur. Plus particulièrement, l'invention a pour objectif d'améliorer les 15 performances d'un système de communication (par exemple, la vitesse et/ou la simplicité de l'assemblage d'un MSDU). A cet effet, l'invention propose un procédé d'assemblage de blocs de données pour former au moins un paquet de données, comprenant les étapes suivantes : 20 - écriture dans un premier registre d'au moins un premier descripteur de blocs de données, chaque premier descripteur comprenant des informations représentatives d'un statut de chaque bloc appartenant à un ensemble de blocs, le statut de chaque bloc indiquant si le bloc a été mémorisé ou non ; 25 -détermination et enregistrement dans un deuxième registre, d'un statut d'au moins une partie de l'ensemble, le statut étant représentatif de l'état de mémorisation ou non des blocs dans la partie de l'ensemble ; -assemblage d'un paquet contenant les blocs de l'ensemble en 30 fonction du statut enregistré dans le deuxième registre. Avantageusement, l'étape de détermination d'un statut est une étape élémentaire effectuée en au plus un nombre de cycles d'horloge strictement inférieur à la taille du premier registre exprimée en nombre de données binaires et, encore plus avantageusement, en au plus un cycle 35 d'horloge. Selon une caractéristique préférée, l'écriture du premier registre entraîne une mise à jour purement électronique du deuxième registre. Avantageusement, le procédé comprend également une étape de détermination de la position d'un premier bloc de paquet, cette étape comprenant les étapes suivantes : - écriture dans un troisième registre d'au moins un deuxième descripteur de premier bloc, chaque deuxième descripteur comprenant des informations indiquant, pour chaque bloc, s'il s'agit d'un premier bloc de paquet ou non ; et - détermination du premier bloc dans un paquet à partir du contenu du troisième registre et enregistrement d'un identifiant du premier bloc dans un quatrième registre ; l'assemblage d'un paquet contenant les blocs de l'ensemble étant effectué en fonction de l'identifiant enregistré dans le quatrième registre. Avantageusement, l'étape de détermination du premier bloc dans un paquet est une étape élémentaire effectuée en au plus un nombre de cycles d'horloge strictement inférieur à la taille du troisième registre exprimée en nombre de données binaires. Selon une caractéristique avantageuse, le procédé comprend une étape de détermination de la position d'un dernier bloc de paquet, cette étape comprenant les étapes suivantes : - écriture dans un cinquième registre d'au moins un troisième descripteur de dernier bloc, chaque troisième descripteur comprenant des informations indiquant, pour chaque bloc, s'il s'agit d'un dernier bloc de paquet ou non ; et - détermination du dernier bloc dans un paquet à partir du contenu du cinquième registre et enregistrement d'un identifiant du dernier bloc dans un paquet à transmettre dans un sixième registre ; l'assemblage d'un paquet contenant les blocs de l'ensemble étant effectué en fonction de l'identifiant enregistré dans le sixième registre. Avantageusement, l'étape de détermination du dernier bloc dans un paquet est une étape élémentaire effectuée en au plus un nombre de cycles d'horloge strictement inférieur à la taille du cinquième registre exprimée en nombre de données binaires. Selon une caractéristique particulière, les étapes de détermination du dernier paquet et de détermination d'un statut sont simultanées. Préférentiellement, la détermination du nombre de blocs dans un paquet à assembler en fonction du contenu des quatrième et sixième registres. Selon une caractéristique avantageuse, les étapes de détermination d'un statut et de détermination du dernier bloc sont réitérées tant que le statut mémorisé dans le deuxième registre indique que des paquets sont mémorisés et/ou qu'un dernier bloc de paquet n'a pas été identifié. Selon des caractéristiques particulières, le statut enregistré dans le deuxième registre appartient à un ensemble qui comprend : - statut d'assemblage de paquet possible ; - statut d'assemblage de paquet non possible parce que la fin du paquet n'a pas été détectée ; et - statut d'assemblage de paquet non possible parce qu'au moins une partie du paquet n'est pas mémorisée et/ou reçue. Avantageusement, le procédé comprend une étape de réception de blocs de données, le statut associé à chaque bloc indiquant si le bloc a été correctement reçu ou non. Selon une caractéristique particulière, les blocs sont reçus dans 20 des trames de données émises sur un canal sans fil, par exemple, suivant un protocole de communication IEEE802.16. L'invention concerne également un dispositif d'assemblage de blocs de données pour former au moins un paquet de données, le dispositif comprenant : 25 - des moyens d'écriture dans un premier registre d'au moins un premier descripteur de blocs de données, chaque premier descripteur comprenant des informations représentatives d'un statut de chaque bloc appartenant à un ensemble de blocs, le statut de chaque bloc indiquant si le bloc a été mémorisé ou 30 non ; - des moyens de détermination et d'enregistrement dans un deuxième registre, d'un statut d'au moins une partie de l'ensemble, le statut étant représentatif de l'état de mémorisation ou non des blocs dans la partie de l'ensemble ; 35 - des moyens d'assemblage d'un paquet contenant les blocs de l'ensemble en fonction du statut enregistré dans le deuxième registre. 4. Liste des figures. L'invention sera mieux comprise, et d'autres particularités et avantages apparaîtront à la lecture de la description qui va suivre, la description faisant référence aux dessins annexés parmi lesquels : la figure 1 illustre une mise en oeuvre d'une transmission de paquets connue en soi ; la figure 2 représente un réseau de communication selon un mode particulier de réalisation de l'invention ; la figure 3 illustre schématiquement un appareil du réseau de communication de la figure 2, selon un mode particulier de réalisation de l'invention ; les figures 4 à 6 et 9 présentent un procédé de réception mis en oeuvre dans l'appareil de la figure 3 ; la figure 7 illustre la fragmentation de paquets traités par l'appareil de la figure 3 ; et la figure 8 donne un exemple de l'évolution de contenu de registres mis en oeuvre dans l'appareil de la figure 3. 5. Description détaillée de l'invention. La figure 2 représente un réseau de communication 2 selon un mode particulier de réalisation de l'invention. Le réseau 2 est, par exemple, un réseau sans fil du type IEEE802.16 et comprend : - un point d'accès 20 ; - des terminaux 21 et 22. Le point d'accès 20 est apte à émettre ou recevoir des MSDU à destination les terminaux 21 et 22 sur le lien sans fil. La figure 7 présente schématiquement la structure de deux MSDU 70 et 71. Ainsi, à titre illustratif, le MSDU 70 comprend n blocs 700 à 70n et le MSDU 71 comprend m blocs 710 à 71m. Un premier PDU 73 comprend des blocs correspondant à un MSDU non représenté et les premiers blocs du MSDU 70. Un second PDU 74 comprend les blocs suivants du MSDU 70 ainsi que l'intégralité des blocs du MSDU 71. Quand les PDU sont transmis dans des trames radio selon la norme IEEE802.16, des entêtes permettent d'identifier les débuts de PDU et leur taille. Des sous-entêtes permettent également d'identifier le premier bloc, le dernier bloc et les éventuels blocs intermédiaires de chaque MSDU ainsi que la taille de chaque bloc MSDU. La figure 3 illustre schématiquement un appareil 3 correspondant au point d'accès 20 ou à l'un des terminaux 21 et 22. L'appareil 3 comprend, reliés entre eux par un bus 34 d'adresses et de données, transportant également un signal d'horloge : - un microprocesseur 31 (ou CPU) ; - une mémoire non volatile de type ROM (de l'anglais Read Only Memory ) 32 ; - une mémoire vive ou RAM (de l'anglais Random Access Memory ) 33 ; - un module 35 de transmission d'un signal sur le lien sans fil ; - un module 36 de réception d'un signal sur le lien sans fil ; et - un module 37 de gestion de blocs reçus. Par ailleurs, chacun des éléments 31 à 36 est bien connu de l'homme du métier. Ces éléments communs ne sont pas décrits ici. On observe que le mot registre utilisé dans la description désigne dans chacune des mémoires mentionnées, aussi bien une zone de mémoire de faible capacité (quelques données binaires) qu'une zone mémoire de grande capacité (permettant de stocker un programme entier ou tout ou partie des données représentatives d'un service audio/vidéo reçu). La mémoire ROM 32 comprend notamment un programme prog 320 . Les algorithmes mettant en oeuvre les étapes du procédé décrit ci-après sont stockés dans la mémoire ROM 32 associée à l'appareil 3 mettant en oeuvre ces étapes. A la mise sous tension, le microprocesseur 31 charge et exécute les instructions de ces algorithmes. La mémoire vive 33 comprend notamment : - dans un registre 330, le programme de fonctionnement du microprocesseur 31 chargé à la mise sous tension de l'appareil 3 ; - N descripteurs de premiers blocs MSDU mémorisés et/ou reçus dans des registres 3311 à 331 N ; - N descripteurs de derniers blocs MSDU mémorisés et/ou reçus dans des registres 3321 à 332N ; - N descripteurs de blocs MSDU mémorisés et/ou reçus correctement dans des registres 3331 à 333N ; 35 - des données (par exemple audiovisuelles et/ou de type fichier) et/ou PDU contenant ces données dans un registre 334 ; - un compteur d'index 335 ; - une taille de MSDU courant 336 ; et - un pointeur sur un descripteur de MSDU courant dans un registre 337. Le module 37 de gestion de blocs reçus comprend : - un module 370 comprenant des registres 3700 à 3702 destinés notamment à l'écriture par le CPU 31 de descripteurs respectivement de premiers blocs, de derniers blocs et de blocs reçus correctement, chacun des registres 3700 à 3702 ayant sa propre adresse pour être accessible en écriture par le CPU 31 via le bus 34 ; - un module 371 comprenant un registre 3710 identifiant le rang (ou numéro) de premier bloc du MSDU courant, un registre 3711 identifiant le dernier bloc du MSDU courant et un registre 3712 de statut correspondant à un MDSU courant, les registres 3710 à 3712 ayant chacun leur propre adresse pour être accessible en lecture par le CPU 31 via le bus 34 ; et - un module 372 de détermination du contenu des registres du module 371 à partir des registres du module 370. Selon l'invention, le module 37 est un bloc électronique comprenant un ou plusieurs composants discrets (par exemple du type ASIC ou composants programmables) ou inséré totalement ou en partie dans un composant comprenant d'autres fonctions (par exemple ASIC comprenant les mémoires 32 et/ou 33 et/ou le CPU 31). Selon le mode de réalisation décrit, les descripteurs comprennent 32 bits. Selon des variantes de réalisation de l'invention, les descripteurs ont une taille fixe différente de 32 bits (pouvant aller de quelques bits (par exemple 8) à plusieurs centaines ou milliers de bits) ou une taille variable. Typiquement, chaque bit du descripteur correspond à un bloc reçu et sa signification dépend du type de descripteur: - dans les descripteurs de premiers (respectivement derniers) blocs, un bit à 1 correspond à un premier (respectivement dernier) bloc de MSDU et un bit à o à l'absence d'un bloc ou à un bloc qui n'est pas le premier (respectivement dernier) bloc d'un MSDU ; et - dans les descripteurs de blocs mémorisés et/ou reçus, un bit à 1 correspond à un bloc MDSU mémorisé et/ou reçu. Bien entendu, selon l'invention, d'autres significations ou valeurs (par exemple valeurs opposées à celles précédemment décrites) et d'autres formats (par exemple plusieurs bits pour chacun des descripteurs, et/ou les trois types de descripteurs regroupés en un ou deux types de descripteurs) sont possibles. Pour des raisons de clarté, on ne décrit ici que les descripteurs relatifs aux premiers ou derniers blocs de MSDU ainsi qu'aux blocs mémorisés et/ou reçus. D'autres descripteurs peuvent être mis en oeuvre notamment des descripteurs de connexions relatifs à chaque application. Les descripteurs de blocs décrits sont mis à jour, notamment, lors d'une réception d'une trame contenant un ou plusieurs PDU. Le module 372 est mis en oeuvre sous forme électronique et préférentiellement sous forme de circuits logiques dans un composant programmable (par exemple tableau de portes (ou gatearray en anglais), PLD (de l'anglais Programmable Logic Device ou composant logique programmable)) ou dans un ASIC. Un tel circuit est, par exemple obtenu et optimisé, par une définition VHDL de son contenu, correspond, par exemple, à des équations logiques correspondant à l'algorithme illustré en figure 9. Une telle mise en oeuvre du module 372 présente l'avantage de comprendre des fonctions logiques simples et requérant relativement peu de portes logiques. Par ailleurs, le module 372 lit directement dans les registres 3700 à 3702 les descripteurs dont il convertit la valeur en un numéro de premier bloc, un numéro de dernier bloc et en un statut. Ces derniers sont automatiquement stockés dans les registres respectifs 3710 à 3712 par le module 372. Ainsi, le contenu des registres 3700 à 3702 est quasiment immédiatement déterminé, avec un résultat enregistré dans les registres 3710 à 3712. De cette manière, en au plus un nombre de cycles d'horloge strictement inférieur à la taille des registres 3700 à 3702 exprimée en nombre de données binaires (soit 32) et préférentiellement, en moins d'un cycle d'horloge, suivant l'écriture dans le registre 3702, les registres 3710 à 3712 sont mis à jour. Le CPU 31 écrivant un descripteur dans le registre 3702 peut donc lire dès le cycle d'horloge suivant le contenu des registres 3710 à 3712. La figure 4 illustre schématiquement un algorithme de réception de paquets de données mis en oeuvre dans l'appareil 3. Au cours d'une première étape 40, l'appareil 3 initialise ses différents composants et variables. Puis, au cours d'une étape 41, l'appareil 3 attend puis reçoit une trame de données comprenant n PDU qui ont été transmises sur le médium sans fil, n représentant un nombre entier non nul. Ensuite, au cours d'une étape 42, l'appareil 3 effectue une cartographie des premiers et derniers blocs de MSDU, et des blocs de MSDU reçus correctement en mettant à jour les descripteurs 3311 à 331N, 3321 à 332N et 3331 à 333N de la mémoire 33. Puis, au cours d'une étape 43, l'appareil 3 assemble le ou les MSDU correspondant à la trame reçue. L'étape 41 est ensuite réitérée. Ces étapes sont mises en oeuvre en partie par le CPU 31 et en partie par le module 37. La mise en oeuvre de la partie logicielle par le CPU 31 est effectuée préférentiellement sous forme multi-tâche ou pseudo multitâche, les étapes 41, 42 et 43 pouvant être effectuées par des tâches différentes. L'étape 43 peut être effectuée à différents moments ou à l'issue 20 de divers évènements et notamment : - après la réception d'une trame (comme illustré schématiquement sur la figure 4) ; - lors de changements de connexions (notamment si plusieurs applications utilisent les ressources de réception de données 25 de l'appareil 3) ; et/ou - après l'écoulement d'une temporisation déterminée ; - après réception d'une quantité prédéterminé de blocs ; - après réception d'un dernier bloc de MSDU ; et/ou - une combinaison des différents moments et/ou évènements 30 précités (par exemple après réception d'un dernier bloc de MSDU puis écoulement d'une temporisation si des blocs intermédiaires n'ont pas été reçus correctement). La figure 5 détaille l'étape 42 qui commence par une étape 420 de lecture d'entête de trame, cet entête correspondant à un début de PDU 35 selon la norme IEEE802.16. Ensuite, au cours d'une étape 421, le récepteur 3 lit un sous-entête s'il est présent. Puis, au cours d'une étape 422, le microprocesseur 31 met à jour les descripteurs 3311 à 331N de premier bloc et 3321 à 332N de dernier bloc dans la mémoire 33 en fonction du contenu de l'entête et/ou sous entête qui indiquent si les blocs suivants correspondent à des premiers blocs et/ou à des derniers blocs de MSDU. Le microprocesseur 31 met également à jour les descripteurs 3331 à 333N de blocs reçus en fonction des blocs effectivement reçus correctement. Ensuite, au cours d'un test 423, le récepteur 3 vérifie si au moins un autre sous-entête est présent dans le PDU courant et dans l'affirmative l'étape 421 est réitérée (l'étape de lecture 421 et de test 423 pouvant être effectuée simultanément). Dans la négative, au cours d'un test 424, le récepteur 3 vérifie si au moins un autre PDU est présent dans la trame reçue, et dans l'affirmative l'étape 420 est réitérée (l'étape de lecture 420 et de test 424 pouvant être effectuée simultanément). Sinon, l'étape 42 est terminée. La figure 6 présente en détails l'étape 43 d'assemblage de paquets MSDU en utilisant des descripteurs de premier, dernier blocs et de blocs reçus. L'ensemble des blocs reçus possède différents statuts associés, notamment des statuts de premier bloc dans un paquet MSDU, de dernier bloc dans un paquet MSDU et de bloc reçu correctement. Lorsque un entête ou un bloc a été reçu, les statuts sont mis à jour. Le statut de chaque bloc est mémorisé à l'aide des descripteurs de 32 bits dans la mémoire 33, chacun des bits correspondant au statut d'un bloc précis. Ainsi, pour les statuts de premier bloc dans un paquet MSDU, le statut correspondant des 32 premiers blocs reçus est mémorisé dans le descripteur 3311 et le statut des 32 blocs suivants est mémorisé dans le descripteur suivant 3312 et ainsi de suite jusqu'au descripteur 331 N. Pour un nombre maximal de blocs égal à 2048, N vaut 64. Le format des descripteurs 3321 à 332N et 3331 à 333N est similaire à celui des descripteurs 3311 à 331 N. L'étape 43 débute par un test 430, au cours de laquelle le CPU 31 vérifie si un assemblage est requis suivant un critère quelconque (écoulement d'une temporisation, changement de connexion, évènement de déclenchement quelconque, réception d'une trame, ...). Dans la négative, l'étape 43 se termine avec un retour correspondant à un assemblage non requis. Dans l'affirmative, le CPU 31 écrit dans les registres 3700 à 3702 du module 37 le contenu respectif des mémoires 3311, 3321 et 3331 en mémorisant un pointeur 337 de MSDU correspondant au descripteur de premier bloc (pour des raisons de clarté, on a supposé que les descripteurs courants correspondent au contenu des mémoires 3311, 3321 et 3331 ; en pratique, les descripteurs courants peuvent correspondent à des descripteurs quelconques de la mémoire 33). Le module 372 met alors à jour en, préférentiellement, au plus un cycle d'horloge suivant l'écriture dans le registre 3702, le registre de statut 3710. Le CPU 31 initialise également le compteur d'index 335 à 0. Puis, au cours d'un test 432, le CPU lit le statut d'assemblage, mis à jour et présent dans le registre 3710 et vérifie si ce statut correspond à continu . Dans l'affirmative, les blocs qui suivent le premier bloc MSDU identifié par le contenu du registre 3700 sont, au vu du contenu du registre 3702 correctement reçus. En revanche, il n'y a pas de dernier bloc MSDU, identifié parmi le premier bloc MSDU et les blocs suivant. Au cours d'une étape 433, le CPU 31 écrit alors les descripteurs suivants (par exemple 3322 et 3332 lors de la première exécution de l'étape 433) de dernier bloc MSDU et de blocs correctement reçus, dans les registres respectivement 3701 et 3702. Le module 372 met alors à jour en au plus un nombre de cycles d'horloge strictement inférieur à la taille des registres 3700 à 3702, exprimée en nombre de bits (soit 32), et, préférentiellement, en au plus un cycle d'horloge suivant l'écriture dans le registre 3702, le registre de statut 3710. Le CPU 31 incrémente également d'une unité le compteur d'index 335. Le statut correspond à des valeurs prédéterminées par exemple, sur trois bits : - un premier bit correspondant à un statut de succès, étant à 1 si un MSDU peut être assemblé (dernier bloc déterminé et blocs entre le premier et le dernier blocs inclus correctement reçus), et 0 dans le cas contraire ; - un deuxième bit correspondant à un statut d'échec, étant à 1 si au moins un bloc parmi les blocs qui suivent le premier bloc et précèdent le dernier bloc d'un paquet MSDU à assembler et qui sont associés au descripteur courant de blocs correctement reçus n'a pas été bien reçus, et 0 dans le cas contraire ; 35 - un troisième bit correspondant à un statut continu étant à 1 si tous les blocs qui suivent le premier bloc et précèdent un éventuel dernier bloc (correspondant au descripteur de dernier bloc courant) d'un paquet MSDU à assembler et qui sont associés au descripteur courant de blocs correctement reçus ont été bien reçus, et 0 dans le cas contraire. Si le résultat du test 432 est négatif, au cours d'un test 434, le CPU 31 vérifie si le statut d'assemblage correspond à un succès. Dans la négative, l'étape 43 se termine avec un retour correspondant à un assemblage en échec, des blocs du MSDU identifié par son premier bloc n'ayant pas été correctement reçus. Dans l'affirmative, tous les blocs du MSDU identifié par son premier bloc et son dernier ont été reçus correctement et ce MSDU peut être assemblé. Ainsi, au cours d'une étape 434 le CPU 31 lit le rang du premier bloc dans le registre 3710 ; le CPU 31 a mémorisé dans le registre 337, au moment de l'écriture dans le registre 3700, à quel ensemble de 32 blocs, le premier bloc correspond ; ainsi, le premier bloc du MSDU courant est parfaitement identifié par son rang dans le descripteur de premier bloc et la correspondance entre ce descripteur et les données reçues. Le CPU 31 lit également le rang du dernier bloc dans le registre 3711. Puis, au cours d'une étape 436, le CPU 31 calcule la taille 336 du MSDU à assembler, cette taille exprimée en nombre de blocs étant égale à la taille d'un descripteur (32 selon l'exemple illustré) multipliée par la valeur du compteur d'index 335 à laquelle on ajoute la valeur du rang du dernier bloc plus 1 et on retire la valeur du rang du premier bloc, soit en résumé : taille MSDU = 32.compteur+ registre 3711- registre 3710 +1. Le paquet MSDU est ainsi assemblé par le CPU 31 en fonction de l'identifiant de premier bloc MSDU et du nombre de blocs MSDU calculé. Afin de simplifier la mise en oeuvre de l'invention, la taille des blocs est préférentiellement la même pour tous les blocs (sauf éventuellement pour le dernier bloc d'un MSDU). Le CPU 31 transmet alors à l'application destinataire, les données du MSDU assemblé (ou un pointeur sur ces données) et l'étape 43 est terminée. Selon une variante de l'invention particulièrement bien adaptée lorsque les blocs ne sont pas tous de la même taille, la taille d'un MSDU est exprimée en octets. Le compteur d'index est alors exprimé également en octets et mis à jour en tenant compte de la taille effective de chaque bloc (par exemple en fonction de la taille exprimée en octets qui est indiquée dans un sous-entête). Selon une autre variante de l'invention, le MSDU assemblé est identifié à l'aide d'un pointeur sur son premier bloc et un pointeur sur son dernier bloc, ce dernier étant calculé préférentiellement à l'aide du pointeur sur le premier bloc auquel on ajoute la taille d'un descripteur (32 selon l'exemple illustré) multipliée par la valeur du compteur d'index 335 et la valeur du rang du dernier bloc et on à laquelle on retire la valeur du rang du premier bloc. A titre illustratif, la figure 8 donne un exemple de l'évolution de contenu de registres correspondant à des descripteurs particuliers. Lorsque l'appareil 3 reçoit une trame radio, le CPU 31 écrit dans la mémoire 33, les descripteurs correspondant. Ainsi, par exemple, un descripteur 800 de premier bloc MSDU comprend des valeurs 00000101H en notation hexadécimale (dans les descripteurs représentés en binaire sur la figure 8, les bits de poids faibles ou LSB sont représentés à gauche dans le sens des rangs de blocs croissants), un descripteur 801 de dernier bloc comprend 00000080H et un descripteur de blocs correctement reçus comprend FFFFFFFFH. Après écriture des descripteurs 800 à 802 dans les registres respectivement, 3700 à 3702, le registre de premier bloc 3710 contient la valeur 0 (le bit de rang 0 du descripteur 800 étant à 1), le registre de dernier bloc 3711 contient 7 (le bit de rang 7 du descripteur 801 étant à 1 et tous les bits de rang 0 à 6 étant à 0) et le registre de statut d'assemblage 3712 indiquant un succès de l'assemblage (tous les bits de rang 0 à 7 du descripteur 802 étant à 1). La taille du MSDU exprimée en nombre de blocs est égale à 32xCompteur+7-0+1 soit 8. Un MSDU de taille 8dont le premier bloc correspond au bit 0 du descripteur 800 peut alors être transmis à l'application destinataire. Les descripteurs sont alors mis à jour. Le descripteur de dernier bloc précédent ne pointant pas sur le dernier élément de ce descripteur, on reste sur le même ensemble de 32 blocs. Ainsi, le descripteur courant de premier bloc 810, de dernier bloc 811 et de blocs reçus contiennent respectivement les valeurs 00000100H, 35 00000000H et FFFFFFFFH. Après écriture des descripteurs 810 à 812 dans les registres respectivement, 3700 à 3702, le registre de premier bloc 3710 contient la valeur 8 (le bit de rang 8 du descripteur 810 étant à 1) et le registre de statut d'assemblage 3712 indiquant un statut continu (aucun bits du descripteur 811 étant à 1 et tous les bits de rang 8 à 31 du descripteur 812 étant à 1). La valeur du compteur d'index vaut alors 1. Les descripteurs suivant de dernier bloc 821 et de blocs reçus 822 contiennent respectivement des valeurs 0080000000H et 08FFFFFFH. Après écriture des descripteurs 821 et 822 dans les registres respectivement, 3701 et 3702, le registre de dernier bloc 3711 contient la valeur 11 (les bits de rang 0 à 10 du descripteur 821 étant à 0 et le bit de rang 11 étant à 1) et le registre de statut d'assemblage 3712 indiquant un statut échec (des bits de rang 0 à 11 du descripteur 822 étant à 0). La valeur du compteur d'index reste égale à 1. Les descripteurs suivant de dernier bloc 821 et de blocs reçus 824 contiennent respectivement des valeurs 0080000000H et FFFFFFFFH. Après écriture des descripteurs 821 et 824 dans les registres respectivement, 3701 et 3702, le registre de dernier bloc 3711 contient la valeur 11 et le registre de statut d'assemblage 3712 indiquant un statut de succès (tous les bits de rang 0 à 11 du descripteur 822 valant 1). La valeur du compteur d'index reste égale à 1. Un MSDU dont le 1er bloc correspond au bit de rang 8 du descripteur 800 et qui a pour taille 32xcompteur d'index + 11-8+1 soit 36 peut alors être transmis à l'application. La figure 9 présente un algorithme mis en oeuvre par le module 37 pour la mise à jour des registres 3710 à 3712. Après une étape d'initialisation 90, au cours d'une étape 91, le module 37 attend une écriture dans le registre de premier bloc 3700. Puis, au cours d'une étape 92, le module 37 recherche un premier bloc de MSDU. Pour cette opération, le registre 3700 est lu, le premier bit à 1 est recherché et son rang est mémorisé dans le registre 3710. L'opération de conversion du contenu du descripteur 3700 en une valeur de rang de premier bit à 1 est particulièrement bien adaptée à une mise en oeuvre purement matérielle (ou hardware en anglais) par un ou plusieurs circuits logiques ou encore par une partie de circuit logiques. Pour cela, on peut, par exemple, utiliser une conversion de table d'état. Un premier masque de 32 bits dont les bits de rang strictement inférieur au rang du premier bit identifié sont à 0 et tous les autres bits à 1 est créé. Un booléen de synchronisation indiquant que le contenu du registre 3700 est en phase avec le contenu des registres 3701 et 3702 est initialisé à 1. Ensuite, au cours d'une étape 93, le module 37 attend une écriture dans les registres 3701 et 3702. Lorsque ces registres sont mis à jour, le module 37 recherche si le registre 3701 contient un 1 de rang supérieur ou égal au rang du premier bloc. Pour cela, il effectue une opération ET bit à bit avec le premier masque et une recherche du premier bit à 1 est effectuée sur le résultat de l'opération ET . Cette recherche est préférentiellement effectuée de la même manière que la recherche du rang du premier bloc. Au cours d'une étape 94, le module 37 recherche la présence 10 d'un dernier bloc MSDU dans le registre 3701 et au cours d'un test 95, il vérifie si un rang de dernier bloc a été trouvé. Dans la négative, au cours d'un test 99, le module 37 vérifie si les bits du registre 3702 de rang supérieur ou égal au rang du premier bloc si le premier bloc correspond au descripteur courant (booléen de synchronisation 15 à 1) ou à 0 si le premier bloc correspond à un descripteur précédent (booléen de synchronisation à 0) sont tous égaux à 1. Pour cela, il effectue : - une opération ET avec FFFFFFFFH si le booléen de synchronisation est à 0 ; - une opération OU bit à bit avec l'inverse du premier 20 masque pour mettre à 1 les éventuels bits positionnés avant le bit de rang correspondant au premier bloc, puis une opération ET bit à bit entre le résultat de l'opération OU et FFFFFFFFH. Une opération ET sur l'ensemble des bits du résultat de cette opération 25 est effectuée. Si le résultat est égal à 1, à partir du premier bloc reçus, tous les blocs correspondant au descripteur courant sont correctement reçus. Si le résultat du test 99 est positif, alors, au cours d'une étape 911, le registre 3712 est alors mis à jour avec un statut correspondant à continu. 30 Puis, au cours d'une étape 912, le premier masque est mis à jour avec une valeur 0 et l'étape 93 est réitérée. Suite à un résultat positif du test 95, au cours d'un test 96, le module 37 vérifie si les bits du registre 3702 de rang supérieur ou égal au rang du premier bloc si le premier bloc correspond au descripteur courant 35 (booléen de synchronisation à 1) ou à 0 si le premier bloc correspond à un descripteur précédent (booléen de synchronisation à 0), et de rang inférieur ou égal au rang du dernier bloc sont tous égaux à 1. Pour cela, il met d'abord à jour un deuxième masque dont les bits de rang inférieur ou égal au rang du dernier bit sont égaux à 1 et les autres bits sont égaux à O. Puis, le module 37 effectue une opération OU bit à bit avec le contenu du registre 3702, puis avec ce résultat, il effectue - une opération ET avec FFFFFFFFH si le booléen de synchronisation est à 0 ; - une opération OU bit à bit avec l'inverse du premier masque pour mettre à 1 les éventuels bits positionnés avant le bit de rang correspondant au premier bloc, puis une opération ET bit à bit entre le résultat de l'opération OU et FFFFFFFFH. Une opération ET sur l'ensemble des bits du résultat de cette opération est effectuée. Si le résultat est égal à 1, tous les blocs correspondant au descripteur courant sont correctement reçus entre les premier et dernier blocs inclus. Alors, au cours d'une étape 97, la valeur du rang du dernier bloc est mémorisée dans le registre 3711, le registre 3712 correspondant à un statut de succès est mis à jour. Une lecture ultérieure du registre de premier bloc 3700 permet au CPU 37 de connaître l'état du descripteur correspondant après une indication de succès d'assemblage. La mise à jour du registre 3700 est préférentiellement automatique lors, notamment, de l'écriture d'un statut du type succès dans le registre 3712 (étape 97) et/ou d'une lecture du registre 3700 (opération pouvant être indépendante de l'étape 97). Elle est, par exemple, effectuée par le module 372 après application d'une opération ET entre le contenu courant du registre 3700 et d'un masque de 32 bits comprenant des 1 sauf à l'emplacement du premier bloc défini par le contenu du registre 3710. Ainsi, le registre 3700 contient un 0 à la place du 1 au rang correspondant au contenu du registre 3710. Suite à l'étape 97, l'étape 91 est réitérée Si le résultat n'est pas égal à 1 au cours des tests 96 ou 99, au moins un bloc correspondant au descripteur courant n'est pas correctement reçu entre les premier et dernier blocs inclus. Alors, au cours d'une étape 98, le registre 3712 est mis à jour avec un statut correspondant à un échec. Suite à une lecture du registre 3712, l'une des étapes 91 ou 92 est réitérée. En effet, l'étape 92 peut être réitérée directement sans attendre la mémorisation de nouveaux blocs puisque des blocs suivants les blocs mal reçus ou mémorisés peuvent permettre l'assemblage d'un MSDU. Suivant certains modes de réalisation, suite à l'étape 98, l'étape 91 est systématiquement réitérée. Selon d'autres modes de réalisation, le choix entre l'étape 91 et l'étape 92 se fait par une commande logicielle, une configuration électronique et/ou un paramétrage quelconque. Bien entendu, l'invention ne se limite pas aux modes de réalisation décrits précédemment. En particulier, l'architecture de l'appareil d'émission/réception peut être différente de celle illustrée en figure 3, dans la fonction respective et/ou la forme des éléments (les fonctions des éléments électroniques peuvent notamment être regroupées dans un nombre restreint de composants ou, au contraire, éclatés dans plusieurs composants) et leur agencement. En outre, le module de gestion de blocs reçus peut aussi avoir une structure différente, les fonctions de traduction pouvant être notamment intégrées à l'un des modules associés aux registres. Par ailleurs, selon l'invention, le module de gestion de blocs reçus peut être associé à l'ensemble des descripteurs ou, au contraire, l'appareil peut comprendre plusieurs modules de gestion de blocs reçus, chacun de ces modules étant associé à un ou plusieurs descripteurs. L'invention ne se limite pas non plus à la réception de données suivant une norme de communication sans fil (par exemple IEEE802.16) mais concerne également tout mode de réception de paquets de données utilisant des descripteurs de blocs de paquets reçus. De plus, selon des variantes de l'invention, les descripteurs de paquets reçus ne sont pas nécessairement associés à des descripteurs de premiers paquets MSDU, derniers paquets MSDU et paquets reçus correctement mais correspondent à tout type de statuts particuliers permettant un réassemblage de paquets de données dont les blocs sont mémorisés. Selon une variante de l'invention, le module électronique de gestion de blocs ne met en oeuvre que une ou deux des fonctions de détermination du premier bloc MSDU, de dernier bloc MSDU et de blocs reçus correctement ayant ou n'ayant pas une valeur prédéterminée à partir d'un rang particulier ou jusqu'à un rang particulier. Ainsi, par exemple, selon des variantes, le module électronique 370 met en oeuvre des registres accessibles en écriture qui correspondent respectivement à : - un numéro de premier bloc de paquet (par exemple bloc dit BSN ( Bloc Sequence Number en anglais ou numéro de séquence bloc ) selon la norme IEEE 802.16) ; - un numéro de dernier bloc de paquet (par exemple bloc dit BSN selon la norme IEEE 802.16) ; - un descripteur de blocs correctement mémorisés ou reçus ; et - un numéro de bloc correspondant au premier bit (ou champ) du descripteur de blocs correctement mémorisés ou reçus. Selon une variante, le dernier registre (numéro de bloc correspondant au premier bit (ou champ) du descripteur de blocs correctement mémorisés ou reçus) est omis, sa valeur pouvant correspondre, par défaut à celle du premier registre (numéro de premier bloc de paquet). Dans ces modes de réalisation, seul le registre de statut est mis à jour par le module électronique de gestion de blocs. En outre, l'invention ne se limite pas aux transmissions sans fil mais concerne toutes les transmissions sur un médium quelconque, et notamment sur des canaux filaires bruités ou sur un canal d'enregistrement. Selon le mode de réalisation décrit, le module électronique 370 contient un seul registre de premier bloc, un seul registre de dernier bloc et un seul registre de dernier bloc reçu. Selon des variantes de l'invention, le module 370 contient plusieurs descripteurs relatifs à un, deux ou trois de ces registres ou encore va lire directement dans la mémoire 33 le contenu de ces registres, un pointeur sur un premier descripteur étant fourni par le CPU et/ou configuré par défaut. Selon cette variante, le module 370 peut alors automatiquement rechercher le dernier bloc d'un MSDU si tous les blocs intermédiaires sont correctement reçu et contenir un registre de compteur d'index qu'il incrémente automatiquement. Le CPU peut alors lire directement dans ce registre de compteur d'index une information représentative de la taille d'un MSDU qui peut être assemblé et obtenir un statut de succès même sans aller lire le registre de statut. Dans ce cas, le statut continu n'apparaît que si aucun descripteur valide présent ne comprend d'identificateur de dernier bloc MSDU suite à l'identification d'un premier bloc de MSDU suivi par des blocs correctement reçus. Selon d'autres modes de réalisation pouvant être avantageusement combinés avec les variantes précédemment décrites, le module 370 contient plusieurs registres résultats de même nature afin de permettre la mémorisation en parallèle de plusieurs statuts correspondant à des MSDU distincts : ainsi, on peut avoir des quadruplets de registres résultats incluant, pour chaque MSDU identifié par la présence d'un premier bloc (et/ou d'un dernier bloc) : un registre indiquant le rang d'un premier bloc, un registre indiquant le rang d'un dernier bloc, un registre indiquant le statut (assemblage possible ou non et, éventuellement la raison de l'assemblage non possible) d'un MSDU et taille du MSDU. De cette manière, la détermination des MSDU pouvant être assemblés se fait essentiellement avec le ou les modules électroniques, le CPU étant peu ou pas sollicité. REVENDICATIONS 1. Procédé d'assemblage de blocs de données pour former au moins un paquet de données, caractérisé en ce qu'il comprend les étapes suivantes : -écriture (42) dans un premier registre d'au moins un premier descripteur (3702) de blocs de données, chaque premier descripteur comprenant des informations représentatives d'un statut de chaque bloc appartenant à un ensemble de blocs, le statut de chaque bloc indiquant si ledit bloc a été mémorisé ou non ; - détermination et enregistrement (97, 98, 911) dans un deuxième registre (3712), d'un statut d'au moins une partie dudit ensemble, ledit statut étant représentatif de l'état de mémorisation ou non des blocs dans ladite partie dudit ensemble ; - assemblage (43) d'un paquet contenant lesdits blocs dudit ensemble en fonction dudit statut enregistré dans ledit deuxième registre. 2. Procédé selon la revendication 1, caractérisé en ce que ladite étape de détermination d'un statut est une étape élémentaire effectuée en au plus un nombre de cycles d'horloge strictement inférieur à la taille du premier registre exprimée en nombre de données binaires. 3. Procédé selon la revendication 2, caractérisé en ce que ladite étape de détermination d'un statut est une étape élémentaire effectuée en au plus un cycle d'horloge. 4. Procédé selon l'une quelconque des revendications 1 à 3, caractérisé en ce que l'écriture dudit premier registre entraîne une mise à jour purement électronique dudit deuxième registre. 30 5. Procédé selon l'une quelconque des revendications 1 à 4, caractérisé en ce qu'il comprend une étape de détermination (92) de la position d'un premier bloc de paquet, cette étape comprenant les étapes suivantes : -écriture dans un troisième registre (3700) d'au moins un deuxième descripteur de premier bloc, chaque deuxième descripteur comprenant 35 des informations indiquant, pour chaque bloc, s'il s'agit d'un premier bloc de paquet ou non ; et25- détermination du premier bloc dans un paquet à partir du contenu dudit troisième registre et enregistrement d'un identifiant dudit premier bloc dans un quatrième registre (3710) ; ledit assemblage d'un paquet contenant lesdits blocs dudit ensemble étant effectué en fonction dudit identifiant enregistré dans ledit quatrième registre. 6. Procédé selon la revendication 5, caractérisé en ce que ladite étape de détermination du premier bloc dans un paquet est une étape élémentaire effectuée en au plus un nombre de cycles d'horloge strictement inférieur à la taille du troisième registre exprimée en nombre de données binaires. 7. Procédé selon l'une quelconque des revendications 1 à 6, caractérisé en ce qu'il comprend une étape de détermination de la position d'un dernier bloc de paquet, cette étape comprenant les étapes suivantes : - écriture dans un cinquième registre (3701) d'au moins un troisième descripteur de dernier bloc, chaque troisième descripteur comprenant des informations indiquant, pour chaque bloc, s'il s'agit d'un dernier bloc de paquet ou non ; et - détermination du dernier bloc dans un paquet à partir du contenu dudit cinquième registre et enregistrement d'un identifiant du dernier bloc dans un paquet à transmettre dans un sixième registre (3711) ; ledit assemblage d'un paquet contenant lesdits blocs dudit ensemble étant effectué en fonction dudit identifiant enregistré dans ledit sixième registre. 8. Procédé selon la revendication 7, caractérisé en ce que ladite étape de détermination du dernier bloc dans un paquet est une étape élémentaire effectuée en au plus un nombre de cycles d'horloge strictement inférieur à la taille du cinquième registre exprimée en nombre de données binaires. 9. Procédé selon l'une quelconque des revendications 7 et 8, caractérisé en ce que lesdites étapes de détermination du dernier paquet et de détermination d'un statut sont simultanées. 10. Procédé selon les revendications 5 et 7, caractérisé qu'il comprend une étape de détermination du nombre de blocs dans un paquet à assembler en fonction du contenu desdits quatrième et sixième registres. 11. Procédé selon l'une quelconque des revendications 7 à 9, caractérisé en ce que lesdites étapes de détermination d'un statut et de détermination du dernier bloc sont réitérées tant que le statut mémorisé dans le deuxième registre indique que des paquets sont mémorisés et/ou qu'un dernier bloc de paquet n'a pas été identifié. 12. Procédé selon l'une quelconque des revendications 1 à 11, caractérisé en ce que ledit statut enregistré dans ledit deuxième registre appartient à un ensemble qui comprend : - statut d'assemblage de paquet possible ; -statut d'assemblage de paquet non possible parce que la fin du paquet n'a pas été détectée ; - statut d'assemblage de paquet non possible parce qu'au moins une partie du paquet n'est pas mémorisée ; - statut d'assemblage de paquet non possible parce qu'au moins une partie du paquet n'est pas reçue. 15. Procédé selon l'une quelconque des revendications 1 à 12, caractérisé en ce qu'il comprend une étape de réception de blocs de données et en ce que ledit statut associé à chaque bloc indique si ledit bloc a été correctement reçu ou non. 16. Procédé selon la revendication 13, caractérisé en ce que les blocs sont reçus dans des trames de données émises sur un canal sans fil. 17. Procédé selon la revendication 14, caractérisé en ce que les trames de données sont émises suivant un protocole de communication IEEE802.16. 30 16. Dispositif (3) d'assemblage de blocs de données pour former au moins un paquet de données, caractérisé en ce qu'il comprend : - des moyens d'écriture dans un premier registre (3702) d'au moins un premier descripteur de blocs de données, chaque premier descripteur comprenant des informations représentatives d'un statut de chaque bloc 35 appartenant à un ensemble de blocs, le statut de chaque bloc indiquant si ledit bloc a été mémorisé ou non ;25- des moyens de détermination et d'enregistrement (372) dans un deuxième registre (3712), d'un statut d'au moins une partie dudit ensemble, ledit statut étant représentatif de l'état de mémorisation ou non des blocs dans ladite partie de l'ensemble ; - des moyens d'assemblage d'un paquet contenant lesdits blocs dudit ensemble en fonction dudit statut enregistré dans ledit deuxième registre.