Mcu'nun hangi donanım sürümünü çalıştırdığını belirlemesinin iyi bir yolu nedir?


13

Yeni bir ürün tasarımı üzerinde çalışıyorum ve muhtemelen ürünün ömrü boyunca küçük veya büyük donanım değişiklikleri / düzeltmeleri olacak. Alandaki gelecekteki bellenim güncellemeleri için donanım revizyonunu belirlemenin bir yoluna ihtiyacım var. İyi bir strateji nedir?

Şu anda harici dirençlerle iki yedek pimi yukarı / aşağı çekiyorum ve deseni kontrol ediyorum. Bu sadece 4 donanım revizyonuna izin verir, ancak bu pratik amaçlar için yeterli olabilir. İlerideki bir donanım revizyonunda bu pinlerden birine veya her ikisine ihtiyacım olursa sorun olabilir.

Sanırım daha ekonomik bir yol, bir ADC pinine bağlı bir direnç bölücüsü olmak olabilir. Her donanım revizyonu farklı değer dirençlerine sahip olabilir. Maalesef mevcut tasarımımda yedek ADC'lerim yok.

Üretim sırasında donanım sürüm numarasını bir EEPROM veya mcu flaş kodlamak olabilir başka bir yolu olabilir? (Şu anda bu tesisimiz yok.)

Sanırım esnek ve sağlam bir yöntem için öneriler arıyorum.

[DÜZENLE]

Yeniden. @ trav1s tarafından öneri: Ben kendi başına bir adres veriyolu yok ama I2C veriyolunda 24LCxx EEPROM var. Slave Adresinin düşük 3 biti kabloludur. Başlangıçta adres bitlerini değiştirebilir ve EEPROM'u arayabilirim.

Yanıtlar:


7

Bu sürekli olarak uğraştığım bir şey. Çeşitli alt sistemlerin farklı sürümleri ile neredeyse 10 yıldır sahada olan çok karmaşık bir donanıma sahibiz. Bazı alt sistemlerin 2 bitlik bir kodu vardır, ancak belirttiğiniz gibi, bu her zaman yeterli değildir.

EEPROM önerisi iyi bir fikirdir, ancak EEPROM'un programlanmasını ve kartın doğru sürümle doldurulmasını gerektirir.

Ne önermek bir 74HC166 gibi 8-bit paralel seri çıkış çıkış kaydıran. Sürüm numarası, PC kartının kendisi tarafından YÜKSEK veya DÜŞÜK girişleri bağlayarak girişte ayarlanabilir ve daha sonra bir MCU'dan kaydırma yazmacını yüklemek ve okumak için sadece 3 pime ihtiyacınız vardır.


Ben hw sürümü tahtada kablolu olduğunu, bu şekilde sadece bir firmware sürümüne ihtiyacım var ve önceden programlanmış EEPROM'ları işlemem gerekmiyor. Görünüşe göre bir vardiya kaydı yaklaşık 0.1 USD bulunabilir ve bu sorun değil.
morten

2
Aynı hatlar boyunca, I2C veriyolunuzdan sarkan bir I2C port genişletici de kullanabilirsiniz. Yine de biraz daha pahalı olabilir.
alex.forencich

8

Mikrodenetleyiciye programlanmış bir sürüm numarası kullanmazdım. Yazılım farklı pano sürümleri için farklı değilse, ancak pano sürümü bana gereksiz geliyor. Mikrodenetleyici yazılımının mümkün olduğunca az sürümüne, ideal olarak sadece bir sürümüne sahip olun. Her farklı sürüm lojistik sorunlara neden olabilir.

EEPROM kodu iyi bir fikirdir, çünkü birçok farklı kart koduna izin verir , ancak ayrı bir cihazda mikrodenetleyiciden çıkarır. EEPROM büyük kapasiteler için pahalıdır (Flash başına bit başına çok daha pahalıdır), ancak birkaç bayt için bunları ucuz bulabilirsiniz. Bu 100'lerde sadece 16 sent ve sadece 1 I / O hattı gerekir.

Hata olasılığını azaltmanın bir yolu, her kart sürümü için farklı bir pakete sahip olmaktır. SOT-23 sürüm numarası 1, MSOP sonraki sürüm 2 ile programlanmış bir grup EEPROM var. Sonra sürüm 2 tahtada sürüm 1 EEPROM olamaz.


Teşekkür. Bu aptalca bir soru olabilir, ancak bunları tahtaya koymadan önce programlanmış bir grup EEPROM'u nasıl edinebilirim? EEPROMS'u banttan çıkarma, programlama, bant üzerine geri koyma ve bandı PCB montajcısına gönderme imkanım yok.
morten

@morten - Tedarikçiniz bunu sizin için yapabilir. Onlara dosyanızı gönderirsiniz (bu bir bayt :-)) ve seçtiğiniz program işaretiyle işaretlenmiş parçaları geri programlamış olursunuz. Maliyet, parti boyutuna bağlı olacaktır; sabit bir maliyete ve parça başına maliyete sahip olacaksınız. Bir keresinde, programlamayı kendimiz yapmanın daha ucuz olmayacağını hesapladık, ancak her durumda binlerce için buna değmezdi.
stevenvh

4

Sadece iki dijital pin kullanacak bir seçenek şudur:

Devre şeması

R1 ve C1 değerlerini değiştirerek, donanım sürümünü belirlemek için ölçebileceğiniz kapasitör için farklı şarj sürelerine sahip olabilirsiniz.


Aha, oldukça zekice bir çözüm :-)
morten

2

Adres veriyolunda kullanılmayan bir alan varsa, veri yoluna MCU tarafından okunabilen bir ROM kaydı yerleştirebilirsiniz. Kayıt, donanımın sürüm numarasını içerecektir. MCU bu adresten okuduğunda, kayıt defteri değerini veri yoluna yazar. Kayıt kartı tahtaya bağlanabilir veya sürüm numarasını çıplak elinizle değiştirmek isterseniz, şu anda yaptığınız gibi yukarı / aşağı bağlanabilen pimler yapabilirsiniz.


Belki EEPROM'un adresini kullanabilirim ... soruya düzenleme bölümüne bakınız.
morten

TAMAM. Bir I2C otobüs olduğunu bilmiyordum. Belki de MCU okurken sürüm numarasını okuyan küçük bir I2C slave yapabilirsin.
travisbartley
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.