블로그

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (10)

  1. MSC USB 만들기

MSC USB 펌웨어를 작성하는 것도 UART 펌웨어나 HID 펌웨어를 만들 때랑 같은 전략을 썻다. 인터넷에서 적당한 예제를 찾은 다음, 그대로 가져다 붙이고 필요한 부분만 수정하는 것이다. 진지하게 시간들여 공부할 필요도 없고 결과도 빨리 나오고 재미있다. 오픈 소스란 좋은 것이다. 물론 나도 그렇게 만든 결과물을 공개해야 한다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (9)

  1. 키맵 업데이트와 펌웨어 업데이트 구상

키맵을 런타임에 업데이트 할 수 있도록 코드를 작성했다. 문제는 어떻게 업데이트 하느냐를 결정하는 것이다. 여러가지 방법이 가능하다. 먼저 가장 단순한 방법으로 UART 터미널을 통해 XMODEM으로 전송하는 것이다. 전통적이고 오래된 방법이다. 그런만큼 구현이 쉽다. 또는 DFU(Device Firmware Upgrade)라고 부르는 표준도 있다. 그리고 내가 사용하기로 결정한 방법인 MSC(Mass Storage Class)를 이용하기도 한다. MSC는 쉽게 말해서 대용량 저장 장치를 펌웨어로 만든는 것이다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (8)

  1. HTML 키맵 에디터

키보드 핵심 기능을 하는 펌웨어는 모두 구현했다. 지금까지 펌웨어만으로도 키보드 사용에는 문제 없다. 앞으로는 부가 기능과 편의 기능 구현에 대한 이야기를 쓸 것이다. 없어도 되지만 있으면 좋은 그런 기능들이다. 첫 번째로 키맵 에디터다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (7)

  1. 키 입력 폴링과 호스트 전송 태스크

하드웨어 GPIO에서 전기 신호를 읽어서 몇 행, 몇 열에 있는 키보드 스위치가 눌렸는지 이제 펌웨어는 알 수 있다. 그러면 다음에 할 일은 이 행열 정보를 가지고 어떤 키가 눌렸는지 변한하는 것이다. 다시 말해 그저 (x, y)로 전달 받은 매트릭스 위치 정보를 호스트 운영체제가 활용하는 HID 키보드 스캔 코드로 변환하는 것이다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (6)

  1. 키맵 처리 만들기 (HW detection to HID scancode)

지금까지는 사실 키보드 기능 자체에 대한 기능 보다 펌웨어 자체를 동작하는데 집중했다. 키보드 관련한 것이라고는 HID USB 관련 코드를 추가한 것 뿐이다. 그러나 정작 HID 모듈로 보내는 데이터는 유닛 테스트 수준으로 만들어 넣고 있다. 이제 진짜로 키보드 스위치 입력을 펌웨어에서 인식해서 키 스캔 코드를 만드는 작업을 한다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (5)

5. UART 콘솔 태스크 만들기

나빌로스를 포팅하긴 했으나 아직 RTOS를 써먹고 있지는 않다. 기능별로 태스크를 분리하면서 확장하는 방식으로 펌웨어를 만들 생각이다. 펌웨어 동작을 확인하려고 처음 만든 것이 UART 출력 펌웨어다. RTOS 태스크로 처음 만들기 적당한 재료도 UART다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (4)

  1. HID USB 만들기

HID USB 키보드 펌웨어를 만들기로 했으니까 당연히 제일 먼저 HID USB 코드를 작성한다. 그래서 컴퓨터에 꼽아보고 HID 키보드로 인식되는 모습을 먼저 봐야 동기부여가 될 것이다. 프로그램을 만드는 작업은 일단 작업 내용을 바로바로 눈으로 볼 수 있어야 재미있게 할 수 있다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (3)

  1. 나빌로스에 예제 코드 포팅 (멀티 플랫폼을 반만 고려해서 cortex-m3 삽질한 이야기)

Cortex-m3에 나빌로스를 포팅할 줄은 몰랐던 이야기.

키보드 펌웨어에 RTOS가 필수는 아니다. 하지만 내가 만든 RTOS(나빌로스: https://github.com/navilera/Navilos)가 이미 있으니 한번 실전 경험을 해야 하지 않겠는가하는 생각이 들었다. 그래서 직전에 만든 베이스 코드를 나빌로스에 포팅하기로 결정했다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (2)

  1. UART 예제

처음 키보드를 만들려고 했을 땐 펌웨어까지 만들 생각은 없었다. 공개된 키보드 펌웨어 중엔 널리 쓰이고 검증된 펌웨어가 있었으니까. 대표적인 오픈 소스 키보드 펌웨어는 QMK(https://github.com/qmk/qmk_firmware)와 TMK(https://github.com/tmk/tmk_keyboard)가 있다. QMK도 TMK 기반에 부가 기능을 추가한 것이다. 많은 커스텀 키보드들이 QMK나 TMK를 쓴다. 나도 당연히 아무 고민 없이 QMK를 쓰려했다.

막상 쓰려고 마음 먹고 포팅 작업을 하려 했더니 몇 가지 마음에 들지 않는 부분이 보였다. 그래서 그냥 안 쓰고 내가 처음부터 새로 만들기로 결심했다.

나빌레라의 이미지

키보드를 만듭시다. 어때요~ 참 쉽죠? (1)

  1. 하드웨어편 (프롤로그)

이 글은 커스텀 기계식 키보드를 하드웨어부터 펌웨어까지 모두 만들어본 이야기다. 첫 번째 이야기. 하드웨어 편.

원래는 그냥 기계식 키보드 하나 새로 사려고 했다. 그런데 기계식 키보드는 종류가 매우 많기 때문에 인터넷 검색질을 하면 할 수록 더욱 고르기 어렵게되는 문제가 있다. 어떤 키보드가 대충 80% 정도 마음에 드는데 다른 키보드는 부족한 20%를 채우고 있지만 나머지는 다 마음에 들지 않는 그런 상황이다. 그래서 생각했다. 그냥 내 마음에 드는 걸로 만들어 보는건 어떨까.

페이지

RSS - 블로그 구독하기