ARM'yi havadan yükseltin


9

Uçakta GSM modem bulunan bir ARM kartı oluşturacağız.
ARM ürün yazılımını kablosuz olarak yükseltebilmek istiyoruz.

Bunun için iyi, güvenilir, açık kaynaklı bir çözüm var mı?
Değilse, bu özelliğe sahip ücretli bir işletim sistemi var mı?


2
ARM oldukça geneldir: ARM mimarilerini yerleştiren birçok üretici vardır ve bazıları bu özelliği sağlayabilir.
clabacchio

1
Hangi ARM çipini / ailesini kullanmayı planladığınız hakkında daha spesifik bir bilgi iyi olurdu. Çoğu Cortex-M mikro denetleyicisi olmasa bile, kullanıcı kodundan flash yazmayı destekler. Maple bootloader leaflabs.com/docs/bootloader.html gibi örnek açık kaynaklı uygulamalar var ve sanırım bazı quadcopter'de desteklenen bir radyo bağlantısı üzerinden bellenim yükseltmesi gördüm.
Thorn

Şu anda ARM cihazını
seçmedik

7
Ürün yazılımı yükseltmelerinde büyük sorun, ürün yazılımı ile ilgili bir sorun olduğunda çipi güncelleme moduna nasıl zorlayacağımızdır. Çipe erişiminiz olduğunda onu sıfırlayabilir ve bir önyükleme pimini yüksekte zorlayabilirsiniz, ancak bunu havadan nasıl yapacaksınız? Hayal edebileceğim tek güvenilir çözüm, temel iletişimi işleyen ve ana çipi güncelleyebilen ikinci bir çipe (güncellenemez) sahip olmak. Bu sorunu çözdükten sonra asıl önyükleme, çipin içine yerleştirilmiş önyükleyiciyi kullanmak kadar basit olabilir (örneğin, bildiğim LPC uC'lerinin hepsinde seri önyükleyici var).
Wouter van Ooijen

2
@Hernan Bu, bir çip (bir şekilde yanlış kodu çalıştırıyorsa) diğerinin sıfırlanmasını sağlayan ince hata modlarını mümkün kılacaktır. Gerçekten güvenilir tek çözüm, işlevleri bir çipte tutmaktır ve asla güncellemeniz gerekmez.
Wouter van Ooijen

Yanıtlar:


9

Önceden yapılmış çözümlerin farkında değilim ama bir projede nasıl dolaştığımı anlatacağım. Tamamen 'inatçı' değil ama binlerce yükseltmenin başarısız olduğunu bilmiyorum. Bu uygulama için, çok düşük bir arıza oranı, ünitelere erişmek zorunda kalmaktan daha ucuz olacaktır.

Ana uygulama, normal iletişim protokolüne hata tespiti ve üstte bir yeniden deneme durumu içeren üç ek paket türü ekler:

  1. Yeni bir bellenim güncelleme komutu, harici bir SPI Flash'ta ayrılmış bir bellek alanını temizler. Ünite yedek pilinden çalışıyorsa veya harici güçten çalışıyorsa ancak pil şarj durumu% 25'in altındaysa hata verir.

  2. Bir yazma bloğu komutu, ofset adresini ve harici Flash belleğe küçük parçalar halinde yazılan verileri kabul eder. Daha yüksek seviye protokolü, hata tespiti ve yeniden iletimlerle ilgilenir. Her blok yazıldıktan sonra, komut onaylanmadan önce okunur ve doğrulanır.

  3. Bir son ürün yazılımı güncelleme komutu, daha fazla doğrulama için alınan ürün yazılımının tüm görüntünün CRC32'siyle birlikte olması gereken uzunluğu içerir. Bu, harici Flash belleğin içeriğiyle eşleşiyorsa ve güç koşulları hala aynı ise ve CRC32 bir ürün yazılımı güncellemesinin beklemede olduğunu belirtmek için bir 'sihirli numara' ile birlikte bir EEPROM alanına aktarılır.

  4. Bir bekçi köpeği yeniden başlatmaya zorlamak için ana uygulamada bir sabit döngü yürütülür.

  5. (ARM'nin Flash'ın yazmaya karşı korumalı bir alanında bulunan) önyükleyici, EEPROM'daki sihirli sayıyı görür ve görüntünün CRC32'sini bir kez daha doğrular. Her şey yolundaysa, görüntüyü harici Flash'tan ARM Flash'ın ana program alanına aktarır.

  6. Bekleyen yükseltme bilgileri EEPROM'dan silinir ve sabit döngü başka bir yeniden başlatmayı zorlar. Bu kez önyükleyici ana uygulamayı normal şekilde başlatır.

Güncelleme aşamasının, dağıtımdan önce yeni bellenim sürümlerini test etmede başarısız olduğunu hiç görmedim, bu yöntemi kullanarak çok önemlidir. Yeni bir sürüm GSM şebekesine bağlanamaz ve gelecekteki güncelleme kodlarını kabul edemezse, yerinde bir ürün yazılımı güncellemesi gerekir.


1

Linux mu, RTOS mu yoksa çıplak metal mi kullanıyorsunuz? Debian'ı kullanarak mevcut dosya sisteminin anlık görüntüsünü alabilir, "apt-get" yoluyla yükseltme yapabilirsiniz, ardından çalışıp çalışmadığına bağlı olarak değişiklikleri saklayabilir veya geri alabilirsiniz.


Uygulamaya bağlı olarak Linux ve çıplak
metalimiz var

1
Linux'unuz varsa, bu altyapının çoğundan yararlanabilirsiniz. Mevcut projemdeki güncellemeleri işleme biçimim, özel uygulamalar için .deb dosyaları oluşturmak ve ardından sistemi güncellemek için apt-get güncellemesini kullanmaktır. Ben de btrfs ile denemeler yapıyorum. Bu dosya sistemi anlık görüntüler çekmenizi sağlar. Bu yüzden planım istenen dizinleri anlık olarak görüntülemek, güncellemeyi denemek ve eğer işe yaramazsa, anlık görüntüyü geri döndürmek. Çıplak metal kullanıyorsanız, muhtemelen her zamanki çift bellek yaklaşımına, en son çalışma kodu için bir görüntüye ve yeni indirilen kod için başka bir görüntüye gitmeniz gerekir.
fred basset
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.