Udělej si sám

а nezapomeň ukázat ostatním

  • Zvětšit velikost písma
  • Výchozí velikost písma
  • Zmenšit velikost písma

Převodník USB-to-I2C (master)

Hodnocení uživatelů: / 17
NejhoršíNejlepší 

Potřeboval jsem něco na přenastavení několika integračů s I2C rozhraním. A náhodou jsem se dozvěděl, že jeden můj kolega zrovna vyzkoušel docela zajímavý čip SC18IM700IPW a chtěl si postavět něco finálního. Tak jsem se k němu přidal.

USB-I2C 1

Jak je vidět, není to přímo USB-I2C, ale UART-I2C převodník, ale když k němu přidáme ještě převodník USB-UART, dostaneme přesně to, co potřebujeme. Na jednu stranu vypadá takové řešení docela kostrbatě, na druhou stranu nic lepšího nás nenapadlo. Třeba Diolan nabízí DLN-2 USB-I2C, ale platit $19 za jeden čip se mi nechtělo. Pak existuje CY8C24894 za $6,5, ale zkuste ji sehnat. SC18IM700 stoji kolem $2, sehnat ji problém není, a I2C-master plus 8 programovatelných vstupů/výstupů rozhodně stoji za to i po přidání nesmrtelné FT232RL od FTDI. A ještě sem přidal pár blbosti na indikaci.

USB-I2C 2

V podstatě, datasheetové zapojení. FT232 komunikuje s SC18IM700 prostřednictvím UARTu a napájí ji ze svého interního stabilizátoru +3,3V. Přes buffer 74HC541 jsou zapojení LEDky na GPIO. Na I2C – přes tranzistory, inverzně, čili blikají jenom při běhání zpráv.

USB-I2C 3

Desky dorazili, osazuji.

USB-I2C 4

Po osazení a vizuální kontrole připojíme k PC a zjistíme číselko vzniklého COM-portu. Pro komunikaci použiji RealTerm. V záložce "Port" nastavím parametry portu: BaudRate – 9600, parity – none, Data Bits – 8, Stop Bits – 1. Protože "Reset" SC18IM700 visí na RTSu FT232, v záložce "Pins" shodíme jej tlačítkem "Clear". Pokud všecko máme v pořádku, a v záložce "Display" zvolíme "ASCII", uvidíme odpověď čipu: "OK" (což je 0x4F 0x4B).

USB-I2C 5

Defoltně piny GPIO-portu jsou nastavené jako vstupy a my můžeme vyčíst jejich stav příkazem. Takže po shození Resetu čip se nám ozve "4F 4B" (OK), a po obdržení zprávy "I" "P" (což v hexu je 49h 50h), pošle stav GPIO portu: 00h. Jelikož ale vstupy jsou vysokoimpedanční, reaguji i na dotek prstu, tím pádem vyčteme z nich i náhodnou blbost, třeba C8:

USB-I2C 6

Piny portu GPIO se dá nastavit na vstup (počáteční stav), na push-pull vystup, na výstup s otevřeným kolektorem a kvazi obousměrný vystup. Pro poslední konfiguraci je třeba do registru 02h/03h nahrát 00h. Formát zpráv je "W" Reg_Data "P", takže pošleme je takto: 57h 02h 00h 50h, pak 57h 03h 00h 50h.

Anebo oba dva najednou: 57h 02h 00h 03h 00h 50h.

Pro nastavení vysoké úrovni, třeba, na lichých pinech portu musím do registru 04h zapsat číslo 01010101b, neboli 55h: 57h 04h 55h 50h

Anebo najednou s nastavením výstupu 57h 02h 00h 03h 00h 04h 55h 57h.

Změnit stav pinů se dá i pomoci zprávy "O" Data "P". Takže když budu chtít rozsvítit sudé LEDky, poslu tam 10101010b, neboli AAh: 4Fh AAh 50h. Samozřejmě, změní se stav jenom pinů, co byli předem nastavené na vystup.

USB-I2C 7

Samozřejmě, je to především I2C převodník, ovšem I2C komunikace je ještě jednodušší, nemá cenu to moc rozepisovat. Používají se dva formáty zprav: "S" "R" Adr. Počet "P" pro čtení ze slave-zařízeni, a "S" "W" Adr. Počet Data "P" pro zápis.

Zbytek, jako power-done mode, nastavení rychlosti atd., najdete v datasheetu a application note AN10397.

 

Přidat komentář


Bezpečnostní kód
Obnovit