Biblioteka PiGPIO http://abyz.me.uk/rpi/pigpio/index.html wspomina, że jedną z jego funkcji jest „szeregowe łącza programowe przy użyciu dowolnego gpio użytkownika”.
Rozumiem przez to, że można go użyć do wygenerowania oprogramowania UART na dowolnych 2 wolnych pinach GPIO.
Na stronie przykładów projektów nie ma przykładów tej funkcji i nie znalazłem żadnej w Google.
Czy ktoś to zrobił? Jeśli tak, proszę wskazać mi przykład.
Jeśli nie, czy istnieją jakieś alternatywne biblioteki do bit-bangingu UART?
Dzięki,
Odpowiedzi:
Oto niektóre Pythona, których użyłem do przetestowania niezawodności oprogramowania szeregowego. Strona wejściowa jest dość trywialna. Po prostu wykonujesz odpowiednie otwarte wywołania szeregowe bit bang w Pythonie lub C. Strona wyjściowa jest bardziej zaangażowana, ponieważ musisz użyć przebiegów do zbudowania strumienia bitów.
Kod tutaj używa danych 7-bitowych zamiast 8-bitowych. Test został napisany mniej więcej w tym samym czasie, gdy dodawałem obsługę różnych bitów na bajt.
Kod zapisuje bloki danych binarnych w gpio podłączonym do laptopa (za pomocą klucza szeregowego). Laptop echo przychodzących danych szeregowych do wyjściowej linii szeregowej. Pi odczytuje dane szeregowe na innym gpio.
Kod sprawdza rozbieżności między wysłanymi a odebranymi danymi. Zakłada się, że laptop jest wolny od błędów, więc zakłada się, że wszelkie błędy są w bitach.
Przeglądanie dzienników o wartości mniejszej niż 19,2 kb / s było solidne. Wszystko do 115,2 kb / s było rozsądne (ale wymagałoby sumy kontrolnej), a 230,4 kb / s dawało wskaźnik błędów na poziomie 13%.
Kłody
źródło
Gdy podłączysz Tx bezpośrednio do Rx w celu przetestowania bez czegokolwiek, co dodałoby błąd, jak klucze sprzętowe, powie ci, jak dobrze biblioteka naprawdę działa.
Użyj GPIO 23 jako Tx i GPIO 24 jako Rx lub innego darmowego GPIO na Raspberry Pi 3b +. Wygląda to dobrze w tej samej kolejności co na pokładzie UART i jest praktycznie obok, tylko 3 piny po prawej stronie, z pinem GND po prawej stronie Rx.
Wyniki:
Jeśli możesz żyć z 19200 lub mniej, bez konieczności używania sum kontrolnych ani konwerterów SPI / I2C na UART - powinno być dobrze.
źródło