최근 수업 과정에서 오드로이드와 라즈베리 파이의 GPIO로 소프트웨어 PWM, RS-232를 구현하고 있다. 물론, 하드웨어의 PWM을 이용하는 것보다는 깨끗한 파형을 내기 힘들다. 그러나 오실레이터나 크리스탈, 혹은 CPU Clock을 SW로 나누고 그것을 이용해 모터를 제어 하거나 관련 프로토콜을 SW로 구현하는 것은 꽤 괜찮은 수업 방식이라고 생각되어 진행하게 되었다.


결론은 잘 된다는 것. <- 이게 젤 중요하지


그러나 구현 과정에서 학생들이 보드를 많이 태웠는데 그 이유는 다음과 같았다.


1. 전원 연결이 중간에 끊겨 GPIO의 전류가 역방향으로 흐르게 하였다. 전원 껐다 켰다 하며...

2. 장치 연결 시 풀다운 저항이나 캐패시터를 이용하지 않았다.

3. 데스크톱과 직접 연결 시 전압 체크를 하지 않았다.

4. 주변 장치 연결 시 전원이 켜진 상태로 연결하였다.(GPIO, 화면 출력을 위한 HDMI 포트 等)


그리하여 작년 수업 과정과 합해서 총, 15대의 보드가 고장 났다. 물론, 1달 내내 수많은 과제를 하는데, 관련 과제가 많아 보드를 혹사시키는 것도 문제다. 실습 장비가 없으면 안되기에 미리, 어느 정도 귀띔은 해준다. 따라서 고의적으로 보드를 태우게 한 것은 아니다. 다만, 전자공학과 및 컴퓨터 공학 대학원까지 졸업하거나 전자공학과 4학년을 졸업한 친구들도 있기에 실무는 다르다는 것을 말해주고 싶은 마음이 있는 것은 사실이다. 간단히 말하면 보드를 태운 경험은 정말 소중하다는 것. 고의는 아니지만, 그에 따르는 수리나 추가 구입 비용에 대한 질타는 내 몫이다.


실무경험으로 한 가지 확실한 것은 GPIO를 이용한 프로젝트 진행 時 오드로이드에 반해 라즈베리 파이는 쇼트가 잘 나지 않는다는 것. 두 보드 모두 장/단점이 있고 이용 목적에 따라 다르다. 다만, 앞으로는 교육 비용 문제로 격이 더 저렴한 라즈베리파이를 이용하게 될 것 같다. 사실, 커뮤니티가 잘 안 되어 있는 보드를 찾아서 작년 1달 교육을 진행했는데,... 이제는 위키가 너무 잘 되어 있는 것도 하나의 이유.


소스는 github에 GPL 3.0으로 공개하고 모두 함께 작업하기로 하였다.


소스를 바로 보는 것은 실력 향상에 도움이 되지 않으니, 다음과 같은 과정을 거쳐 공부하길 바란다.


1. 오실로스코프로 UART 단자의 신호를 분석한다.

2. 하드웨어/소프트웨어 플로우 컨트롤 및 패리티 비트를 빼고 10비트가 나오는지 확인한다.

3. 시작 비트는 0 이 되는 순간이다.

4. 같은 신호를 GPIO와 delay 함수를 이용하여 구현한다.

5. usleep은 문제가 있어서 다른 함수(nanosleep)를 찾게 되고, 그것도 여의치 않아서 시간 계산을 따로 하는 함수를 찾게 된다.

6. 구현된 신호로 GPIO를 이용하여 UART Tx를 만든다.

7. 한 문자만 보내는 것을 여러 문자가 보내 지도록 함수를 만든다.

8. Rx도 같은 방법으로 구현한다. 다만, 같은 GPIO로 연결하면 둘 다 HIGH 상태이기 때문에 [처리]가 필요.

9. Tx, Rx 모두 구현하기 때문에 자신만의 신호를 만들 수 있다.

10. 완성형 한글 지원부터 유니코드 지원까지 customized UART protocol을 만들어 본다.

11. RS-232, 422, 485 까지 비교해 본다.


이런 과정을 거치면 같은 시리얼 통신인 CAN, I2C, SPI, I2S, CAN, USB 등을 한 번에 이해할 수 있게 된다. 일이관지(一以貫之, 하나의 이치로 모든 것을 꿰뚫는다). 인터넷을 돌아다니다 보면 UART, SPI, I2C 잘못 비교된 글이 많더라. UART 자체적으로 RS-232, 422, 423, 485 에 따라 속도나 전송거리, full/half duplex로 나뉘는데 그걸 마치 UART와 SPI, I2C의 차이로 적은 자료가 많았다. 주의! 주의!


'블로그 항해 일지 > Embedded' 카테고리의 다른 글

x86용 부트코드  (0) 2019.01.08
ODROID GPS 모듈 입양 完  (2) 2019.01.08
GPIO 제어 via 블루투스 on 삼성폰  (0) 2019.01.08
블루투스 연결  (0) 2019.01.08
GPIO 컨트롤  (0) 2019.01.08

+ Recent posts