Komunikace po CAN sběrnici


Poslední změna: středa 1. října 2008

1. Zadání

Napište program v jazyce C, který umožňuje zadat číselný údaj z klávesnice (dle 1. a 2. bodu předešlé úlohy ) dále poslat/přijat zadané číslo po CAN sběrnici.

  • po stisknutí klávesy ODESLAT se odešle zadané číslo ( 5 body )

  • přijaté číslo se zobrazí na další řádek displeje ( 5 nebo 8 bodů podle vybrané alternativy)

    • přijaté číslo se zobrazuje po ukončení editaci čísla ( 5 body )

    • přijaté číslo se zobrazuje paralelně i v průběhu editaci čísla ( 8 bodů )

  • číslo se bude přenášet v binární podobě, zakódované do prvních 4 datových bytů Canové zprávy notací little endian (na CANu kódování little endian, architektura m68k používá big endian)

  • použijte zprávy se standardním identifikátorem 0x15A

Maximálně může být úloha ohodnocena 21 body. Při hodnocení bude brán zřetel i na kvalitu implementace.

2. Nápověda

  1. 9 z 10 studentů doporučuje navštívit přednášky a přečíst si v manuálu m68k sekci (13) o CAN modulu . Popis registrů najdete zde. Definice maker jsou obsaženy v souboru can_hw.h .

  2. CANmonitor

    Je to nástroj pro sledování zpráv na sběrnici CAN. Spouští se příkazem canmonitor. Doporučuje se používat canmonitor pouze pro příjem zpráv.

    V laboratoři je nainstalována v jednom počítači (nazveme ho CANMON) PCI CAN karta a na počítači běží canblaster démon. Ostatní počítače se mohou ke sběrnici připojovat přes TCP/IP. V CANmonitoru je proto třeba nastavit IP adresu stroje CANMON:

    • v menu Tools->Config

    • vybrat složku CANmond

    • nastavit host na 147.32.87.??? (přesná adresa bude sdělena na cvičení)

    • Save&Exit

    Dále File->Connect označit Show Rough Messages.

  3. Testování CAN komunikace

    Otestovat stav CAN řadiče na desce můžete mimo vaší aplikaci (vhodné např. pokud posílání/odesílání zpráv z aplikaci nejde) následovně:

    • Spusťte seyon

      K sériovému portu je možné se na straně PC připojit příkazem

      seyon -modems /dev/ttyS0

      Pak je potřeba nastavit přenosovou rychlost 19200 baud (přes tlačítko Set-Baud v Seyone)

      V případě, že seyon vypíše hlášku, že nemůže získat zámek, spusťte příkaz

      clear_ttylock

      Abyste viděli zadávané znaky z klávesnice v seyone, napište v seyonu (nebude to vidět)

      ECHO:1
    • Zadejte (v seyone) příkaz pro poslání/příjem zpráv

      Na desce implicitně běží aplikace (pokud ovšem vaše aplikace není nahrána a běží!) , která vykonává CAN příkazy ze standardního vstupu (v tomhle případě je to sériový port) zadané uživatelem ve správném formátu

      /*
         CAN command examples
         
         can id1 0x123 data1 0x10 0x21 0x32 0x43 send1
         can id4 0x000 data4 0x11 0x22 0x33 0x44 send4
         can id4 0x75b2 data4 0x34 0x43 send4
      
         can id3 0x411 data3 0xaa 0xbb 0xcc reply3
         can id2 0x411r send2
         can id1 0x123 data1 0x11 0x22 0x33 0x44 send1
         can ide1 0x12345678 empty1
         can ide0 0x12345678 data0 0x11 0x22 0x33 0x44 send0
         can p   
      
         can empty14 id14 0 mask14 0
         can empty15 ide15 0 mask15 0
      
      */
      

      V canmonitoru lze nastavit ID a MASK položky pro příjem zpráv. Dle defaultního nastavení se přijímají všechny zprávy.

  4. K dispozici je dán kód (jako inspirace - vyhledejte v něm a vykopírujte z něho úseky) pro testování funkcí modulu TouCAN (inicializace, odesílání, příjem zpráv, vypsání stavu kontroléru) v souboru tst_can.c z aplikace simple. Doporučuje se využít funkci can_hw_init(1000000,0),která inicializuje kontrolér a nastaví komunikační rychlost.

  5. Podmínka pro příjem zprávy do bufferu

    Zpráva je přijmuta do message bufferu za podmínky:

    (ID.buffer XOR ID.received) AND MASK = 0

  6. Notifikace přijetí zprávy

    k dispozici jsou dva způsoby:

    • testovaní bitu v IFLAG registry korespondující danému message bufferu

    • vyvolání přerušení

Všechny připomínky k předmětu, obsahu stránek, objevené chyby v ukázkových programech apod. adresujte na autory: