Özel bir I2C master-slave sistemi nasıl tasarlanır ve hata ayıklanır?


10

Özel bir I2C master-slave sistemine ihtiyaç duyulduğunda nasıl devam edilir?

Uygulanacak tasarım kriterleri nelerdir?

Sorunları gidermek için kullanabileceğiniz hata ayıklama araçları nelerdir?


Bu bir referans sorusu. Bunu daha az belirgin yapan birkaç yorumu sildim. (Soru asker tarafından cevaplanır).
Nick Gammon

Yanıtlar:


10

Gömülü Linux Konferansı'nda verdiğim bu öğretici, soruları cevaplamaya, ele alınan konuların daha ayrıntılı açıklamasına bağlantılar sağlayarak ve bir Arduino Mini Pro'nun köle gibi davrandığı ve 4 bağımsız tekerleği kontrol ettiği 4WD drone kullanmanın pratik örneğini kullanarak çalışıyor. . Orijinal belgeyi burada bulabilirsiniz .

Not: Bağlantıdan vurguları uyarladığım için bu cevap şu anda devam ediyor.


I2C veriyolunun tipik uygulamaları

  • Nispeten yavaş çevre birimleri ile arayüz oluşturma. Örn: sensörler, mekanik aktüatörler.
  • Veri alışverişi için diğer kanalları kullanan “hızlı” çevre birimlerini denetleme. Örn: kodekler.

    Bir PC'de, İşletim Sistemi genellikle I2C üzerinden aşağıdakilerle etkileşime girer:

    • sıcaklık ve akü voltaj metre;
    • fan hızı kontrolörleri;
    • ses kodekleri.

Birden fazla veri yolu denetleyicisinin bulunması durumunda, çevre birimleri hıza göre gruplandırılır, böylece hızlı olanlar daha yavaş olanlarla cezalandırılmaz.


I2C veriyoluna hızlı bir giriş - temel özellikler

  • Seri veri yolu.
  • Sadece 2 satır: Seri CLock ve Seri DAta (artı toprak).
  • 4 hız: 100kHz, 400kHz, 1MHz, 3.2MHz.
  • Tipik olarak 1 ana cihaz ve 1 veya daha fazla slave.
  • İletişim her zaman bir ana cihaz tarafından başlatılır.
  • Birden fazla master aynı veriyolunda (çoklu-master) birlikte bulunabilir.
  • Açık Tahliye: Hem SDA hem de SCL'nin çekme dirençlerine ihtiyacı vardır.
  • “Saat Esnetme”
    • Master SCL'yi kontrol eder, ancak hızı ayarlaması gerekiyorsa bir köle onu (açık drenaj nedeniyle) tutabilir.
    • Kaptan bu senaryoyu kontrol etmelidir.
    • Bir köle takılabilir ve otobüsü sıkıştırabilir: master'dan slave'e sıfırlama hatları gerekir.
  • Genellikle 7 bit adresleme, aynı zamanda 10 bit desteklenir.
  • Mantıksal protokol: gerçek voltaj seviyeleri belirtilmemiştir ve bireysel uygulamalara bağlıdır. Örn: 1.8V / 3.3V / 5.0V

Referans URL'ler:

Veri Yolu Yapılandırması Örneği

Veri Yolu Yapılandırması Örneği


Protokolün özellikleri (basitleştirilmiş)

  • 2 mesaj tipi: okuma ve yazma
  • Başlat / Durdur biti - yanıtın geri kalanında “[“ ve “]” olarak temsil edilir
  • Adres: 7 veya 10 bit
  • R / W biti: R = 1 / W = 0 Gönderilen mesaj türünü ayırt etmek için kullanılır.
  • Veriyolundaki veriler: (Adres << 1 | R / W)
  • Seçilen cihazda bilgi işleyici olarak kaydeder.

Otobüs trafiği örneği

Otobüs Trafiği Örneği Veri Yolu Yazma Döngüsü Örneği Veri Yolu Okuma Döngüsü Part1 Örneği Veri Yolu Okuma Döngüsü Part2 Örneği


Özel Köleler

Neden özel bir I2C slave oluşturmalıyım?

  • I2C arayüzü ile istenen sensör / aktüatör kullanılamıyor.
  • İhtiyaç duyulan kölelerden daha az benzersiz adres mevcut.
  • Slave üzerinde istenen özel işlevler:
    • Uyaranlara yarı otonom reaksiyonlar.
    • Giriş verilerinin filtrelenmesi / önişlenmesi.
  • Güç optimizasyonu: özel “sensör hub'ı” ana işlemci boştayken oda temizliğini yapar.
  • Girişlere gerçek zamanlı yanıt.
  • [burada hayal gücünüz]

Özel bir I2C slave nasıl tasarlanır?

  • Gereksinimleri tanımlayın (önceki slayta bakın).
  • Mikrodenetleyici veya mikroişlemci seçin.
  • Zamanlayıcı veya İşletim Sistemi'ni (varsa) seçin.
  • İletişim alt protokolünü tanımlayın:
    • Değiştirilecek parametreleri ve komutları tanımlayın.
    • Bunları "kayıtlar" halinde düzenleyin ve ücretsiz bir adres seçin.

I2C Master tasarımı

Anahtar tasarım kriterleri:

  • Ağırlık / Boyutlar.
  • Gerekli hesaplama gücü ve ortalama gecikme süresi.
  • PC benzeri cihaz
    • Gömülü cihaz, genellikle başsız.
    • Tercih edilen programlama dili: yorumlanmış ve derlenmiş.
  • Slave (ler) i sürmek için otobüs / gpios bulunması:
    • Yalnızca GPIO'lar: protokolü bitbang
    • I2C: kullanıcı alanı uygulaması vs çekirdek sürücüsü.
    • GPIO / I2C arabirimi yok: USB - I2C adaptörü.

Hata ayıklama: Böl ve Fethet

Geçici bir cihazla otobüsün doğrudan kontrolünü elinize alın. Örnekler:

  • Otobüs Korsan (diğer otobüsler için de yararlıdır)
  • FTDI FT232R yongasını temel alan USB'den I2C Master adaptörüne.
  • Özel cihaz (ayrı bir proje olabilir).
  • Bir mantık analizörü veya bir kapsam / gelişmiş ölçüm cihazı ile veriyolunu kapatın. Örnekler:

    • uyumlu mantık analizörlü sigrok / pulseview
    • 2 kanal bağımsız kapsam / metre
    • Slave'e özgü In Circuit Debugger / In Circuit Emulator kullanın.

      Örnek: AVR çipleri için AVR Dragon (Arduino UNO, Nano, Mini, MiniPro)


BUS Korsan

Otobüs Korsan

  • Öncelikle geliştirme amaçlı.
  • Hem otobüsü koklayabilir ve sürebilir.
  • Makrolar dahil seri (ttyACM) bağlantı noktası üzerinden konsol arayüzü veya çeşitli programlama dilleri için programlı erişim.
  • Dahili çekme dirençleri ve voltaj kaynakları (5V / 3.3V)
  • Diğer birçok protokolü destekler.
  • Kaynaklar: Wikipedia , ana sayfa

USB - I2C Adaptörü

usbtoi2c

  • Küçük ayak izi.
  • Kalıcı kurulumlar için uygundur.
  • Ana bilgisayarda özel bağlantılara gerek yok: tipik bir PC ile arayüz oluşturmak için kullanılabilir.
  • SPI özellikli varyant da mevcuttur.
  • Konsol arayüzü yok, sadece seri ikili protokol.
  • Protokol sarmalayıcı gerektirir .
  • Referans: protokol

sigrok ve pulseview

sigrok (fırın bileşeni) logosu

sigrok

pulseview (görüntüleyici) örneği

pulseview

Düşük uç mantık Analizörü örneği

saleae

  • Linux üzerinde PC tabanlı ölçümler için fiili standart (ancak diğer işletim sistemlerinde de mevcuttur).
  • Çok çeşitli mantık analizörleri, kapsamları ve sayaçları için destek.
  • I2C dahil olmak üzere çeşitli protokol kod çözücüleri.
  • Mantıksal sinyalleri görselleştirmek ve protokol hatalarını ayıklamak için kullanışlıdır.
  • Çok düşük uçlu olsa bile, ucuz HW hata ayıklamaya tamamen yeni bir boyut sağlayabilir.
  • Referanslar: sigrok , pulseview , desteklenen donanım

Örnek: 4WD drone'yu yönlendirmek

Prototip 2 Arduino Mini Pro kullanılarak üretilmiştir. Uçan göz


Köle örnekte ne yapıyor?

I2C köle:

  • Her tekerleğe uygulanan tork miktarını kontrol eder.
  • Her tekerleğin dönme yönünü kontrol eder.
  • Her bir tekerleğin dönüş hızını bir optik kodlayıcı (Kilometre Sayacı) ile ölçer.
  • Yukarıdaki parametreleri I2C Master'a gösterir.

Köle Rolü

I2C Slave'in yüksek seviye blok şeması.


Slave Seçimi: Arduino Mini Pro

MiniPro

  • Her tekerlek için yeterli pim / fonksiyon:
    • Görev döngüsünün bağımsız konfigürasyonu ile 1 PWM çıkışı.
    • Kilometre sayacı girişini IRQ olarak kaydetmek için 1 GPIO.
    • Seçmek için 2 GPIO:
      • ileri
      • Tersine çevirmek
      • Boşta
      • Kilit
  • Kesmeye bağlı i2c değişimleri için I2C HW bloğu.
  • SPI tabanlı programlama için özel pinler.
  • Küçük ayak izi.
  • Düşük maliyetli.
  • Resimde gösterilen klonun kart düzeni, bir DIL soketine monte etmek için optimize edilmiştir.

Köle özgü ICD: AVR Dragon

AVR Ejderhası


İşletim Sistemini Seçme: ChibiOS

ChibiOS

  • RTOS: önleme, görevler, semaforlar, dinamik sistem tic, vb.
  • Küçük kaplama alanı: yalnızca kullanılan kod / veri bağlantısı.
  • HAL ile RTOS ve BSP arasındaki fark.
  • Ticari olmayan kullanım için GPLv3.
  • Aktif olarak gelişti, ancak zaten olgun.
  • 8bit AVR'yi destekler.

Bununla birlikte, AVR için sınırlı BSP desteği vardı, eksikliği: - AVR GPIO'lar için sürücüyü keser (eklendi). - AVR bağımlı mod için I2C desteği (özel). Hangi AVR için Drone SW bir parçası olarak ayrı ayrı geliştirilmesi gerekiyordu .


İletişim Parametrelerini Tanımlama

Her tekerlek için:

  • Sürmek için kullanılan PWM sinyalinin Görev Döngüsü - 1 bayt. 0xFF = maksimum tork / 0x00 = tork yok.

  • Yön dönme - 1 bayt.

    • 0x00 = boşta
    • 0x01 = ters
    • 0x02 = ileri
    • 0x03 = kilitli
  • Optik kodlayıcının yuvaları arasındaki ortalama süre - 2 bayt.

    • Bir şey yazmak, ölçümü sıfırlar.
  • Parametre Dizini - 1 adet

    • 0 = Görev Döngüsü
    • 1 = Yön
    • 2 = Ortalama Dönem
  • Tekerlek endeksleri - 1 kemirmek:

    • 0 = Sol Arka
    • 1 = Sağ Arka
    • 2 = Sağ Ön
    • 3 = Sol Ön
    • 4 = Tümü

Alt Protokol: Kayıtları Tanımlama

Kayıt formatı: 0xαβ - α = Parametre Dizini - β = Tekerlek Dizini

Adres (isteğe bağlı olarak seçilir): 0x10

Bus Pirate biçimi: - [= başlangıç ​​biti -] = bitiş biti - r = okuma baytı - adres süreleri 2 (sol kaydırma 1), R / W bit için


Örnek - Bus Pirate Formatında

[i2c_addr reg_addr = (parm, tekerlek) reg_value]

[0x20 0x20 0x02]  Left Rear Forward
[0x20 0x21 0x01]  Right Rear Backward
[0x20 0x22 0x01]  Right Front Backward
[0x20 0x23 0x02]  Left Front Forward
[0x20 0x14 0xFF]  Wheels set to max torque

Araba saat yönünde döner.

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.