Je conçois un appareil autour du STM32L476. Mon appareil est principalement alimenté par batterie, mais possède un port USB que, lorsqu'il est branché, je veux l'utiliser comme source d'alimentation alternative (via un régulateur de 3,3 V) pour limiter la décharge de la batterie. Il est également possible que l'utilisateur connecte le port USB alors qu'il n'y a pas de piles.
Je veux pouvoir détecter quand le port USB est connecté, donc j'utilise PA9 comme OTF_FS_VBUS.
La bonne nouvelle : la fiche technique indique que la broche PA9 est 5V tolérante.
La mauvaise nouvelle : les broches tolérantes à 5 V ne semblent en réalité tolérer les 5 V que lorsque l'alimentation est appliquée. La feuille de données §6.2 du tableau 18 dit:
Tension d'entrée maximale sur les broches FT_xxx: min (VDD, VDDA, VDDIO2, VDDUSB, VLCD) + 4,0 V
Dans mon cas, s'il n'y a pas de piles et que l'utilisateur connecte le port USB, il y a un temps, avant le démarrage du régulateur, pendant lequel la tension sur PA9 sera de 5 V alors qu'aucune alimentation n'est appliquée sur les broches d'alimentation du CPU.
Encore plus mauvaise nouvelle : l'injection actuelle n'est pas autorisée: fiche technique §6.2, tableau 19, dit:
Courant injecté sur FT_xxx: -5 / + 0 (voir remarque 4)
Remarque 4: Une injection positive est induite par VIN> VDDIOx tandis qu'une injection négative est induite par VIN <VSS. IINJ (PIN) ne doit jamais être dépassé.
Il semble donc que je ne puisse pas utiliser une simple résistance pour limiter l'excès de courant sur PA9 pendant le démarrage du régulateur. Toute quantité de courant qui circulerait de VBUS vers PA9 avant que le VDD ne monte en puissance est apparemment interdite.
Qu'ont fait les autres?
J'ai regardé de nombreuses conceptions autour des puces STM32, en regardant leurs connexions VBUS, et elles ne semblent pas s'en soucier. Ils connectent VBUS directement à PA9, ou éventuellement via une résistance, mais je n'ai jamais rien vu de plus compliqué. Mais ce sont surtout des cartes de développement, donc je suppose que la robustesse (est-ce un mot?) N'est pas très importante. Et ils ne sont généralement pas alimentés via le port USB, et supposent certainement que l'utilisateur ne connectera pas le port USB avant d'alimenter la carte.
Quel est mon plan?
Mettre cela entre VBUS sur le port USB et la broche PA9 du MCU:
J'ai vraiment essayé de rester simple. Fondamentalement, il garantit que VUSB_CPU (qui est la broche PA9) ne peut jamais être au-dessus de VCPU + 4V (Vz + Vbe), sans consommer d'énergie s'il est OK.
Mes principales questions sont les suivantes : ai-je raison dans mon analyse? Ce circuit est-il une bonne solution? Suis-je préoccupé par des choses qui ne sont pas pertinentes? Pourquoi personne d'autre ne semble se soucier de ce problème potentiel?
Question supplémentaire : je prévois d'utiliser USB OTG. Est-ce un problème s'il y a une résistance de 4,7 k entre le connecteur et la broche PA9? Je suppose que ce serait le cas si je devais utiliser la pulsation VBUS pendant SRP, mais cette méthode est apparemment déconseillée. Suis-je donc bon, quel que soit le rôle (appareil / hôte) de mon appareil?
Un dernier : quel est le courant maximal consommé par la broche d'alimentation VDDUSB? La fiche technique spécifie, pour le périphérique USB: 16,4µA / MHz pour le domaine d'horloge AHB + 23,2µA / MHz pour le domaine d'horloge indépendant, mais nous ne savons pas d'où il est tiré (VDD ou VDDUSB).