SPI'nin kesilmesi güvenli midir?


17

Yazılımımın içinden bir microSD karta yazıyorum , ancak en düşük öncelikli görev, bu nedenle okuma / yazma ortasındayken diğer görevler tarafından kesilebilir.

Şimdi bu microSD kartla bir UART kullanarak iletişim kurduğumu varsayalım. Okumalar sırasında sorun donanım RX FIFO'nun taşması olacaktı, bu yüzden çabalayabileceğim maksimum gecikme (FIFO boyutu × bayt / saniye) olurdu ve yazma sırasında sorun olmayacaktı, çünkü diğer son sadece sonraki karakteri gönder.

Bu nasıl şimdi SPI kullanıyorum? Durum, yazma için önemli değil ve okumalar için SPI FIFO boyutuna bağlı mı?

Yanıtlar:


22

SPI cihazlarının büyük çoğunluğu belirtilen maksimum değerin altındaki herhangi bir veri hızında mükemmel bir şekilde mutlu olacaktır. Bir işlemin bir parçası olabilir, herhangi bir noktada mola verebilir, birkaç yıl sonra geri gelebilir ve bitirebilir. Saat, seçim veya güç hatlarında aksaklık olmaması durumunda işlem normal şekilde tamamlanır.

Dikkat edilmesi gereken üç ana uyarı vardır:

  1. Genel olarak, bir SPI veri yolu üzerinde bir işlem başladıktan sonra, veri yolu üzerindeki kabloların hiçbiri bu işlem tamamlanana kadar başka herhangi bir amaçla kullanılamaz. Genel olarak, bu, kesmenin veri yolunu kullanacak tek şey olmadığı sürece bir SPI veri yolu kullanamayacağı anlamına gelir (kesmenin veri yolunu bazı zamanlarda ve ana hat için özel olarak kullanması mümkün olabilir) programın diğer zamanlarda münhasıran kullanılması). Bazı cihazlar, bir işlemin ortasında veri yolunu "görmezden gelmelerini" sağlamak için özel iğneler içerir, ancak bu tür özelliklerde bile bir kesintinin bir cihazla bir SPI işlemini askıya almasını, başka bir cihazla işlem yapmasını önermem, ve ardından temel kodun ilkiyle işlemine devam etmesine izin verin. Kesmenin ayrı bir SPI veri yolu kullanması daha iyidir.
  2. Bir işlem çok uzun süre devam ederse bazı aygıtlar tuhaf davranabilir. Örneğin, bazı gerçek zamanlı saat yongaları, saat / tarih kayıtlarını iki kez arabelleğe almaz, bunun yerine bir işlem sırasında oluşacak "zaman ilerletme" olaylarını kilitler ve işlem tamamlandıktan sonra bunları uygular. Bir işlem ikinci bir zaman ilerletme olayının gelmesi için çok uzun sürerse, ikinci olay yok sayılır ve saatin bu süre kadar kaymasına neden olur. Gerçekten böyle bir yonga tasarlamak için bir bahane görmüyorum (biri veriyi arabelleğe alma maliyetini istemiyor olsa bile, yazılımın tutarlılığının "güncelleme erteleme" mantığını eklemekten daha ucuz olmasını sağlamaktan sorumlu olduğunu belirterek, ve saat bozulması olasılığını en aza indirir), ancak bu tür çipler vardır.
  3. Saat ve veri sinyali kullanan ancak çerçeveyi belirtmek için "duraklatma" kullanan birkaç cihaz vardır. Karşılaştığım en son örnek, ampul başına bir denetleyici LED ışık dizesiydi. Özellikle bu tür tasarımları sevmiyorum (bir tanesi, herhangi bir müdahale saati olmadan veri kablosunda art arda üç yükselen kenar kullanarak çerçeveyi gösterebilir) ama yine, bu tür cihazlar var.

Bazı iletişim türleri belirli zamanlamaların kullanılmasını gerektirse de, SPI cihazlarının bunları gerektirmesi için nadiren herhangi bir neden vardır. Bununla birlikte, bu tür cihazların varlığına dikkat edilmelidir.


3
+1 Güzel! Tüm düşüncelerinizi / hayal kırıklıklarınızı tamamen kabul edin. Çok fazla gördüm.
DrFriedParts

11

Spesifikasyonun bir kopyasını kontrol etmek (telif hakkı / NDA nedenleri için teklif veremiyorum) SPI oranı, statik çalışmanın iyi olduğunu ima eden 0Hz'den başlayarak belirtilir. SPI altında, yalnızca cihaz saatlenirken verileri geri alırsınız, bu nedenle bir donanım SPI kullanıyorsanız, yalnızca veri gönderildikten sonra (0 / umursamasanız bile) bir şey alırsınız. Bu bakımdan, istenmeyen verileri istediğiniz zaman geri alabileceğiniz bir UART'tan farklıdır.


Bu yüzden tek endişem MicroSD kartın bir çeşit zaman aşımına sahip olması, ancak SPI'nin kendisi olmaması mı?
Muis

5
Gördüğüm tüm özelliklere göre, SD kartta da herhangi bir zaman aşımı olmamalı, bu yüzden herhangi bir sorun yaşamanız gerektiğini gerçekten görmeyin. Yıllar önce bazı özel kodlar yazdım ve hata ayıklama, SPI işlemleri arasında 10 saniye veya daha fazla zaman bırakarak kod boyunca tek adım oldu ve hepsi iyiydi.
PeterJ

1
+1, SPI'yı 0 Hz'e kadar çalıştırabilmek hata ayıklama için bilmek faydalıdır. Teşekkürler.
Anindo Ghosh

1
Bazı SPI aygıtlarında veri çıkışının yalnızca belirli bir saat kenarında değişebileceğini, ancak bazılarında veri çıkışının bazen eşzamansız olarak değişebileceğini belirtmek gerekir; bu özellikle "meşgul" bir bit ile yaygındır. Bazı yongalarda, biri "meşgul" bitinin durumunu zaman aşımına uğrattıysa ve parça meşgul olmadığında hala çıktıdaysa, çıktı eşzamansız olarak değişecektir. Diğer bazı yongalarda, bildirilen "meşgul" durumu yeniden saat saatine kadar değişmez. Her iki tasarımın da avantajları ve dezavantajları vardır, bu nedenle her iki tasarım türünün de var olduğunu bilmek yararlıdır.
supercat
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.