Bir mikrodenetleyicinin beklenmedik şekilde sıfırlanmasına ne neden olabilir?


26

Mikroişlemci kontrollü bir sistemde özellikle tahriş edici bir böcek çeşidi olması, mikroişlemcinin beklenmedik şekilde sıfırlanmasıdır. Bu tür bir sorunu ayıklamak için önemli bir araç olası nedenlerin bir listesidir. Bir mikrodenetleyicinin beklenmedik şekilde sıfırlanmasına ne neden olabilir?


1
Buradaki bazı cevaplar yardımcı olabilir: electronics.stackexchange.com/questions/30430/… Ne tür bir mikrodenetleyici kullanıyorsunuz?
Jon L

Genellikle dsPIC kullanırım. Ancak şu anda belirli bir şeyi ayıklamaya çalışmıyorum, yalnızca olası sorunların referans listesini derlemeye çalışıyorum.
Stephen Collings,

2
bu bir ev ödevi sorusu mu?
old_timer

1
@dwelch Muhtemelen bir yerdeki biri için, ama benim veya öğrencilerimden hiçbiri için değil.
Stephen Collings,

1
@Vorac böyle bir okumayı Atmel’in URL’yi güvenilir tutamayacağını söyleyemez.
Kaz

Yanıtlar:


51

PIC ve dsPIC yongalarında, beklenmeyen sıfırlamanın aşağıdaki nedenlerini gözlemledim.

Donanım:

  • Pimi sıfır tahrikli veya yüzer şekilde sıfırlayın. İlk önce belli şeyleri kontrol et!
  • Sıfırlama pimine ESD kuplajı. Ben tamamen ilgisiz ekipman aynı masanın üzerine açıldığında bunun olduğunu gördüm. Sıfırlama pimi üzerinde, muhtemelen 1 uF'a kadar yeterli kapasitans olduğundan emin olun.
  • ESD, işlemcinin diğer pinlerine bağlanır. Özellikle kapsam probları anten gibi hareket edebilir, çipte çift parazit yapabilir ve tek sıfırlamalara neden olabilir. "Geçersiz opcode" sıfırlama kodlarının raporlarını duydum.
  • Kötü lehim eklemi / aralıklı köprü. İşlemcide veya tahtada başka bir yerde bir güç rayını kaybediyor veya kısaltıyor olabilir.
  • Güç demiryolu arızası / gürültü. Hasarlı bir regülatör veya yukarı besleme kaynağındaki bir düşüş dahil olmak üzere herhangi bir sayıda harici sorundan kaynaklanabilir. İşlemciyi besleyen güç raylarının sabit olduğundan emin olun. Bir yerde daha fazla başlık, belki de doğrudan işlemcideki kapağı ayırmak gerekebilir.
  • Bazı mikrodenetleyiciler, VDD'ye bağlı olmamalı ve ortak kendi kapasitörlerine sahip olması gereken bir Vcap pinine sahiptir. Bu pimin doğru şekilde bağlanmaması öngörülemeyen sonuçlara neden olabilir.
  • Analog bir girişi belirli bir limitin ötesinde negatif kullanmak, RCON'da bir kararma gibi rapor eden bir sıfırlamaya neden olur. Aynısı dijital girişler için de geçerli olabilir.
  • Yakındaki bir güç dönüştürücüsündeki çok yüksek dV / dt, kararmanın sıfırlanmasına neden olabilir. ( Bu soruya bakın .) Bunu iki durumda gördüm ve bir tanesinde kapasitif kuplajı izleyebildim. Bir IGBT 100-200 amper değiştiriyordu ve kapanırken bazı geri besleme devreleri 3.3V işlemcide 2V'den 8V'a kadar olan birkaç mikrosaniye gürültü görüyordu. Bu geri bildirim rayı üzerindeki filtre kapağının arttırılması sıfırlamayı durdurdu. Bir transistöre dV / dt filtresi eklemenin benzer bir etkiye sahip olabileceğini hayal edebiliriz.

Yazılım:

  • Bekçi köpeği zamanlayıcısı. Watchdog zamanlayıcısının yeterince sık temizlendiğinden emin olun, özellikle EEPROM'un yazdığı gibi, kodunuzun çalıştırılması uzun zaman alabilir. Sorunun çözülüp çözülmediğini görmek için bekçi köpeğini devre dışı bırakarak bunu test edin.
  • Sıfıra bölme. Kodunuzda herhangi bir bölme işlemi gerçekleştiriyorsanız , bölenin asla sıfıra eşit olamayacağından emin olun. Bölmeden önce bir sınır kontrolü ekleyin. Bunun, modulo işlemleri için de geçerli olduğunu unutmayın .
  • Yığın taşması. Çok fazla iç içe geçmiş işlev çağrısı, sistemin yığın yürütme sırasında dinamik bellek tükenmesine neden olabilir ve bu da kod yürütme sırasında olağandışı noktalarda çökmelere neden olabilir.
  • Yığın akış altında. Assembler'da programlama yapıyorsanız, yanlışlıkla CALL (ARA) işleminden daha fazla RETURN gerçekleştirebilirsiniz.
  • Var olmayan kesme yordamı. Bir kesinti etkinse ancak kesinti rutini tanımlanmadıysa, işlemci sıfırlanabilir.
  • Var olmayan tuzak rutini. Bir kesme yordamına benzer, ancak yeterince farklı, ayrı ayrı listeliyorum. Rasgele sıfırlanan dsPIC 30F4013'ü kullanarak iki ayrı proje gördüm ve bunun nedeni tanımlanmış ancak tanımlanmamış bir tuzağa kadar izlendi. Tabii ki, şimdi neden bir tuzağın ilk olarak neden adlandırıldığı, silikon hatası da dahil olmak üzere birçok şey olabilir sorusu var. Ancak tüm tuzak taşıyıcıları tanımlamak muhtemelen açıklanamayan sıfırlamaları teşhis etmede iyi bir erken adım olmalıdır.
  • İşlev işaretçisi hatası. Bir işlev işaretçisi geçerli bir konumu göstermiyorsa, işaretleyicinin işaretini kaldırın ve işaret eden işlevi çağırmak sıfırlanmaya neden olabilir. Bunun eğlenceli sebeplerinden biri, NULL (bir fonksiyon göstericisi için) ve -1 (bir int için) ardışık değerleri olan bir yapıyı başlatırken oldu. Virgül basıldı, bu nedenle işlev göstergesi gerçekte NULL-1 olarak başlatıldı. Öyleyse, sadece bir CONST olduğu için geçerli bir değer içermesi gerektiğini varsaymayın!
  • Geçersiz / negatif dizi dizini. Emin olun tüm dizi indeksleri, hem üst üzerinde kontrol sınırları gerçekleştirmek ve varsa alt sınırları.
  • Program hafızasında, program hafızasının en büyük bölümünden daha büyük bir veri dizisi oluşturmak. Bu bir derleme hatası bile atmayabilir.
  • Bir yapının adresini bir işaretçiye başka bir türe dökmek, bu işaretçiyi geçersiz kılmak ve dereferenced işaretçiyi bir ifadede LVALUE olarak kullanmak çökmeye neden olabilir. Bu soruya bakınız . Muhtemelen, bu diğer tanımsız davranışlar için de geçerlidir.

Bazı dsPIC'lerde, RCON kaydı sıfırlama nedenini gösteren bitleri depolar. Bu hata ayıklama sırasında çok yararlı olabilir.


1
@reset pin: sahte sıfırlamalar için kayan sıfırlama pimi bilinmektedir. Her zaman bir direnç aracılığıyla Vcc'ye bağlayın.
jippie,

4
Bu inanılmaz derecede ayrıntılı bir liste. AVR'lerle olan deneyimime, çoğu aynı durumun beklenmedik sonuçlara veya sıfırlamalara neden olmayacağına inanıyorum.
HL-SDK

4
Assembler dil programlama için başka bir tane daha ekleyeyim - Eşsiz kayıt PUSH ve POP yığınından.
Michael Karas

2
Birkaç tane daha: donanım altında, karartma sıfırlama. Yazılım altında, yazılım sıfırlama talimatı. Bunların her ikisi de birkaç mikrodenetleyicide bulunur.
tcrosley

2
Liste için bir diğeri: bir kablonun yanına yerleştirilmiş cep telefonları, zayıf tahrikli hatlarda şaşırtıcı derecede önemli miktarda voltaj tetikleyebilir. Kablodan geçen bir sıfırlama hattınız varsa (örneğin, bir kart diğerinin sıfırlanmasına neden olabilir), örneğin bir arama alırsa kablonun yakınındaki bir cep telefonu sıfırlamayı tetikleyebilir.
supercat,

7

RESET-pin, voltajın altında / üstünde izleyen ve yeterince uzun bir sıfırlama sinyali yaratan bir sıfırlama devresi tarafından düzgün şekilde sürülmelidir. Bunu akılda tutmadan kontrolsüz bir donanım sıfırlama ile deneyimlerim sonra geliyor:

  • Satırları RESET pinine / hattına çevirmekten çapraz bağlantı (kısa hale getirin)
  • Harici yüksek akım yükünün açılması / kapatılmasından kaynaklanan toprak kaymaları / döngü
  • Gerilim yükselmesi güç kaynağı tarafından filtrelenmemiş ve uygun RESET’i etkinleştirmek için çok kısa
  • Yukarıdaki sorunlara neden olan harici kontrolörlerin mikrodenetleyici ile değiştirilmesi (özellikle motor açma / kapama, röleler veya eski lamba gibi endüktif yükler (ani akım)
  • Mikrodenetleyici pinlerinden herhangi birinin üzerindeki voltaj / akım yükselmesi (osilatörün en kötüsü) ters akıma neden olabilir ve dahili kayıt cihazını (besleme hattındaki voltaj yükselmeleriyle aynı olabilir) değiştirebilir. Genel olarak, bir tür endüstriyel ortama arabirim yaparken dikkatli olunması gerekir (daha fazla bilgi için: http://www.ichaus.biz/wp1_mcu_interface ). IO'lerde seviye değişimi, giriş filtreleme ve yumuşak anahtarlama çıkışları dikkate alınmalıdır. Besleme hatlarının temizliği, donanım tarafında birinci önceliğe sahiptir. Daha sonra RESET ve osilatör pimleri, ardından G / Ç hatları. -mm

1
Zemin kaymaları beni biraz ısırdı. Benim durumumda, ortak ağımın belirli bir kısmını ~ 100 amper taşıyordum. Mikrodenetleyici, bu kalın izin bir tarafına atfedilmiştir, ancak mikrodenetleyicinin kullandığı devrenin bir kısmı, izlemenin diğer ucuna referanslanmıştır. İz sadece 3 mOhm'du, ama 100 amperde, sürdüğü mikro ve sürdüğü çevre birimleri arasında 300 mV'lık bir fark elde etmek için yeterliydi. Çevre birimlerini, izleyicinin denetleyiciyle aynı ucuna ortak olacak şekilde yönlendirdi ve her şey yolunda. Bu akımlarda düğüm diye bir şey yoktur.
Stephen Collings,

4

Bu listede görmedim ek bir olasılık, ICSP destekleyen bir cihazdır. Devre seri programlama modunda tetikleyen hatlarda yetersiz çekme kullanılıyorsa, bazen bu moda rasgele girmek mümkündür. Bu, belirlenmiş seri alıcı hatlarına hiçbir program güncellemesi gönderilmediğinde kısa bir süre sonra sıfırlamaya yol açar. ICSP başlatılır ve programlama verisi gönderilmezse, dahili bir bekçi saati sayacının sıfırlanmaya zorlandığından şüpheleniyorum. Bu, 16F876 ile bulmak için çok zaman harcadığım ve harcadığım bir hataydı.


3

Devrenizde CMOS veya TTL mantık yongaları kullanıyorsanız, Vdd ve topraklama arasında yeterli ayırma kapasitörlerine sahip olduklarından emin olun (genellikle 0,1 uF). Bir tasarımda bir CD4021 kullanıyordum ve kullanımdayken, görünen o ki, mikroişlemcinin yeniden başlamasına neden olan bir miktar yükselmeye neden oluyordu. Sonra döngü tekrar ederdi. Bu aynı zamanda, kodunuzun başlangıcına bariz bir test dizisi (bir LED'in birkaç kez yanıp sönmesi gibi) koymasının iyi bir fikir olmasının nedeni olarak, mikroişlemcinin kod çalıştığını ve çalıştığını bilmenizi sağlar.


2

Bu ortaya çıkabilecek ender şeylerden biri:

Bir mikrodenetleyici içeren bir projem vardı ve zaman zaman kendini sıfırlayabilecekti. Uzun lafın kısası, bazı seçeneklerin etkinleştirilmesi ya da devre dışı bırakılması gerektiği, aksi halde sıfırlamaların olabileceği ortaya çıktı. Bunu sadece diğer her şeyden vazgeçtikten sonra notu okuyarak öğrendim.

Şimdi kendimi neyin içine soktuğumu ve eğer başarabilirsem bir şey olup olmadığını bilmek için bir çip kullanmaya karar vermeden önce, hatayı okumayı alışkanlık haline getiriyorum. Maalesef mezun olduktan sonra, beni ortak uygulamalar hakkında eğitecek hiç kimsem yoktu, bu yüzden gerçek dünyadaki öğrenmelerimin çoğu başarısızlık ve hayal kırıklığı ile oldu.


Bu sorunun eski ve bir cevap verildiğini bile bilmiyordum. Hata.
efox29 17.03.2015
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.