FULL-C: I2C functions: Porovnání verzí

(Založena nová stránka s textem „ Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. Některá zařízení používají SDS-C,…“)
 
Řádek 12: Řádek 12:
 
Program může použít tyto funkce:
 
Program může použít tyto funkce:
 
<pre>
 
<pre>
        void SDS_I2C_write(unsigned int address, char *ptr, unsigned int len);
+
          int SDS_I2C_rw(unsigned int address, char *WrPtr, unsigned int WrLen, char *RdPtr, unsigned int RdLen);
unsigned int SDS_I2C_read(unsigned int address, char register, char *ptr, unsigned int len);
 
 
</pre>
 
</pre>
  
Řádek 22: Řádek 21:
  
 
Výrobce SDS nabízí vlastní sandwich desky, které komunikují přes I2C. Nic však nebrání tomu, aby jste si mohli připojit své desky či vlastní I2C periférii (za předpokladu dodržení návrhových a provozních omezení) - kontaktujte výrobce pro detaily.
 
Výrobce SDS nabízí vlastní sandwich desky, které komunikují přes I2C. Nic však nebrání tomu, aby jste si mohli připojit své desky či vlastní I2C periférii (za předpokladu dodržení návrhových a provozních omezení) - kontaktujte výrobce pro detaily.
 +
 +
 +
== Zápis do periférie na I2C sběrnici ==
 +
 +
Pomocí funkce SDS_I2C_rw(). Zadejte I2C adresu do "adr" (0bAAAAAAAx, kde A jsou adresní bity, a x je v zadání nepoužit - interně bude nastaven na READ BIT respektive WRITE BIT).
 +
 +
Data pro zápis vložte do pole na které předáte ukazatel do "WrPtr", a do "WrLen" dejte délku dat (minimum 0, maximum 255).
 +
 +
Data pro čtení budou zapsána do pole, na které předáte ukazatel do "RdPtr", a do "RdLen" dejte délku dat (minimum 0, maximum 255).
 +
 +
Pokud chcete:
 +
* jen zapsat a nic nečíst: WrLen = délka dat k zápisu, RdLen = nula
 +
* nic nezapisovat a jen číst: WrLen = nula, RdLen = délka dat ke čtení
 +
* zapsat a pak číst : WrLen = délka dat k zápisu, RdLen = délka dat ke čtení
 +
 +
Funkce v případě zápisu nerozlišuje co jednotlivé bajty "znamenají" - protože z hlediska I2C sběrnice je to nepodstatné - v dokumentaci k perifériím je ale často provedeno rozdělení na "registr" a "data". Zde to jednoduše dejte vše dohromady, do pole pro zápis, pěkně hned za sebe.
 +
 +
Funkce se vrátí FULL-C programu po úplném provedení. V případě úspěchu vrací funkce počet zapsaných (když je jen zápis) resp. přečtených bajtů (když je jakékoliv čtení), v případě neúspěchu chybu (-1).
 +
 +
Podpora PMBUS/SMBUS kdy periférie sama určí délku zápisu je implementována - předpokladem je ale že musíte vždy dodat dostatečné (ideálně maximálně) velký buffer pro čtení (RdPtr/RdLen).
  
  

Verze z 29. 11. 2021, 12:13

Tato stránka popisuje programovací jazyk FULL-C, který je dostupný na vybraných zařízeních SDS. 
Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.

Funkce pro komunikaci s rozšiřující (sandwich) deskou, pomocí sběrnice I2C

Zařízení SDS-BIG lze osadit doplňující/rozšiřující (sandwich) deskou. Většina těchto desek komunikuje přes COM3 respektive TOPB protokol; nicméně některé naopak využívají I2C sběrnici.

Desky které komunikují přes TOPB protokol totiž obsahují svůj vlastní mikroprocesor, který se stará o nějakou složitou funkci (např. obsluhu displaye, nebo nějaké komunikační sběrnice). Nicméně desky, u kterých není tato dodatečná inteligence potřebná, se do SDS-BIG připojují přes interní I2C sběrnici (konektor SC-2).

Pro zajištění naprosté univerzálnosti, je umožněno FULL-C programu bez omezení komunikovat po této I2C sběrnici. Tato sběrnice je sdílena s dalšími prvky uvnitř SDS, což nevadí, protože firmware v SDS-BIG to hlídá a správné časuje svou komunikaci versus komunikaci od FULL-C programu.

Program může použít tyto funkce:

          int SDS_I2C_rw(unsigned int address, char *WrPtr, unsigned int WrLen, char *RdPtr, unsigned int RdLen);


Základní popis

K dispozi jsou dvě funkce, jedna čistě pro zápis datových bajtů po I2C sběrnici, druhá pro čtení (se zápisem jednoho bajtu hned na začátku). Tyto funkce by měli pokrýt většinu běžných I2C periférií.

Výrobce SDS nabízí vlastní sandwich desky, které komunikují přes I2C. Nic však nebrání tomu, aby jste si mohli připojit své desky či vlastní I2C periférii (za předpokladu dodržení návrhových a provozních omezení) - kontaktujte výrobce pro detaily.


Zápis do periférie na I2C sběrnici

Pomocí funkce SDS_I2C_rw(). Zadejte I2C adresu do "adr" (0bAAAAAAAx, kde A jsou adresní bity, a x je v zadání nepoužit - interně bude nastaven na READ BIT respektive WRITE BIT).

Data pro zápis vložte do pole na které předáte ukazatel do "WrPtr", a do "WrLen" dejte délku dat (minimum 0, maximum 255).

Data pro čtení budou zapsána do pole, na které předáte ukazatel do "RdPtr", a do "RdLen" dejte délku dat (minimum 0, maximum 255).

Pokud chcete:

  • jen zapsat a nic nečíst: WrLen = délka dat k zápisu, RdLen = nula
  • nic nezapisovat a jen číst: WrLen = nula, RdLen = délka dat ke čtení
  • zapsat a pak číst : WrLen = délka dat k zápisu, RdLen = délka dat ke čtení

Funkce v případě zápisu nerozlišuje co jednotlivé bajty "znamenají" - protože z hlediska I2C sběrnice je to nepodstatné - v dokumentaci k perifériím je ale často provedeno rozdělení na "registr" a "data". Zde to jednoduše dejte vše dohromady, do pole pro zápis, pěkně hned za sebe.

Funkce se vrátí FULL-C programu po úplném provedení. V případě úspěchu vrací funkce počet zapsaných (když je jen zápis) resp. přečtených bajtů (když je jakékoliv čtení), v případě neúspěchu chybu (-1).

Podpora PMBUS/SMBUS kdy periférie sama určí délku zápisu je implementována - předpokladem je ale že musíte vždy dodat dostatečné (ideálně maximálně) velký buffer pro čtení (RdPtr/RdLen).


Deska SW-RELE6

První oficiální I2C rozšiřující deska pro SDS-BIG je deska SW-RELE6. Z hlediska I2C sběrnice je realizována pomocí dvou 8-bit expandérů (TCA9554A). Pomocí uvedených dvou FULL-C funkcí lze s touto deskou plně komunikovat a plně obsloužit všechny vstupní i výstupní periférii, které tam jsou osazeny.


UPOZORNĚNÍ

POZOR: podpora pro I2C komunikaci ve FULL-C je k dispozici až s verzí FULL-C 0x0C !