Pil Biru Palsu

Saya penggemar berat papan tempat memotong roti pil biru. Mereka sangat baik dalam hal harga / kinerja. Sebenarnya, cintaku pada mereka terlihat dari artikel April Mop tentang pedal firmware untuk memainkan balalaika .



Buka kotak dengan papan seperti itu dan cepat ambil satu untuk menyelesaikan beberapa masalah - sesuai urutan. Itu benar, baru-baru ini saya mengambil papan berikutnya, mem-flash-nya dengan "firmware" yang teruji baik dan teruji dan ... mendapat perangkat USB yang tidak dikenal. Saya mengambil papan lain, "flash" itu, perangkat bekerja di sana. Akan ada akhir dari masalah ini, tetapi saya bertanya-tanya apa masalahnya. Oleh karena itu, ketika akhir pekan tiba, saya memulai studi terperinci tentang mengapa itu tidak berhasil.

Secara umum, sebelum "flashing" papan, saya memastikan bahwa tes yang dituangkan oleh pabrikan bekerja: LED berkedip. Jadi saya yakin prosesor itu, secara umum, masih hidup. Apa yang harus disalahkan? Mungkin garis USB atau kuarsa.

Garis-garisnya baik-baik saja, kuarsa tidak memulai. Tetapi itu mungkin tidak dimulai karena banyak alasan. Peluncurannya dilakukan secara terprogram, sudah ada di fungsi utama () . Baiklah, kita mulai men-debug program.

Semuanya akan baik-baik saja, tetapi debugger tidak pergi ke fungsi utama () . Program hang di suatu tempat antara peluncuran dan fungsi ini.



Kami menghentikan program: cukup diharapkan, kami berada di penangan HardFault .





Apa yang membawa kita ke sini? Setel ulang penghitung alamat:



Dan kami mulai dengan cermat mengikuti program ini. Di sini, di baris ini semuanya mati, kami menggunakan setidaknya operasi Langkah , setidaknya Langkah Atas .



Jolly Keil ... Yah, tidak ada apa-apa. Atur ulang semuanya lagi (RST), klik mouse pada jendela disassembler dan melangkah ke sana. Dalam hal ini, kita dapat memahami bahwa semuanya sekarat di dalam fungsi __scatterload .



Secara umum, jika semuanya mati dalam fungsi ini, sudah ada alasan untuk melihat apakah jenis pengontrol bingung. Tapi tidak, itu benar (saya juga memeriksa ulang pengaturannya, tetapi firmware ini berfungsi di papan lain).



Bagus Sekali lagi, kami mengatur ulang semuanya dan melacak fungsi ini. Setelah beberapa cobaan, hang dan flushes kami menemukan garis bersalah ...



Ya, ya Semuanya mati saat menyimpan register di stack. Pada saat yang sama, dapat dilihat di sebelah kiri bahwa SP adalah 0x200030A0. Kami melihat dokumentasi untuk controller:



Mari kita lihat jendela mana yang dialokasikan untuk SRAM:



Benar juga. Penunjuk tumpukan (SP) berada dalam rentang yang diizinkan. Jadi apa yang harus disalahkan? Mari kita coba ganti nilai SP dengan 0x200030A0, katakanlah, dengan 0x200020A0, karena debugger memungkinkan ini ... Chpok! Gantung di garis yang ditentukan telah berhenti! Jadi, chip memori kami bukan 20 kilobyte. Berapa banyak Setelah memeriksa beberapa kali, kami mengetahui bahwa nilai kerja terakhir SP adalah 0x20002800. Yaitu, 10 kilobyte. Ini sesuai dengan kristal STM32F103C6. Di depan kita ada lingkaran mikro gergaji. Sayang

Semuanya akan baik-baik saja, tetapi papan dari kelompok ini dalam kotak saya yang agak besar mudah dibedakan. Mereka memiliki warna jumper khusus dan LED zamrud yang sangat indah (sisanya memiliki warna hijau yang kurang menyenangkan). Karena itu, mereka mudah dialokasikan dari tumpukan papan lain. Tentu saja, saya memeriksanya. Tentu saja, seluruh pesta dipotong (saya mengambil selusin).

Apa yang harus dilakukan dengan ini tidak jelas. Ketika saya mendapatkan tiga buah di selusin motherboard yang tidak memiliki tes reguler: LED tidak berkedip (jadi sekarang saya periksa tidak secara selektif, tapi benar-benar), saya menghabiskan waktu seminggu untuk membantu penjual. Dia "menyalakan orang bodoh." Terus tertarik dengan apa yang ingin saya lakukan, berjanji untuk membantu dengan saran. Dan saya ulangi lagi dan lagi bahwa saya dengan bodohnya terhubung ke catu daya, tujuh papan berkedip mata, tiga - tidak. Jadi mereka sudah mati. Dan dia kembali memiliki organ larasnya. Jadi seminggu. Tapi di sana semuanya jelas. Tidak lulus tes staf. Di sini, tes penuh waktu berlalu, dia tidak membutuhkan banyak memori. Bagaimana membuktikan bahwa palsu datang tidak jelas. Dan jika Anda bisa membuktikannya, maka semuanya sama, sesuai dengan aturan Ali Express, Anda perlu mengirim barang kembali. Secara umum, semuanya tampak seperti keputusasaan. Dan yang paling penting, penjual akhir tidak memiliki niat jahat. Saya mengambil batch lain darinya, kemudian. Semuanya bagus di sana. Dia sendiri dikecewakan.

Dengan satu atau lain cara, saya memberi tahu masyarakat bahwa ini terjadi. Papan periksa tidak hanya untuk kinerja keseluruhan, tetapi juga untuk spesifikasi dunia nyata. Benar, apa yang harus dilakukan dengan ketidakcocokan tidak jelas.

Artikel ini memiliki manfaat praktis lainnya. Ini menunjukkan bagaimana Anda dapat dengan cepat menemukan alasan mengapa board tidak berfungsi jika controller tidak sepenuhnya tidak beroperasi (merespons melalui port debug SWD).

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


All Articles