마음 속 하늘은 항상 맑음~!

AVR Serial HID 구현. 본문

하드웨어

AVR Serial HID 구현.

파르셀수스 2014. 10. 21. 23:28

AVR의 소프트웨어 CDC는 운영체제에서 저속이기 때문에 장치의 연결을 끊는 것으로 확인. 그래서 cdc-io를 포기하려 했으나 YAT란 터미널 프로그램에 Serial HID라는 기능이 존재. 구현을 아무리 찾아봐도 없고 결국 삽질을 해가며 직접 구현.


 입으로 설명하기엔 너무 많이 모르기 때문에 곤란하고 완성된 소스를 첨부. 이 소스에는 V-USB에서 인터럽트 OUT이 가능한 수정이 담겨있다. 이 수정이 약간 틀려서 교정을 봤다.

 예제 4번만 수정되어 있고 출처는 http://lackawanna.hackhut.com/2011/10/06/using-v-usb-and-the-hid-class-part-iiiiii/


avr-all_examples-serhid.zip


 USB HID의 레포트를 만드는게 어렵다면 그냥 복사해서 사용하면 된다. 설정시 압축파일에 들어있는 usbconfig의 내용도 중요하다. YAT로 입력받은 문자를 16진수로 변환해서 다시 보여주는 예제. YAT를 실행에는 관리자 권한이 필요하다. 그냥 띄우면 HID가 장치가 목록에 안보인다.


 중요한 것은 cdc-io를 이 기능에 맞게 다시 변환하는 것. 그리고 2313A의 용량 증설판인 ATtiny4313을 사용해서 기능을 확장. 4096워드를 사용하니 정말 편하다. 백번 정도 굽고 지우고를 반복했는데 고장이 안났다. 그리고 한번은 전원을 거꾸로 연결했는데 열이 펄펄 =_=; 다시 제대로 연결하니 생생했다. PIC는 바로 고장나던데;


 그렇게 CDC-IO의 2313용의 펌웨어 소스에 많은 수정을 가해서 비트 단위나 몇몇 기능의 확장을 꾀했다.

 둘다 GPL이라 =ㅅ=;



cdcio.2009-07-15-serhid-portfix.zip

 (4313의 구현에서 포트 이름의 레지스터 부분이 잘못되어서 수정.)

 결과물은 이렇다.



 명령의 입력은 "<16진 데이터> <공백> <레지스터명 혹은 16진수> <공백> <명령>" 이런 식이다.

 ?는 값을 알아보고(비트 가능), =는 값을 대입하고(비트 가능), &는 AND연산, ^는 XOR 연산, |는 OR연산. 논리 연산은 비트를 구현하지 않았다. @만 입력하면 "cdc-io"문자열이 표시된다.


 또하나의 삽질 끝. 노하우 하나 획득.



'하드웨어' 카테고리의 다른 글

간단한 승압 회로.  (0) 2014.10.29
AVR Serial/HID의 간단한 설명.  (0) 2014.10.22
USB CDC는 막힌 듯?  (0) 2014.10.20
USBTiny 실험.  (0) 2014.10.17
avr-gcc 4.9.2  (0) 2014.10.14