Je suis un grand fan de la planche à pain pilule bleue. Ils sont très bons en termes de prix / performances. En fait, mon amour pour eux est visible dans l'
article des poissons d'avril sur le firmware des pédales pour jouer de la balalaïka .

Ouvrez une boîte avec de telles planches et prenez-en rapidement une pour résoudre certains problèmes - dans l'ordre des choses. C'est vrai, récemment, j'ai pris la carte suivante, je l'ai flashée avec un «firmware» bien débogué et testé et ... j'ai obtenu un périphérique USB non identifié. J'ai pris une autre planche, je l'ai «flashée», l'appareil a fonctionné là-bas. Il y aurait une fin à la question, mais je me demande quelle est la question. Par conséquent, comme le week-end est arrivé, j'ai commencé une étude détaillée des raisons pour lesquelles cela ne fonctionne pas.
En général, avant de «flasher» les planches, je m'assure que le test versé par le constructeur fonctionne: la LED clignote. J'étais donc sûr que le processeur, en général, est vivant. Qu'est-ce à blâmer alors? Peut-être des lignes USB ou du quartz.
Les lignes étaient bien, le quartz n'a pas commencé. Mais cela peut ne pas commencer pour de nombreuses raisons. Son lancement se fait par programme, déjà dans les entrailles de la fonction
main () Eh bien, très bien, nous commençons à déboguer le programme.
Tout irait bien, mais le débogueur ne va pas à la fonction
main () . Le programme se bloque quelque part entre le lancement et cette fonction.

Nous arrêtons le programme: tout à fait attendu, nous sommes dans le gestionnaire
HardFault .


Qu'est-ce qui nous amène ici? Réinitialisez le compteur d'adresses:

Et nous commençons à suivre attentivement le programme. Ici, sur cette ligne, tout meurt, nous utilisons au moins l'opération
Step , au moins
Step Over .

Jolly Keil ... Eh bien, rien. Réinitialisez tout à nouveau (RST), cliquez avec la souris sur la fenêtre du démonteur et allez-y. Dans ce cas, nous pouvons comprendre que tout se meurt à l'intérieur de la fonction
__scatterload .

En général, si tout meurt dans cette fonction, il y a déjà une raison de chercher si le type de contrôleur est confus. Mais non, c'est vrai (j'ai également revérifié les paramètres, mais ce firmware fonctionne sur d'autres cartes).

Bon. Encore une fois, nous réinitialisons tout et suivons déjà cette fonction. Après quelques essais, accroche et rougit, nous trouvons la ligne coupable ...

Oui oui Tout meurt en enregistrant les registres sur la pile. En même temps, on peut voir à gauche que SP est 0x200030A0. Nous regardons la documentation du contrôleur:

Voyons quelle fenêtre est allouée pour SRAM:

C'est vrai. Le pointeur de pile (SP) est dans la plage autorisée. Alors, qu'est-ce à blâmer? Essayons de remplacer effrontément la valeur SP par 0x200030A0, disons, par 0x200020A0, car le débogueur permet cela ... Chpok! Le blocage sur la ligne spécifiée s'est arrêté! Ainsi, notre puce mémoire n'est pas de 20 kilo-octets. Combien? Après avoir vérifié plusieurs fois, nous constatons que la dernière valeur de travail de SP est 0x20002800. Soit 10 kilo-octets. Cela correspond au cristal STM32F103C6. Devant nous se trouve un microcircuit scié. Hélas.
Tout irait bien, mais les planches de ce lot dans ma boîte plutôt grande sont faciles à distinguer. Ils ont une couleur spéciale de cavaliers et une très belle LED émeraude (les autres ont une nuance de vert moins agréable). Par conséquent, ils sont facilement attribués à partir du tas d'autres cartes. Bien sûr, je les ai vérifiés. Bien sûr, toute la fête a été coupée (j'en ai pris une dizaine).
Que faire avec cela n'est pas clair. Quand j'ai eu trois pièces dans une douzaine de cartes mères qui n'avaient pas de test régulier: la LED ne clignote pas (alors maintenant je les vérifie non sélectivement, mais totalement), j'ai passé une semaine à parler au vendeur. Il "a tourné le fou". Toujours intéressé par ce que je veux faire, a promis de m'aider avec des conseils. Et je lui ai répété maintes et maintes fois que je me suis stupidement connecté à l'alimentation, sept cartes clignotent, trois - non. Ils sont donc morts. Et il a de nouveau son orgue de Barbarie. Et donc une semaine. Mais là, tout était évident. N'a pas réussi le test du personnel. Ici, le test à temps plein passe, il n'a pas besoin de beaucoup de mémoire. Comment prouver qu'un faux est venu n'est pas clair. Et si vous pouvez le prouver, tout de même, selon les règles d'Ali Express, vous devez renvoyer la marchandise. En général, tout ressemble au désespoir. Et surtout, le vendeur final n'avait aucune intention malveillante. Je lui ai pris un autre lot, plus tard. Tout y est bien. Lui-même a été déçu.
D'une manière ou d'une autre, j'informe le public que cela se produit. Vérifiez les cartes non seulement pour les performances globales, mais aussi pour les spécifications du monde réel. Certes, que faire avec un décalage n'est pas clair.
L'article présente un autre avantage pratique. Il montre comment vous pouvez trouver rapidement la raison pour laquelle la carte ne fonctionne pas soudainement, si le problème n'est pas l'inopérabilité complète du contrôleur (il répond via le port de débogage SWD).