Yanıtlar:
MCU’da bulunan gerçek bir SPI kontrol cihazı, sık sık arayüze çarpmadan çok daha hızlı çalışabilir. Tabii ki, bu MCU’ya bağlı, ancak 30 + MHz’de çalışan bir SPI denetleyicisini görmek beni şaşırtmaz, oysa bit vuruş 1 MHz ile sınırlı olabilir (eğer şanslıysanız).
Ama bundan daha fazlası var. Bit çarpması sırasında, MCU bit çarpmasıyla meşguldür. Verileri değiştiriyor ve GPIO hatlarını titriyor. Yani başka bir şey yapamaz. Bir SPI kontrol cihazı kullanırken, kontrol cihazı bütün bunları yapmakla meşgul ve MCU başka şeyler yapmakta serbest.
Böylece gerçek bir SPI kontrol cihazıyla, gerçek SPI aktarımı çok daha hızlıdır ve MCU başka şeyler yapmak için kullanabileceği bazı döngüleri geri kazanır.
Her iki yöntemi kullanarak aynı sonucu elde edebileceğiniz açısından hiçbir fark yoktur, ancak birini diğerinden seçmenin birkaç nedeni vardır.
Bir SPI çevre birimi kullanmak, işlemciyi I / O pimlerini ısırmak için bit zamanlaması oluşturmaya özen göstermek zorunda kalacak, diğer hesaplama işlemlerini gerçekleştirmesine ve CPU programlamanızı basitleştirmesine yardımcı olacaktır. Çevre birimin donanıma uygulandığından daha hızlı çalışacak ve bit g / Ç'den daha az güç kullanacaktır. Uygulamanızın bir SPI çevre birimi olmayan bir işlemci seçmenizi talep etmesi durumunda, G / Ç'yi SPI ile arabirim oluşturmak için bağlamak isteyebileceğiniz durumlar olabilir. Akıl sağlığı nedenlerinden dolayı, kesinlikle gerekli olmadıkça, bundan kaçınmayı tavsiye ederim.
SPI, saati kontrol eden master ile senkronize bir arayüzdür. Bu, eğer ustaysanız, saatin hızını ve zamanlamasını seçmeniz anlamına gelir. Bağımlı cihazların kullanabildikleri saat frekansında bir miktar üst sınırı olacaktır, ancak genellikle saatin altında ne kadar yavaş olduğu umurumda değildir. Daha spesifik olarak, genellikle her bir kölenin saati tekrar açmadan önce yüksek ve düşük durumda görmesi gereken asgari bir süre vardır ve bazı minimum veri kurulumları ve saat kenarını çevreleyen veri hattında sınırlamalar vardır. slave veri satırını okur.
Bu nedenle, bir SPI master'in bellenim içine yerleştirilmesi gerçekten çok kolaydır. Bunu, SPI donanımı bulunmadığında ya da herhangi bir nedenden ötürü kullanılamadığında, belirli pimleri kullanma kolaylığı olarak yaptım. Bir SPI master'in bellenimde yapılması, olabildiğince kolaydır.
Birçok SPI bağımlı cihazı oldukça hızlıdır, bu nedenle çoğu zaman minimum saat ve kurulum süreleri, her birinin en az bir komut döngüsü genişliğinde olmasını sağlayarak kolayca karşılanır. Bu durumda, kod çok kısa ve hızlıdır. Bazı durumlarda, bir köle cihazı, saat fazı başına iki veya üç talimat döngüsü gerektirebilir, ancak bu garanti edilmesi de zor değildir. Düşük seviyeli SPI bit döngüsü, bir sonraki çıkış bitinin yerine bir miktar kaydırılmasını, giriş bitini tutmasını ve döngü sayacını kontrol etmesini gerektirir. İki ya da üç döngü minimum zamanlama gereksinimlerini, sadece doğru yerlere yerleştirilmiş diğer ek yüklerin bir kısmı ile çizgileri sürerken ve örneklerken düzenleyerek karşılayabilirsiniz. Hız önemliyse, kontrolsüz bir döngü yazmak için assembler ön işlemcisini kullanabilirsiniz. Bunun gibi tekniklerle,
SPI master'ı bellenimde yapmanın bazı avantajları vardır. SPI donanımı bazen nasıl konfigüre edilebileceği konusunda biraz dağınıktır. Her zaman, köle seçimi yapıldığında tam olarak ne olması gerektiği sorusu vardır. İlk bit veri satırlarına yazılır mı? Saat düşük başlarsa ve veri hatları düşen kenara kilitlenirse? Bazen bu önemlidir, bazen değildir. Firmware SPI ana yazılımı ile daha bağışlayıcı olabilir ve muhtemelen farklı kölelerle iletişim kurmak için aynı rutini kullanabilirsiniz. Örneğin, MOSI (Master Out Slave In) veri hattının saatin her iki tarafında da sabit olduğundan emin olabilirsiniz. SPI donanımı genellikle bunu yapmaz, bu nedenle o zaman hangi köle ile iletişim kurduğuna bağlı olarak bu donanımın yeniden yapılandırılması gerekir.
Üretici yazılımı SPI yöneticisinin diğer bir avantajı, SPI dizisi başına rastgele sayıda bit seçebilmenizdir. Donanım genellikle 8 bit'in katlarıyla sınırlıdır. Çoğu cihaz tam bayt transferine izin verecek şekilde tasarlanmıştır, ancak çoğu zaman bunları gerektirmez. Örneğin, 10 bitlik bir A / D büyük olasılıkla ilk önce 10 veri bitini gönderir, daha sonra eğer saatlerce devam ederseniz ondan sonra 0 veya çöp gönderir. Donanım SPI kullanıyorsanız, 16 bit aktarmanız ve çöpleri maskelemeniz gerekecektir. Her şey yoluna girecek, ancak bir bellenim SPI master'ı bu durumda donanımdan daha hızlı olabilirdi, çünkü sadece gerekli olan minimum 10 bit tranfer'i değiştiriyordu.
Donanım SPI yöneticilerinin ana avantajları, bellenimin bir bayt aktarımı başlatabilmesi, daha sonra çıkıp başka bir şey yapabilmesidir. Saatçilik, genellikle kontrolsüz bir ürün yazılımı döngüsünün elde edebileceğinden bile daha hızlı olabilir. Bu avantajların her ikisi de bazı durumlarda önemli olsa da, bunların genellikle alakasız olduğunu unutmayın. Bir baytı aktarmak için donanım kullanan çoğu SPI kodu, ardından donanımın aktarımı tamamlaması için hemen bir bekleme döngüsüne gider. Ayrıca köle zamanlama gerekliliklerini dikkatlice kontrol edin. SPI cihazları genellikle bir bütün olarak hızlıdır, ancak kölenin kullanabileceği maksimum hıza uyması için donanımı yine de yavaşlamanız gereken durumlar vardır.
Hepsi ana bakış açısıyla yapıldı. Kısacası, SPI donanımını usta olarak kullanmanın pek bir avantajı yoktur ve hatta bazen kullanmamakta da birkaç avantaj vardır. Ancak, hepsi köleler için farklı. Master saati kontrol ettiğinden, köle master ne yaparsa yapsın, ne yaparsa yapsın hazır olmalı. Zamanlama gereksinimleri genellikle talimat sürelerine göre oldukça kısadır, bu nedenle bir SPI bağımlısı uygulayan donanıma sahip olmak genellikle istediğiniz şeydir.
SPI slave'lerini bellenimde yapabilirsiniz, ancak çok zordur, döngüleri ve gecikmeyi dikkatlice saymanız gerekir ve genellikle kendi ana ustanızın kullandığını bildiğiniz protokolün bazı alt kümelerini uygulamanız gerekir. Örneğin, bir keresinde eski bir analog kontrol panosunun dijital eşdeğerini tasarlamak zorunda kaldım (analog olarak makul bir şekilde yapılamayan ekstra özellikler istediler ve daha küçük, daha ucuz ve daha istikrarlı bir şeyler istediler). Bu kart sistemin geri kalanına bir SPI veriyolu üzerinden arayüzlendi. Eski analog kart kontrol değerlerini ayarlamak için iki kanallı bir D / A'ya ve ölçülen değerleri geri okumak için iki kanallı bir A / D'ye sahipti. Her ikisini de tek bir işlemcide uygulamak zordur ve donanımın D / A ve A / D SPI protokolünün hangi alt kümesinin gerçekte kullandığını tespit etmeyi de içerir. Ayrıca, SPI saat hızından çok daha hızlı çalışabilen bir işlemci geliştirdi. Sonunda, her bir slave seçimi için bir tane ve saat çizgisinin yükselen kenarı için bir tane üç kesme kullandım. Bu sonuncunun sistemdeki en yüksek öncelikli kesme olması gerekiyordu, aksi halde gecikme gereksinimi karşılanamıyordu.
Her neyse, genel nokta bir ürün yazılımı SPI yöneticisinin kolay, küçük, hızlı ve esnek olması ve bir tane yapmaktan kaçınmak için çok az nedeninin olmasıdır. Öte yandan, bir köle için gerçekten donanım istersiniz, ya da zamanlama, gecikme ve benzeri konular hakkında çok dikkatli bir şekilde uyanmanız ve düşünmeniz gerekir.
SPI'yi ne için yaptığınıza bağlı. İlgi alanınız bunun dışında en yüksek veri oranlarını elde ediyorsa, donanım her zaman bitbanging'den daha hızlıdır (örn. Teensy 3'teki kol korteks çipi 3) donanım SPI desteğini kullanarak veriyi 22Mbps'de, örn. ayrıca devir başına 3-16 arasında devir başına bit sayısını işleyebilir - bazı led denetleyiciler için 12 bitlik parçalar halinde veri gönderirken kullanışlıdır!)). 16MHz avr, fark biraz daha az aşırı, donanım ile en yüksek veri hızı yüksek 4 / düşük 5Mbps gibi görünüyor, bitbanging ise 2.3Mbps civarındadır).
Ek olarak, donanım desteği kullanıyorsanız, yine söz konusu mikrodenetleyiciye bağlı olarak, verilerinizi kaydırmak için DMA denetleyicilerini kullanmak, kodunuzu verilere bakmaktan başka, potansiyel olarak daha ilginç şeylere geri döndürmek için kullanabileceğiniz seçenekleriniz vardır. yazmak.
Yukarıdakilerin tümü, donanım SPI'sının bir seçenek olup olmamasına bağlıdır.
SPI'yi ıskalarsanız, iletişimleri işlemek için SSP kesmesini kullanamazsınız. Bu, birçok kullanım için SPI için önemli değil.