Sabırsız için arka planı atlayabilirsiniz.
Arka fon
SPI ile iletişim kuran bir dizi mikrodenetleyici programlıyorum. n
Otobüsü paylaşan bir efendi ve köleler var. Çip seçimi yok. (Kötü bir tasarım değildir, ancak n
büyüktür ve n
fazladan çizgiler için yeterli alan yoktur ).
Bu nedenle, MISO'larını yüksek empedansta tutmak ve en fazla birini konuşmak kölelerin sorumluluğundadır. Bu sadece kimlikleri sorgulandığında yanıtlanarak yapılır.
Şimdi, ustanın, kimlikleri ona bağlı olan kimlikleri keşfettiği ilk keşif aşamasına sahip olmak istiyoruz. Hayatı kolaylaştırmak için (bazı yönlerden), kimliği benzersiz kılmak istiyoruz (ve dolayısıyla 32 bit). Bu, ustanın kimlikleri tek tek yok etmesini ve kimin cevap verdiğini görmesini imkansız hale getirir (çok fazla olasılık vardır).
Bu sorunu çözmek için, kölelerin toplu olarak yanıt verdiği ve ustanın hızlı bir şekilde minimum kimliği bulabildiği bir ikili arama varyasyonu tasarladım. Bu kimliğe sahip köle artık katılmaması söyleniyor ve algoritma tekrarlanıyor. (Ayrıntılar önemsizdir).
Yine de bir sorun var. Toplu yanıtın tüm yanıtların mantıksal OR (veya mantıksal AND) olması gerekir. Hattın, MISO veri yolunun mantıksal bir OR gibi hareket edebileceği şekilde yapılandırılabileceği söylendi. Bana söylenenler:
- MISO'yu master olarak Pull-up olarak ayarlayın ve
- Her köle için MISO'yu Open-drain olarak ayarlayın.
Bunu denedim, ancak tek bir köle bile, bu yapılandırma çalışmıyor (osiloskop hatta sabit bir sıfır gösterir). Master üzerinde MISO'yu yüksek empedanslı giriş olarak yapılandırırsam, osiloskop ile voltajın iki slave'den çıkış bitlerinin farklı olduğu yarıya düştüğünü görebiliyorum (temelde kısa devre I varsayıyorum).
Not: MISO'yu master üzerinde yüksek empedans ve köleleri itme-çekme olarak yapılandırırken, aynı veriyolunda birçoğu olsa bile her biri ile ayrı ayrı konuşabilirim. Demek istediğim, bu çizginin kendisinin bir problemi.
Soru
Benim sorum, eğer bu mümkün ise ve eğer öyleyse, master ve slave'lerin giriş ve çıkış pinlerini nasıl paylaşabilirim, böylece paylaşılan MISO hattı mantıksal VEYA (veya mantıksal VE) olarak hareket eder?
Düzenle
Sonuçta negatif-gerçek mantığı olan bir OR olur (temel olarak bir AND).
Tek slave ile ilgili problem, master üzerindeki çekme pimine 1 yazılmasıyla çözüldü. Daha önce başlangıç durumu 0 idi.
Düzenle 2
Çıktı ST köle, MISO'nun GPIO yapılandırmamı açık drenaj olarak geçersiz kıldı ve bir tanesi yazıldığında onu zorladı. SPI'nın susturulmasına ve MISO'nun bu durumda manuel olarak çıkarılmasına karar verdim.