Pílula azul falsa

Eu sou um grande fã da tábua de pílulas azul. Eles são muito bons em termos de preço / desempenho. Na verdade, meu amor por eles é perceptível no artigo dos April Fools sobre firmware de pedais para tocar balalaica .



Abra uma caixa com essas placas e leve-a rapidamente para resolver alguns problemas - na ordem das coisas. É isso mesmo, recentemente peguei a próxima placa, mostrei-a com um “firmware” bem depurado e testado e ... recebi um dispositivo USB não identificado. Peguei outra placa, "pisquei", o dispositivo funcionou lá. Teria um fim para o assunto, mas me pergunto qual é o problema. Portanto, quando o fim de semana chegou, comecei um estudo detalhado de por que ele não funciona.

Em geral, antes de “piscar” as placas, certifico-me de que o teste realizado pelo fabricante funcione: o LED pisca. Então, eu tinha certeza de que o processador, em geral, está vivo. O que tem a culpa então? Talvez linhas USB ou quartzo.

As linhas estavam bem, o quartzo não começou. Mas pode não começar por muitos motivos. Seu lançamento é feito de forma programática, já nas entranhas da função main () Bem, tudo bem, começamos a depurar o programa.

Tudo ficaria bem, mas o depurador não vai para a função main () . O programa trava em algum lugar entre o lançamento e esta função.



Paramos o programa: bastante esperado, estamos no manipulador do HardFault .





O que nos traz aqui? Redefina o contador de endereços:



E começamos a seguir cuidadosamente o programa. Aqui nesta linha tudo morre, usamos pelo menos a operação Step , pelo menos Step Over .



Jolly Keil ... Bem, nada. Redefina tudo novamente (RST), clique com o mouse na janela do desmontador e vá para lá. Nesse caso, podemos entender que tudo está morrendo dentro da função __scatterload .



Em geral, se tudo morrer nesta função, já existe um motivo para verificar se o tipo de controlador está confuso. Mas não, está certo (eu também verifiquei as configurações, mas este firmware funciona em outras placas).



Bom Novamente, redefinimos tudo e já rastreamos essa função. Depois de algumas tentativas, travamentos e descargas, encontramos a linha culpada ...



Sim sim Tudo morre ao salvar registros na pilha. Ao mesmo tempo, pode-se ver à esquerda que SP é 0x200030A0. Examinamos a documentação do controlador:



Vamos ver qual janela está alocada para SRAM:



Isso mesmo. O ponteiro da pilha (SP) está no intervalo permitido. Então, o que tem a culpa? Vamos tentar substituir descaradamente o valor do SP por 0x200030A0, digamos, com 0x200020A0, já que o depurador permite isso ... Chpok! O travar na linha especificada parou! Portanto, nosso chip de memória não tem 20 kilobytes. Quanto? Após verificar várias vezes, descobrimos que o último valor útil de SP é 0x20002800. Ou seja, 10 kilobytes. Isso corresponde ao cristal STM32F103C6. Diante de nós está um microcircuito serrado. Infelizmente.

Tudo ficaria bem, mas é fácil distinguir as placas deste lote na minha caixa bastante grande. Eles têm uma cor especial de jumpers e um lindo LED esmeralda (o restante tem um tom menos agradável de verde). Portanto, eles são facilmente alocados do monte de outras placas. Claro, eu verifiquei. Claro, toda a festa foi cortada (eu levei uma dúzia).

O que fazer com isso não está claro. Quando obtive três peças em uma dúzia de pranchas, que não tinham um teste regular: o LED não piscava (então agora as verifico não seletivamente, mas totalmente), passei uma semana dando uma surra no vendedor. Ele "se voltou contra o tolo". Constantemente interessado no que eu quero fazer, prometeu ajudar com conselhos. E repeti várias vezes para ele que estupidamente liguei à fonte de alimentação, sete placas piscam um olho, três - não. Então eles estão mortos. E ele novamente tem seu órgão de barril. E então uma semana. Mas tudo estava óbvio. Não passou no teste da equipe. Aqui o teste em tempo integral passa, ele não precisa de muita memória. Como provar que um falso veio não está claro. E se você puder provar, mesmo assim, de acordo com as regras da Ali Express, será necessário enviar as mercadorias de volta. Em geral, tudo parece desesperança. E o mais importante, o vendedor final não tinha intenção maliciosa. Peguei outro lote dele, mais tarde. Tudo está bem lá. Ele próprio foi decepcionado.

De uma forma ou de outra, informo o público que isso acontece. Verifique as placas não apenas pelo desempenho geral, mas também pelas especificações do mundo real. É verdade que o que fazer com uma incompatibilidade não está claro.

O artigo tem outro benefício prático. Ele mostra como você pode encontrar rapidamente o motivo pelo qual a placa repentinamente não funciona, se o problema não for a completa inoperabilidade do controlador (ele responde pela porta de depuração SWD).

Source: https://habr.com/ru/post/pt459136/


All Articles