 Je m'appelle Nicolas, je suis un STFA, et dans cette vidéo je vais vous montrer comment développer une application USB PD, donc une application Sync, pour être plus précis, en utilisant les sets ST. Donc, dans mon cas, je vais utiliser l'instaurateur STM42 QxD, et pour le hardware, je vais utiliser le Nucléo-G0 et le TCP-P01 Shield. Alors, commençons. Le step que je suis suivant dans cette vidéo est détaillé dans l'application note AN5418, qui est disponible sur notre site ST.com. Le code que je vais ajouter peut être trouvé dans l'application note, mais aussi dans la description de la vidéo. Pour commencer, on va ouvrir le STM42 QxD et créer un nouveau projet. Nous allons sélectionner un microcontrauteur MCU, qui est le STM42 G071 RBT6, ou RBTX, comme vous pouvez le voir ici-dessous. Donc, ceci est un microcontrauteur sur le Nucléo-G0 que nous allons utiliser. Nous allons ouvrir le STM42 QxD, donc double-cliquer sur l'icône. Nous allons sélectionner notre direction du travail et cliquer « Launch ». Pour créer un projet, vous allez « File », « New » et puis « STM42 Project ». Dans le « Target Selection », selectez « MCU Selector » dans le partenariat, type « STM42 G071 RBT6 » et ici, sélectionnez le RBT6 TX, qui est celui de l'AQFP PIN Package, qui est sur le Nucléo-Ball. Nous allons l'utiliser. Nous allons donner un nom pour le projet, STM42G0.usbpd.sync, pour exemple, et puis finir. Dans l'interface graphique, la première chose que nous allons faire est d'améliorer le Peripheral de la UCPD. Pour faire ça, nous allons activer la UCPD1 dans le mode Sync. Il n'y a pas besoin de sélectionner la batterie, parce que c'est managé par le PCPP01. Nous trouvons dans l'interface graphique les Peripherals de la UCPD, sous la connectivité. Dans le « Pinout Configuration » tab, sélectionnez « Open Connectivity ». Nous allons sélectionner le Sync, parce que nous voulons développer un application Sync. Nous n'envergons pas ceci, donc nous allons le garder en check. C'est modifié pour enlever le DMA pour la UCPD dans les deux réceptions et transmissions. Nous allons ajouter ces deux DMAs. Nous avons aussi besoin d'améliorer les interrupts pour la UCPD et aussi pour les DMAs que nous avons utilisé. Pour améliorer la DMA, nous allons aller au « DMA Settings » et puis ajouter les deux Rx et Tx. Nous allons améliorer les interrupts. Nous allons améliorer la UCPD1 interrupt et puis nous allons améliorer les deux autres pour les DMAs qui sont en train d'améliorer aussi. Quand vous développez une application USBPD de QBamex ou QBid, vous avez besoin d'améliorer le Freer Toss. Donc pour maintenant, vous pouvez utiliser le V1, mais bientôt, le V2 sera supporté. Alors, sélectionnez le Sync V1 quand vous améliorer le Freer Toss et la seule chose qui va changer est le « Hip Size ». Donc le total de « Hip Size » va changer à 5 000 bytes. Nous allons améliorer le Freer Toss donc vous pouvez le trouver sous « Middleware » sélectionnez « Freer Toss » et puis le Sync V1. Maintenant, la seule chose qu'on veut changer c'est de regarder le total de « Hip Size ». Il y a ça. Et au lieu de 3,072, nous allons améliorer à 5 000 bytes. À ce stage, nous pouvons configurer la USBPD « Middleware ». Nous activons le port 0, sélectionnez le PD Free Full Stack et sélectionnez le timer 1 comme source de service timer. Ensuite, nous allons ajouter une PDO pour le Sync. La PDO que nous ajoutons est la « Default 5V Fixed PDO ». Dans la USBPD, donc sous « Middleware », nous allons sélectionner port 0, UCPD 1, compter le PD Free Full Stack et aussi compter le timer 1 pour le source de service timer. Maintenant, dans la PDO, comme vous pouvez le voir, nous avons une PDO et nous allons maintenir le « Default Settings » qui est la « 5V Fixed PDO ». Dans les parameters stack port 0, nous allons faire sure que le premier paket de start-up, ou SOP, est supporté, donc élevé. Et puis nous allons also ensure que la révision 3.0 soit sélectionnée. Dans les parameters stack port 0, nous allons also configurez la PD-1 comme un channel ADC pour convertir la PD-1 parce que sur notre bord, la PD-1 est connectée à deux PD-1s par un voltage divider. Nous allons également configurer la PD-1 avec les following settings, « Clock Prescaler Synchronous Divided by 4 » « Enable the Clock Prescaler Synchronous Divided by 4 » « Enable the Clock Prescaler Synchronous Divided by 4 » « Enable the Continuous Conversion Mode » « Overrun Data Overwritten » et puis sélectionnée « Simpling Time » au maximum, qui est 160.5 cycles parce qu'on utilise une valeur de résistance dans notre voltage divider. Ok, donc la PD-1, il y a un petit magnifier locaté ici, type PD-1 et c'est là où c'est. Nous allons sélectionner « Channel 9 » et nous allons également sélectionner la PD-AEC pour finir par configurer la PD-1, pour qu'elle soit sélectionnée par « Channel 9 » Oui, ça se sélectionne. Et puis, nous allons sélectionner « Synchronous Mode Divided by 4 » Nous allons sélectionner « Continuous Conversion Mode » et nous allons sélectionner « Overrun Data Overwritten » et puis nous allons sélectionner le « Simpling Time » au maximum, qui est 160.5. Nous continuons avec la configuration ADC donc nous pouvons renoncer la PD-1 comme « V-Sense » donc c'est la PD-1 utilisée pour la monitoring de la PD-Bus. Pour que l'utilisateur soit sur le « GPS Settings » et « User Label » ajoute « V-Sense » Pour aider à convertir la PD-AEC en millivolts, nous pouvons ajouter la « User Constance » pour la calculation. Nous allons donc ajouter la PD-AEP à 3.300 qui est en millivolts, donc 3.3 volts. Nous allons aller à la « User Constance » et nous allons le sélectionner à 3.300. Ok. Dans les « Clock Configuration Settings » nous allons renoncer la PD-AEP à sa vitesse maximum qui est 64 MHz de la PD-AEP qui est la « internal clock » C'est très facile. Allez à la « Clock Configuration » et ici pour la PD-H CLK qui est la main clock type 64. Puis, oui et il a trouvé la « Perfect Configuration » de la PD-AEP en renoncing le microcontroller à sa vitesse maximum qui est 64 MHz. Pour aider à éliminer le debug nous pouvons éliminer l'information de debug à l'outil sur le UART. Nous allons utiliser le LPUART1 qui est connecté à la PD-AEP qui peut être accès à la comporte virtuelle. Nous allons remettre les fonctions à la PD-AEP parce que ce sont les fonctions qui sont connectées à la PD-AEP et nous allons utiliser le STX pour les transmissions, les interruptions activées et les restes de l'information ou les paramètres vont rester les mêmes. Nous allons retourner à la « Pinout & Configuration » pour l'appli de l'UART1 et l'enlever en mode asynchronous pour les paramètres pour les défauts pour les paramètres le LPUART1 interrompt. Donc ici j'ai changé la note 3. C'est la configuration de la FreeRTOS. Nous allons maintenant faire la remapping de cela. Donc le LPUART1, TX et RX doivent être remappés pour PA2 et PA3. Donc pour faire cela, vous pouvez l'exprimer un peu, contrôler et presser sur la « Pinout & Configuration » que vous voulez remapper et puis « Drag & Drop ». Nous allons maintenant remapper la PC1 pour PA2. Ok, donc nous avons fait la remapping. Nous allons maintenant évoquer le tracer embêtis des sections Utilities et léter le LPUART1 que nous avons configuré. Donc scroller, aller aux Utilities Tracer ENB, donc embêtis tracer et léter le LPUART1. Nous avons besoin d'activer le tracer embêtis dans l'USB PD. Évoquez le PD et léter le tracer embêtis. Pour finir la configuration d'adverir des informations de debug, nous allons activer l'interface GUI qui est utilisée pour communiquer avec le Q-Monitor. Pour cela, nous allons retourner à l'interface GUI, et aussi à votre PD type. Ok, GUI interface évoquée. Nous allons donner un nom pour le hardware born. En ce cas, Nucleo G0 et ici PD type SYNC. Dans le TAB project manager nous allons augmenter les defaults HIP et stack sizes. Parce que nous utilisons middleware comme Freer Tos et aussi l'USB PD nous allons augmenter. Nous allons augmenter l'HIP size à 0x500 et aussi pour les minimums stack sizes à 0x400. Nous allons faire ça dans le TAB project manager. Dans le TAB project manager nous allons augmenter l'HIP size à 500 et nous pouvons augmenter le stack size à 400. Nous avons idénais 1.4.0 et nous allons augmenter le versu de Q by D à 1.5.0. Dans le TAB acte détenu nous recommandons d'admin les files libanaires en référence. En TAB acte détenu nous allons augmenter les files libanaires en référence. Dans l'appli, nous allons choisir lpuart, afin de sauver un petit peu d'hippe-sizede. Je vais entrer dans l'avance-settings. Regarde pour lpuart, scroller un petit peu ici et sélectionner au lieu de HAL, le LL, qui prend moins de space, qui est plus optimisé. Le reste, on peut le garder comme il est. Nous pouvons maintenant générer le code. Donc, quand vous générez le code, vous verrez une windows comme ça, comme un warning, qui va vous dire que parce que vous utilisez FreeRTOS, c'est recommandé d'utiliser un autre timer que l'assistique, parce que l'assistique est déjà utilisé par le HAL, donc notre library cube. Donc, généralement, dans une application réelle, c'est mieux d'utiliser un autre timer pour l'assistique FreeRTOS, comme le base de temps. Mais ici, en aucun cas, parce que c'est une application simple, ce n'est pas un impact. Donc, nous pouvons presser OK. Nous pouvons maintenant générer le projet. Vous allez sauver votre projet. Vous voulez générer le code ? Oui. Nous allons changer la perspective. C'est le warning que je vous ai dit. Donc, généralement, dans une application complète, c'est mieux de changer le base de temps pour FreeRTOS. Mais, en ce cas, nous pouvons juste presser Yes. Maintenant, nous allons ajouter un code pour que l'application fasse bien. Tout d'abord, nous allons ajouter un code en main.c dans la section ADC. Donc, cette section ADC1 dans les deux sections, ici, que vous pouvez voir. Nous allons ajouter le code en red, que vous avez vu sur le slide. Et cette code va commencer la calibration de l'ADC et lancer l'ADC. Donc, nous allons ajouter ce code. Le code pour être ajouté est en fait dans la description de la vidéo. Donc, j'ai ajouté ça après la description, pour que vous puissiez trouver tout le code pour être ajouté. Et ça commence par le premier code pour être ajouté. Donc, dans cette section, ici, dans l'ADC, et nous allons ajouter ce code. Donc, vous voyez, tout le code pour être ajouté sera listé dans la description de cette vidéo. Donc, le premier code pour être ajouté, l'ADC, c'est terminé. Second, nous allons ajouter un code dans les routines interrupter. Donc, dans STM32G0XX underscore it.c. Donc, nous ne devons pas ajouter le code dans la CISTEK, et ceci est pour l'interface GY. Donc, nous allons ajouter ce code en rède. Donc, nous allons ouvrir le file it.c. Locé dans le code source. Et nous allons regarder la section pour la CISTEK, là-bas. Donc, nous devons juste ajouter dans cette section, là-bas, ce code ici. Donc, c'est pour l'interface GY. Ce que nous allons utiliser pour débugger. Ok. Ok, donc, c'est terminé. Maintenant, nous devons ajouter un code dans la partie USBPD de l'application. Donc, dans un file appel usbpd underscore dpm underscore user. Donc, nous allons ajouter un code dans la fonction appel usbpd underscore dpm underscore getDataInfo. Donc, c'est pour éviter les difficultés si le device distant n'est pas possible. Donc, il y a un code qui doit être ajouté. Donc, c'est le code en red ici. Nous allons ajouter. Le file est placé ici dans l'application usbpd de l'application. Donc, le directeur. Et on regarde ce qu'on a dit, l'utilisateur. Ok. Donc, c'est celui-là. Et puis, nous allons regarder la fonction qu'on veut ajouter ou ajouter un cas. Et le code. Donc, le code pour être ajouté c'est cet cas-là. Donc, nous allons ajouter un cas. All right. Et c'est tout. Donc, dans le même file, dans des différentes fonctions appel usbpd dpm sink évaluer les capacités, nous allons ajouter un code afin de négocier le premier contract. Donc, c'est le code en red là-bas. Que nous allons ajouter. Ok. Le même file. On regarde les différentes sections de code de la fonction. Et nous allons répliquer le code par ce code. C'est là-bas. Donc, c'est l'actual pdo que nous avons ajouté dans Cubamex. Donc, il ne faut pas trop. Je veux dire dans l'interface graphique. Donc, il ne faut pas trop. Donc, nous allons l'évaluer. Donc, ça va être utilisé pour le premier contract. Finalement, nous allons ajouter un code afin d'aider le CREAD de Vibus dans le file power usbpd . Donc, nous allons ajouter ce code en red maintenant. Et ça sera la dernière partie du code afin d'aider. Un power uspd file. Nous allons ajouter l'include de main.h maintenant. Nous allons regarder pour la deuxième partie du code afin d'aider. Donc, nous allons répliquer ce code là-bas. Donc, nous devons être resté. Donc, nous avons besoin de ce code là-bas. Nous allons ajouter ce code à l'intérieur de ce code ici. Et puis, on s'en va. On va construire le projet. Donc, on va ici. On va le right-click. On va construire. C'est bien. Nous avons été construits avec 0 error. Donc, c'est le set-up qu'on va utiliser. Donc, à la base, nous utilisons un Bord de NucléoG0 en haut, monté. Nous avons ce XNucléo USB PDM1 qui a, vous savez, le device TCPP01 sur le Bord. Donc, je l'ai configuré pour le SM42G0 NucléoBord. Donc, comme vous pouvez le voir, la configuration là-bas, en red. Le XNucléo USB PDM1 emmène le device TCPP01 pour le port USB Type-C. Il y a VBus PowerPath et protège le port USB contre l'EMC et la charge de voltage. Donc, c'est comment la assemblée ressemble. À la base, nous avons le Bord de NucléoG071 en haut, le Bord de XNucléo USB PDM1. Donc, c'est mon set-up ici. Nous avons le Bord de Nucléo à la base. À la base, nous avons le Bord de XNucléo USB PDM1 où nous avons le device TCPP01 qui est sur le Bord. Donc, c'est utilisé pour la protection. Et aussi, le Bord comme ce type-C connecteur que nous pouvons utiliser. À la base, j'ai mon source USB PDM1. Donc, je vais programmer le code que nous avons juste développé et que nous avons ajouté le code qui s'est construit. Je vais charger le code et faire le tour. Et puis, ce que nous allons faire c'est qu'on va connecter aussi avec le monitor USB PDM1 USB PDM1. Nous verrons la trace et verrons que les transactions sont correctes dans la base. Parce que nous allons utiliser la trace que nous avons évoquée. Donc, ce que je vais faire c'est, à un moment, je vais connecter cela ici et voir ce qui va arriver sur le monitor USB PDM1. Nous pouvons maintenant charger le code maintenant que notre Bord est connecté à notre computer. Nous pouvons débugir As et une application STM32 afin de charger le code USB PDM1 Once the code has been loaded we can exit QID and then we'll use another tool called the STM32 Q Monitor or the UCPD Monitor in order to look at the trace. So, this is the tool that I'm showing here right there. So that's how it looks. So it has a trace menu on the right hand side and we can look at all the transactions that happen between the source and the sync. And basically we're going to connect to the Bord and we're going to check once I connect the USB cable so the Type C cable to the source we're going to look at the different transactions and make sure that the transactions are correct. This is the STM32 Q Monitor UCPD. You can find this tool on our website at ST.com. I can now connect to my Bord. So this is the Bord remember, the hardware Bord version so NUCLEO G0 and the PD type that we have configured before. So to connect to it double click. We can now open the trace by clicking here on traces. I'm going to expand a little bit so that we can see more about the trace. Now I'm going to connect the USB Type C connector to my USB Type C power delivery source. And this is a success. As you can see here all the transactions are correct. So we have a good CRC we have you know like good transaction between the source and the sync and basically at the end we have the power state that is ready so the 5 volts that has been delivered to the sync as we requested. If you want to find more details about how to do a USB PD sync applications you can refer to the application notes AN5418 on our website at ST.com so it will retrace all the different steps that we follow today and gives you more information. Thank you very much for watching.