개요
- 타겟보드 nRF52840 동글 에서 USB CDC (호스트에서 com 포트로 인식되는것) 구현 방법 정리.
- nRF5 SDK 에서 예제로 제공되는 /example/peripheral/usb_cdc_acm (프로젝트 설명문) 의 소스코드를 참조하여 자신의 프로젝트에서 USB CDC 구현하는 방법 세부적인 과정을 보이고 최종 정상 작동하는 프로젝트 소스 다운로드 가능.
- 예제 프로그램은 usb 구현위한 핵심정보를 제공함에는 부족함이 있다. 노르딕사의 예제들의 한심한 특징 : 단일 기능 위주를 먼저 제시하는 방식이 학습자에게는 도움이 되는데 이런 저런 기능을 덕지 덕지 붙여둔 예제들이 많다. 따라서 예제만 보면 해당 특정기능의 핵심 개념이해에 별 도움되지는 않는다. 예제에서 사용되고 있는 라이브러리 설명문을 반드시 보면서 핵심개념 이해해야한다. 본 usb 예제에서 사용되는 라이브러리는 USB device library 이며 설명문은 웹에서 바로 제공된다. -> 보기 클릭.
타겟보드 : nRF52840 Dongle
프로젝트 IDE 환경
SES(SEGGER Embedded Studio) 에서 프로젝트 템플릿 기반. 상세보기 -> https://igotit.tistory.com/2042
샘플프로젝트 참조하면서 본인 프로젝트에서 USB CDC 구현하는 전체 과정 상세
- 본 글에서 시작하는 프로젝트는 템플릿 프로젝트 ( 상세보기 -> https://igotit.tistory.com/2042 가장 간단한 GPIO 출력하는 기능이 전부인 텅빈 프로젝트임) 를 시작점으로 하여 만든 myProject 에서 Clock Control 구현된 상태에서 추가로 USB CDC 작업 진행한다.
소요시간 : 1시간.
- 최종 USB CDC 기능하는 심플한 프로젝트 파일 본 글 하단에서 다운로드 가능하니 아래 동영상 과정은 참조만 하기.
- 학습 목적이라면 이 동영상의 내용대로 따라서 해보는것 도움됨.
2020. 11. 18 추가 아래 영상에서 작업하는 개발환경은 매우 비효율적임. 신규로 프로젝트 작업 환경 구축한 https://igotit.tistory.com/2308 의 형식으로 프로젝트 환경 만는것이 훨씬 컴팩트하고 유용함.
위 동영상에서는 컴파일 오류없이 성공적으로 빌드 되는것까지만 보이고 있으며, 위 상태로는 아직 부족하다. 추가로 처리해줘야 할 사항이 있다.
USB CDC 정상작동 하는 코드 최종
아래 그림의 nRF5_SDK 에서 사용되는 것중 nRF_Drivers 의 nrfx_power_clock.c 필수 포함시켜야 한다. 아래 그림에서 파일중 아이콘 디스에이블(컴파일러에서 제외시킨 표시임) 된것 외에는 모두 포함시키면됨.
sdk_config.h 에서 필수 설정되어야 할 항목
아래 그림에서 붉은색 밑줄 쳐진것들을 enable 시켜야 한다. 그외 나머지 항목들은 활성화 하든 비활성화 하든 USB CDC 동작에는 아무런 영향 미치지 않는다.
위 설정에서 POWER_ENABLED 라는 설정은 MCU 의 전원부 인터럽트 처리 목적으로 활성화 시킨 것인데, USB 사용하면서 이 기능이 필요한 이유는 USB BUS 전원 검출 기능 때문이다. USB BUS 전원 검출기능 인에이블은 아래 그림의 붉은 색 박스 부분에서 설정한다.
USB CDC 동작 시험용 룹백 코드 추가
시험목적으로 nRF52840 에서 USB CDC Rx 로 데이터 수신된 경우 그 데이터를 모두 다시 USB CDC Tx 로 출력하는 시험용 구문을 추가하자. 아래 코드에서 파란색 부분.
static void cdc_acm_user_ev_handler () { ... case APP_USBD_CDC_ACM_USER_EVT_RX_DONE: /* Fetch data until internal buffer is empty */ memcpy(m_tx_buffer,m_rx_buffer,READ_SIZE); bsp_board_led_invert(LED_CDC_ACM_RX); } |
USB CDC 동작시험
상기 코드를 보드에 기록하고, PC 로 연결하여 하이퍼 터미널에서 키보드 문자를 보드로 전송하고 보드에서는 해당 키보드 문자를 다시 PC 로 보낸것을 하이퍼 터미널에서 확인.
프로젝트 소스 다운로드
여기 까지의 프로젝트 소스 첨부.
- 본인 프로젝트에서 USB CDC 구현하기 위하여 앞의 동영상에서의 1시간 짜리 동일 노동 할 필요없이 다운로드 받아서 활용 가능.
파일명 nRF52840_USBCDC_igotit.zip
USB CDC 드라이버 설치
- 앞에서 만들어진 펌웨어를 보드에 기록된 것을 PC에 연결하면 USB 인식과정 진행되면서 윈도우 10(8이상) 은 자동으로 드라이버가 설치되나 윈도우 7인 경우에는 수동으로 드라이버 설치해야 정상 인식된다.
윈도우 7 에서 드라이버 설치법 상세보기 -> https://igotit.tistory.com/2038
USB CDC 관련 코드의 main while 문에서의 주의사항
본 코드의 main 의 while 문 내에 지연함수가 있고, 지연시간이 500msec 정도로 길게 설정하면 USB 연결시 정상 인식되지 않는다. 지연시간이 10msec 정도에서는 정상인식함. 즉 지연이 USB 인식과정(아래 코드의 파랑 박스부분)을 방해하고 있음.
본 글 포함된 상위 정리글 https://igotit.tistory.com/244 의 nRF52 |
첫등록 : 2019년 1월 15일
최종수정 : 2020.11.18
본 글 단축주소 : https://igotit.tistory.com/2037
'임베디드.일렉트로닉스 > nRF52' 카테고리의 다른 글
nRF52 . SES . 빌드 오류 해결 .text .rodata is larger than specified size. (0) | 2023.01.19 |
---|---|
nRF52. MBR, bootloader , SoftDevice , Application , 플래시 메모리 배치 (0) | 2021.03.22 |
nRF52. BLE Central Multilink. Nordic UART Service(NUS) Client 구현. (3) | 2019.11.10 |
nRF52. SPI (0) | 2019.10.25 |
nRF5 SDK 기반 SES , KEIL 멀티 프로젝트 폴더 구축 및 프로젝트 템플릿3 (4) | 2019.10.24 |
댓글