[ BBB - yocto (11) ] uart
1) 개요
uart 어플리케이션을 작성할 것이다.
참고로 챕터 10에서 우리가 설정한 핀이 핀헤더의 P9 24, 26번 부분이다.
패킷 구조는 간단히 보면 저렇게 되어있다.
여기에 추가로 uart 트랜시버를 사용해서 rs232 혹은 rs422, 485 등으로 변환해서 보낼 수 있는데
그에 따라 조금씩 제어 방식이 달라진다.
스탑비트, 시작 비트는 1바이트를 주로 쓰는데, 스탑비트는 2바이트로 확장해서 쓸 수 있다.
2) termios 구조체
termios.h를 인클루드하면 termios라는 구조체를 사용할 수 있다.
각 맴버 변수들에 대해서 설명하겠다.
우선 플래그에서는 uart에 대해서 패리티, 스탑 비트, 그리고 데이터 비트 수, baud레이트, 흐름제어(CRTSCTS[232, 422 전용]) 등 설정할 수 있다.
1. tcflag_t c_iflag;
- input 플래그를 설정한다.
- 이 외에도 여러 플래그들이 있지만 IGNPAR 혹은 PARMRK, INPCK 만 알아둬도 충분할 것 같다.
- 자새한 내용은 /usr/include/x86_64-linux-gnu/bits/termios-c_iflag.h를 참조하길 바란다.
2. tcflag_t c_oflag;
- output 플래그를 설정한다.
- 거의 설정할 일이 없다...
- 자새한 내용은 /usr/include/x86_64-linux-gnu/bits/termios-c_oflag.h를 참조하길 바란다.
3. tcflag_t c_cflag;
- 컨트롤 플래그이다. 시리얼 포트를 설정하는 플래그라 생각하면 된다.
- 위 내용 중에서 HUPCL과 CSIZE 빼고는 알아두어야 한다.
- CRTSCTS 를 설정하면 232, 485의 crt, sct를 사용는 flow 컨트롤을 활성화한다.
- 자새한 내용은 /usr/include/x86_64-linux-gnu/bits/termios-c_cflag.h를 참조하길 바란다.
4. tcflag_t c_lflag;
-로컬 플래그이다.
-거의 사용하지 않으므로 안 다루겠다.
5. cc_t c_line;
- 라인 규칙
- 이것도 거의 안쓴다.
6. cc_t c_cc[NCCS];
- VTIME, VMIN만 알아가자
- VTIME : timeout 대기 시간을 설정한다. 0으로 설정 시 non blocking(timeout 대기 x), 1당 100ms 이다.
- c_cc[VTIME] = 10; 이렇게 짜면, 1초 대기하라는 소리다.
- VMIN : 최소 입력 데이터를 설정한다. 0으로 설정 시 non blocking(최소 데이터 입력 대기x)
7. speed_t c_ispeed;
- 입력 스피드를 설정한다.
- 바우드 레이트를 설정해 줄 수 있다. c_cflags에 설정했다면 사용할 필요없다.
8. speed_t c_ospeed;
- 출력 스피드를 설정한다.
- 바우드 레이트를 설정해 줄 수 있다.c_cflags에 설정했다면 사용할 필요없다.
3) 사용 함수
1. int tcsetattr (int __fd, int __optional_actions, const struct termios *__termios_p)
- 설명 : tty 시리얼 포트의 속성을 설정한다. 속성 설정은 위에서 설명한 termios 구조체를 사용한다.
- 인자 fd : tty 시리얼 포트의 파일 디스크립터
- optional_action 가능 값
- __termios_p : termios 속성을 설정한 구조체
2. int tcflush(int __fd, int __queue_selector)
설명 : 파일 디스크립터가 갖고 있는 입출력 버퍼 중 선택하여 비우는 함수
4) 실제 코드 작성
uart 읽고 쓰는 방법
1. uart "/dev/ttyS1" [uart 1번] 경로를 읽기 쓰기 권한을 주어 open 함수로 연다.
2. ttyflush 함수로 입력 출력 버퍼를 비워주자.
3. ttysetattr 함수로 ttyS1의 속성을 설정한다.
4. read write 함수로 읽고(uart rx) 쓰기(uart_tx) 한다.
https://github.com/leejugy/uart
코드 볼거면 git clone 해서 vscode에서 보는거 추천한다.
5) 동작
표대로 쇼트시켜 주시고
빌드 결과로 나온 main을 cp main ~/share로 옮긴 다음
테라텀으로 간다.
rz 명령어를 비글본에서 쳐서 (alt, f, t, z, s) 누른 다음
어플을 터미널로 다운로드 한다.
그 다음 chmod +x main 으로 실행 권한 주고, ./main으로 실행하면
키보드 아무거나 입력하면 echo 되어 돌아온다.
댓글
댓글 쓰기