Soru:
ASCII "A" nın SPI Protokolü üzerinden iletilmesi
P i
2012-03-14 21:21:33 UTC
view on stackexchange narkive permalink

Bir iPhone'un TRS jakından mikrodenetleyicideki bir SPI bağlantı noktasına doğrudan bağlanmayı içeren bir proje üzerinde çalışıyorum.

Yani iPhone usta ve mikro denetleyici de bağımlı

Öyleyse, iPhone'un sol hoparlör kanalının saat sinyallerini üretmekten sorumlu olduğunu varsayalım

Şimdi, örneğin ana bilgisayardan köleye tek bir ASCII baytı 'A' nasıl iletebilirim?

Saat kenarının her yükselişinde (diyelim ki sıfırı geçtiğinde), hem master hem de slave'in yeni bir bit okuduğunu görebiliyorum - ilgili MISO / MOSI'nin durumu ne olursa olsun

Ama nasıl bayt hizalaması yapılır?

'A' için ikili sayı 0100 0001'dir

Öncü 0'ı önceki sessizlikten nasıl ayırt edebiliriz?

Bu Bana öyle geliyor ki, mantıklı bir protokol, başlangıç ​​Sentinel olarak 0xFF veya başka bir şey kullanmak ve bir sonraki bayta gelecek paketteki bayt sayısını (1 ile 256 arasında) dikte ettirmek.

Ve sonra bu baytlar birbiri ardına gönderilir, ardından bir eşlik baytı gelebilir .

Belki her baytın eşlik biti olabilir ...?

Bu 'paket' gelir gelmez, kod çözücü başka bir başlangıç ​​Sentinel aramaya başlayabilir.

Demek SPI tasarlamaya böyle başlayacaktım. bu yüzden aslında nasıl yapıldığını anlatan bazı belgeler bulmaya çalışıyorum.

Ancak Google / Wikipedia / IRC'de gezinmek beni gerçekten hayal kırıklığına uğratıyor

Dışarıda biri var mı Bu protokolü anlayan ve bana gerçekten basit bir örnek kullanım vermeyi umursamayanlar - SPI aracılığıyla tek 'A' karakterini göndermek

Bunu yapmanın ne kadar kolay olacağından emin değilim. Bir iPhone'dan gelen ses çıkışı (ve temelde * her * diğer kulaklık jakı) hem AC bağlantılıdır ve 20Khz üzerindeki ve 20Hz altındaki frekansları engelleyen filtrelere sahiptir.
Kulaklık arayüzünün AC-bağlı yapısı nedeniyle uygun bir DC dengesi elde etmek için [8b / 10b kodlamasına] (http://en.wikipedia.org/wiki/8B/10B) bakmanız gerekebilir. Ayrıca, voltaj seviyelerinizin muhtemelen bazı eşik değerlere ve seviye çevirisine ihtiyacı olacaktır. MCU’yu doğrudan kulaklık konektörüne bağlayamazsınız.
Son olarak, bunun bit-banged SPI ile yapmanın ** çok ** daha kolay olacağını düşünüyorum, daha sonra bir MCU'nun yerleşik SPI modülünü olağandışı başlatma ve durdurma koşullarını ele almaya çalışmak yerine. Yazılımda karar vererek, kod çözücünün davranışı üzerinde çok daha hassas bir kontrole sahip olabilir ve başlatma ve durdurma koşullarını daha temiz bir şekilde yönetebilirsiniz.
Bu arada, "0xAA" ve "0x55" çerçeve senkronizasyonu için daha çok "A" olarak kullanılır. "0xAA", ikili dosyada "10101010" ve "0x55", "01010101" dir. Yinelenen modeller onları tanımayı kolaylaştırır.
Iki yanıtlar:
Jason R
2012-03-14 21:32:39 UTC
view on stackexchange narkive permalink

SPI aygıtları ayrıca tipik olarak, aygıtları tek bir SPI veriyolunda çoğaltmak için kullanılan bir çip seçme sinyaline (bazen çerçeve senkronizasyonu olarak da adlandırılır) sahiptir. Bu nedenle, SPI genellikle 3 telli veya 4 telli bir arabirim (MISO, MOSI, CS ve CLK; tek yönlü cihazlar için MISO veya MOSI ihmal edilebilir) olarak adlandırılır. Çip seçme sinyali ileri sürüldükten sonra bir çerçevenin tipik olarak ilk bitte başlayacağı varsayılır, ancak her cihazın kendi protokolü vardır. Bağlantının diğer tarafının beklediği her şeye bağlı kalmanız gerekir.

Mikrodenetleyicide bir I²C bağlantı noktası var mı? Belki bu daha iyi olur? "keyfi olarak düşük saat frekanslarına da izin verilir."
@endolith - Adreslemeye veya bu nitelikte başka herhangi bir şeye ihtiyacı olmadığını varsayarsak, basit bir veri ve saat mimarisinin çok daha basit olacağını düşünüyorum. Bu noktada gerçekten saf bir SPI uygulaması değil, ancak çalışması kolay olmalı.
bjthom
2012-04-26 10:21:31 UTC
view on stackexchange narkive permalink

SPI, verileri saat kenarlarında iletir. Yükselen mi yoksa düşen kenar mı, gönderenin ve / veya almanın ne yaptığına göre belirlenir. Durum bu olduğundan, çerçeve olarak saat darbelerinizi kullanabilmelisiniz.

Çoğu cihazda MISO, MOSI, CLK ve CS bulunur. Bağımlı modda CS'yi topraklayabilir ve mikro denetleyicinin herhangi bir SPI iletimini "dinlemesini" her zaman sağlayabilirsiniz. İPhone ustadır ve MOSI ve CLK'yi kontrol eder. Bağımlı mikro denetleyici verileri okumayacağından, saat çalışmıyorken iPhone'un MOSI çıkışına ne yaptığı önemli olmamalıdır. Sonunda, önemli olan tek şey MOSI çıktı verilerinin doğru saat kenarlarında geçerli olmasıdır.

Hangi mikrodenetleyiciyi kullandığınızı belirtmediniz, ancak Atmel'in AVR serilerindeki SPI uygulamaları hakkında iyi bir uygulama notu var. YSİ verilerini araştırmak için temelli planı düşünebilir ve durdurabilirsiniz.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...