Konfigurace obvodů Intel 82527 & Bosch CC750/CC770

Tento článek měl být původně celý uveřejněn 10.10.2004. Bohužel jsem měl několik smolných dní, kdy mi nejprve před auto vběhlo pár divokých prasat a pak mi jestě odešel displej na notebooku. Takže davám na web to co mam zatím hotové. Pokračovat budu jakmile vyřídím všechny opravy a bude zase trochu času.

Obsah:

1. | Úvod | Rozdělení CAN contrellerů na kategorie.
2. | Popis rozdílů mezi obvody Intel 82527 a Bosch CC750/CC770 | V čem jsou tyto obvody shodné a v čem se liší.
3. | SPI interface | Popis komunikace prostřednictvím rozhraní SPI.
4. | Popis registrů | Popis adresního prostoru, registrů a řídících bitů.

Díl první: Úvod

CAN controllery (řadiče) je možno rozdělit do dvou základních skupin podle principu jejich funkce a to nezávisle na tom, zda se jedná o samostatné obvody, jádra pro hradlová pole, nebo periferie různých procesorů. První skupina obvodů obvykle obsahuje několik bufferů, nebo jeden FIFO (SJA1000) buffer, kdy buffer(z) může(mohou) obsahovat několik zpráv se stejným identifikátorem. Druhá skupina obsahuje obvykle větší množství bufferů, z nichž každý je určen pro jednu konkrétní zprávu nebo skupinu zpráv v případě implementace lokálních masek. Samozřejmě hranice mezi těmito skupinami není nijak ostrá. U mnoha obvod se dá diskutovat o tom, do které skupiny by bylo možno je zařadit.

První skupina controllerů je vhodná zejména pro různé karty pro PC, kdy potřebujeme přijímat obvykle všechny zprávy bez ohledu na identifikátor. Druhá skupina je pak určena pro cílová zařízení jako jsou různé IO karty, řídící jednotky pohonů apod. Vlastnosti obvodů první kategorie se nám mohou na první pohled zdát vhodné i pro jednoduché aplikace s nejrůznějšími jednočipy, nicméně později zjistíme že na obsluhu tohoto obvodu z jednočipu spotřebujeme příliš režie, jako například:

- nutnost u přijaté zprávy dekódovat identifikátor v případě, že jednotka odesílá zprávy s několika ID

- v případě že jednotka odesílá zprávy s několika identifikátory, je nutno vždy identifikátor znovu nastavit

- nutnost kompletní obsluhy a zpracování při příjmu zprávy RTR procesorem

Obvody druhé kategorie s množstvím bufferů nám toto značně zjednodušují. K těmto obvodům patří Intel 82527 a Bosch CC750/770. Popis jejich vlastností, konfigurace a řízení bude obsahem tohoto článku.

Díl druhý: Popis rozdílů mezi obvody Intel 82527 a Bosch CC750/CC770

Obvody CC770 a AN82527 jsou pinově a softwarově shodné, liší se jen několika v AN82527 rezervovanými bity, které jsou v CC770 použity. Dále pak obvod CC770 má implementovány pro čtení čítače TEC (Transmit Error Counter) a REC (Receive Error Counter) a podporuje maskování bitů Xtd a Dir v Message 15 Mask registru.

Obvod CC750 se od AN82527 a CC770 liší takto:

- pouze jeden SPI mód

- nemá paralelní porty a s jejich řízením spojné bity v registrech

- nemá Clockout pin

- pouze po jednom výstupu Tx a Rx

Obvod CC750 se pak navíc liší od CC770 adresou registrů TEC a REC.

V dalším textu se primárně zaměříme na popis CC750 a budeme si uvádět rozdíly od CC770 a AN82527. Speciální vlastnosti (paralelní výstupy atd.) CC750 a AN82527 nebudu popisovat, neboť nemám s nimi praktickou zkušenost.

Díl třetí: SPI interface

Na připojení SPI rozhraní není nic zvláštního, CAN controller se chová jako slave. S masterem je propojen 4 vodiči MOSI, MISO,SPICLK a CS. CS nemusí být teoreticky použito a lze se synchronizovat pomocí registru Serial Reset Address. V dokumentaci k CC750 se píše, že CPU musí zapsat string 16 bajtů 0xFF pro navázání synchronizace. S touto funkcí bohužel nemám žádné zkušenosti.

Obvod CC750 má jen jeden mód SPI. Obvody CC770 a 82527 dovolují výběr módu SPI pomocí multifunkčních pinů AD0-AD3 takto:

AD0 (ICP) Idle Clock Polarity

| one | SCLK is idle high
| zero | SCLK is idle low

AD1 (CP) Clock Phase

| one | ICP=0 data samplována na sestupné hraně ICP=1 data samplována na nástupné hraně
| zero | ICP=0 data samplována na nástupné hraně ICP=1 data samplována na sestupné hraně

AD2 (CSAS) Chip Select Active State

| one | Aktivní stav CS je log. high
| zero | Aktivní stav CS je log. low

AD3 (STE) Synchronization Transmission Enable

Povolení generování synchronizačních bajtů AAh a 55h při přenosu adresy a řídícího slova.

Vlastní přenos na SPI může být tvořen blokem bajtů o maximální délce 17. První bajt je adresa odkud budeme číst nebo zapisovat. Druhý bajt je řídícím slovem. Zbylých až 15 bajtů jsou data zapisovaná od zadané adresy směrem nahoru. Řídící slovo (Serial Control Byte) má tuto strukturu:

7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
Dir | Sync | SDLC

Pro čtení z CAN controlleru má Dir hodnotu 0, pro zápis pak 1. Sync musí být vždy nastaveno na 000. SDLC (Serial Data Length Code) pak udává délku dat, jsou povoleny hodnoty 1-15. V okamžiku kdy CPU odesílá adresu, CAN controller vrací zpět hodnotu AAh, při odesílání řídícího slova pak controller odesílá 55h. Tyto hodnoty by měl CPU kontrolovat. V případě že nejsou tyto hodnoty obdrženy, je nutno provést restart SPI interface zápisem dat FFh na SPI. FFh je adresa registru Serial Reset Address.

Zde si dovolím malé odbočení. Pokud jste již někdo pracoval s CAN controllery od firmy Microchip (MCP2510/2515), jistě se vám bude zdát tento protokol na SPI trochu chudý. Controllery Microcipu mají interface na SPI daleko bohatější. Nedovolují jen prostý zápis a čtení, ale podporují celou skupinu mnohdy velice praktických příkazů:

Read | Čtení
Write | Zápis
Reset | Softwarový reset
RTS - Request To Send | Odeslání dat v zadaném bufferu
Read Status | Rychlé zjištění stavu o tom zda byla přijata nějaká zpráva, zda bylo dokončeno odeslání zprávy
BitModify | Modifikace bitů v registru pomocí masky (nepotřebujeme znát stav ostatních bitů)
Read RX buffer (pouze MCP2515) | Čtení zadaného RX bufferu (ušetříme přenos 1 bajtu na rozdíl od Read)
Load TX buffer (pouze MCP2515) | Zápis do zadaného TX bufferu (ušetříme přenos 1 bajtu na rozdíl od Write)
RX Status (pouze MCP2515) | Rychle zjištění podrobnějšího stavu RX bufferů

Maximální rychlost SPI rozhraní je 8Mhz. Minimální pak 0.5 MHz. Pro porovnání MCP2510 dovoluje maximální rychlost 5MHz, MCP2515 pak 10MHz.

Díl čtvrtý: Popis registrů

Adresní prostor obvodů má velikost 256 bajtů. Následující obrázek uvádí strukturu pro obvod CC750. Odlišnosti u AN82527 a CC770 budou popsány vždy u konkrétní adresy.

Poznámka: Obrázek je klikací mapou, kliknutím na vybraný registr/adresu se přesunete na popis příslušné položky.

CONTROL (00H)

Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
Název | res | CCE | res | Silent | EIE | SIE | IE | Init
Atributy | rw | rw | r | rw | rw | rw | rw | rw

Aributy: r-jen pro čtení / w-jen pro zápis / rw-jen pro čtení

Bity označené jako res (reserved) jsou čteny jako 0 a musí být zapisovány jako 0. Po hardwarovém resetu je registr nataven na hodnotu 01H.

CCE | Change Configuration Enable
1 | Nastavíme li tento bit na 1, můžeme zapisovat do Bit Timing registrů. Bit Init by měl být taktéž nastaven na 1.
0 | Zápis do Bit Timing registrů není možný.

Silent | Silent Mode
1 | Silent mód je aktivní. V tomto režimu může obvod přijímat platné datové a rtr zprávy. Nemůže však zprávy odesílat, odesílá pouze recesivní bity.
0 | Normální mód.

STATUS (01H)

Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
Název | BOff | Warn | WakeUp | RxOK | TxOK | LEC
Atributy | r | r | r | rw | rw | rw

CPU INTERFACE (02H)

Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
Název | OscSt | res | DMC | PwD | Sleep | res | res | res
Atributy | r | r | rw | rw | rw | r | r | r

RESERVED (03H)

U obvodů CC750/CC770/AN82527 nemá žádnou funkci.

RESERVED (04H,05H)

HIGH SPEED READ - CC770/AN82527

U CC750 nemá žádnou funkci.

David