RS485 na Linuxu
Moderátor: Moderátoři
- JirkaRCK
- Příspěvky: 248
- Registrován: 25 dub 2010, 00:00
- Bydliště: Olomouc/Brno
- Kontaktovat uživatele:
RS485 na Linuxu
rád bych se zeptal, zdali jste někdy na Linuxu používali TTL UART nebo RS232 přes převodník na RS485 a jak jste případně u převodníku řešili ovládání binárního výstupu pro flow-control. Zkoušel jsem čekat, až funkce ioctl(TIOCOUTQ) vrátí 0 prvků v bufferu sériové linky, ale zřejmě tu jde o softwarový buffer jádra, nikoliv o TX buffer portu, jelikož se takto několik posledních znaků neodešle i poté, co je už prázdný. Další možnost je pevně daná anebo z baud ratu a počtu znaků spočítaná delay. To mi však přijde jako velice neefektivní cesta...
Existuje tedy nějaká možnost, jak v Linuxu efektivně zjistit, zdali je dokončen transmitt a linka se může přepnout pro příjem? Neexistuje případně i nějaký automatický režim 232ky, kdy k tomuto účelu slouží některý z handshake pinů portu?
Kód: Vybrat vše
int status;
char buf[20];
// flow ctrl
write(fd, buf, sizeof(buf));
while (1)
{
ioctl(fd, TIOCSERGETLSR, &status);
if (status & TIOCSER_TEMT)
break;
usleep(100);
}
// flow ctrl
- JirkaRCK
- Příspěvky: 248
- Registrován: 25 dub 2010, 00:00
- Bydliště: Olomouc/Brno
- Kontaktovat uživatele:
Ještě bych měl menší dotaz, tak trochu offtopic, doporučili byste někdo nějakou dobrou literaturu, případně seriál na webu, který se C pro Linux z hlediska přistupování k hardwaru, embedded aplikací atd hlouběji zabývá? Rád bych se o tom dozvěděl více.