시리얼 통신을 하다보면 오류가 나곤 하는데 어디서 오류가 나는지 확인하고 싶을 때가 있다.
그럴때 오실로스코프로 파형을 찍어서 1,0을 직접 확인할 필요가 있는데, 이때 주의해야 할 점이 있다.
(참고로 나는 RS485 통신을 사용했다. )
putty나 teraterm 등으로 문자를 보낸 부분을 오실로스코프로 찍어보면 파형이 나온다.
처음에 나는 '1'을 보내서 Hex(16진수)로 확인하면 0000 0001 이렇게 파형이 찍힐 줄 알았다.
하지만 내가 보낸 건 숫자 '1'이 아닌 문자 '1'이었고, 이를 아스키코드표에서 찾아보면 16진수로 0x31, 2진수로 0011 0001이다.
그리고 또 주의해야 하는 게 파형이 0011 0001로 순서대로 나오는 게 아니라는 것이다.
통신 인터페이스에 따라 MSB(큰 bit부터), LSB(작은 bit부터) 중 어떤 게 먼저 나오는지 확인하고, 파형을 살펴봐야 한다.
또한, 1byte 이상을 파형으로 확인할 땐, Start bit와 stop bit를 잘 확인해야 한다.
말로만 설명하면 무슨 말인지 이해가 안 될 테니 그림을 보겠다.
'1'을 보냈을 때 실제로 오실로스코프에 나온 파형을 노란색 선으로 그린 것이다.
8개의 data bit가 LSB순서로 찍힘을 알 수 있다.
또한, data bit가 나오기 전 start bit로 10이 나오고 data bit가 끝났을 때 stop bit로 1이 나옴을 확인할 수 있다.
다음은 '13'을 보냈을 때 나온 파형이다.
여러 문자를 보내면 저렇게 data bit가 한 번 끝날 때마다 다시 start bit(10)가 나온다는 걸 확인할 수 있다.
마찬가지로 모든 통신이 끝나면 stop bit로 1이 나온 걸 볼 수 있다.
참고로 내가 데이터를 보낼 때 설정한 환경은 다음과 같다.
혹시 통신이 잘 되지 않는다면 baud rate는 맞게 설정했는지, data bits, parity, stop bits, handshaking는 어떻게 설정했는지 다시 한번 확인해 보자.
번외)
문자형이 아닌 Hex를 보내고 싶을 때
윈도우: realterm
리눅스: cutecom
'Embedded system' 카테고리의 다른 글
Arduino USB Host Shield (0) | 2023.02.03 |
---|---|
How to use DWM3000EVB with NORDIC 52480 (0) | 2023.01.03 |
saleae logic analyzer (0) | 2022.12.19 |
CRC 순환 중복 검사 (0) | 2022.12.13 |
influxDB (0) | 2022.12.12 |