① Klon Sensör — WHO_AM_I=0x75
SORUN"MPU-9250" etiketli modül kimlik olarak 0x75 döndürdü — geçerli aile kimliği değil; üstelik 0x75 aynı zamanda WHO_AM_I register'ının ADRESİ. Adres yankılayan bozuk bir bus da aynı cevabı üretirdi.
ÇÖZÜMDiskriminatör-kapılı kabul: PWR_MGMT_1 reset değeri (0x01) ayrıca okunur — adres yankısı bu ikinci kapıyı geçemez. Log asla çıplak "OK" demez: "OK (clone die)".
DERSUcuz modülde klon normaldir; mühendislik "çalışıyor işte" değil, "hangi kanıtla kabul ettim"dir. Nominal ölçek sabitleri bu yüzden ~%3 toleransla raporlanır.
if (id==0x75 && pm1==0x01) → OK (clone die)
else if (id==0x75) → UNEXPECTED_ID /* address-echo trap */
② Boot-Latch Kusuru — "Kayıp Korunur, Yokluk Değil"
SORUNFailsafe boot'ta silahlanıyordu; sensör bring-up ~1 s sürer. 100 ms'lik zaman aşımı her açılışta sensör doğmadan doluyor, kart kaçınılmaz FAILSAFE'e kilitleniyordu.
TEŞHİSSeri port da o an kilitliydi (Windows usbser) — kör uçuş. GDB ile karta bağlanıp çekirdek yaşıyor mu, ring buffer boşalmış mı, fs_state ile mpu_ready çelişiyor mu karttan okundu: iki ayrı arıza ayrıştırıldı.
ÇÖZÜMİlke değişti: bekçi ilk BAŞARILI örnekle silahlanır. Hiç canlanmamış sensör zaten güvenli PWM varsayılanlarıyla örtülü — failsafe kaybı korur, yokluğu değil.
DERSZaman aşımı tasarımı boot sıralamasından bağımsız düşünülemez. Ve debug omurgası lüks değil: seri sustuğunda tek tanık GDB'ydi.
③ Reviewer'ın RM0390 Yakalaması — IWDG Anahtar Sırası
SORUNSpec'te IWDG başlatma sırası yanlış yazılmıştı (0xCCCC en sonda). Referans kılavuza göre 0xCCCC İLK adım olmalı — hem watchdog'u başlatır hem LSI osilatörünü zorla açar.
RİSKSinsi sınıf: eldeki kartta muhtemelen çalışırdı (LSI başka yoldan açık olabilir), sahada ilk soğuk boot'ta sonsuza dek kilitlenirdi. Masada yeşil, sahada ölü.
ÇÖZÜMİç döngünün ground-truth kuralı: reviewer koda değil REFERANS KILAVUZA karşı denetler. MAJOR bulgu, üretimden önce düzeltildi; canlı 3× reset döngüsüyle kanıtlandı.
DERS"Çalışıyor" ile "doğru" farklı şeyler. Datasheet'e karşı düşmanca okuma, donanım projelerinde test kadar değerli.
④ NRST Jumper'ı — OpenOCD'nin Tek Cümlelik İpucu
SORUNİlk donanım gününde flash imkânsızdı: çekirdek algılanıyor ama sürekli "external reset" altında görünüyordu.
TEŞHİSEn son değişen şey neydi? Kablolama. Nucleo başlığında RESET deliği 3V3'ün hemen yanında — sensörün besleme jumper'ı bir delik kayıp NRST'ye takılmış, sensör beslenmeye çalışırken reset hattını aşağı çekiyordu.
ÇÖZÜMJumper 3V3'e taşındı; akış anında düzeldi. Kablolama notuna "her deliğin yanındaki yazıyı tek tek doğrula" maddesi kalıcı olarak girdi.
DERSAraç hatası gibi görünen şey çoğu zaman fiziksel dünyanın tek-değişken sorusudur: "en son neye dokundun?"