본문 바로가기
임베디드 개발/펌웨어

USB Serial 장치의 COM Port 고정하는 방법

by eteo 2024. 12. 21.

 

 

 

 

먼저 USB 장치는 모두 고유 식별자를 가지고 있으며 USB 시리얼 장치의 경우 해당 식별자를 바탕으로 운영체제가 COM port를 할당하게 된다.

 

 

USB 장치의 고유 식별자

 

  • VID (Vender ID) : USB-IF(USB Implementers Forum)에서 제조사에게 고유하게 부여하는 제조사 식별자
  • PID (Product ID) : 각 제조사가 제품 라이업에 따라 자체적으로 관리하는 제품 식별자
  • Serial Number : 동일한 모델의 제품이라도 각각의 장치를 구분하기 위한 고유 문자열

 

 

 

USB 장치의 고유 식별자 확인 방법

장치 관리자 > 포트 > 장치 선택 후 우클릭 > 속성 > 자세히 > 속성 : 장치 인스턴스 경로 선택 > 값 확인

 

 

값이 위와 같은 경우 VID, PID, Serial Number는 다음과 같다.

  • VID : 0x10c4
  • PID : 0xea60
  • Serial Number : "TTLSERIAL0001"

 

 

 

 

운영 체제의 장치 인식 및 포트 할당 과정

윈도우에서는 USB 장치가 연결될 때 이 고유 식별자를 확인하고 이전에 이 장치에 할당했던 COM 포트 번호를 기억하여 동일한 번호를 우선적으로 다시 할당한다.

 

  1. 장치 연결 : 운영 체제는 컴퓨터에 연결된 USB 시리얼 장치를 인식하고 고유 식별자를 조회한다.
  2. 레지스트리 확인 : 해당 식별자가 레지스트리에 저장되어 있는지 확인한다.
  3. 자동 포트 번호 할당 :
    • 레지스트리에 존재하는 경우 : 이전에 할당했던 COM 포트 번호를 다시 할당한다.
    • 존재하지 않는 경우 : 새로운 COM 포트 번호를 순차적으로 할당하고, 할당한 정보를 레지스트리에 저장한다.
  4. 사용자 지정 설정 : 사용자가 장치 관리자 > 장치 속성 > 포트 설정 > 고급에서 COM 포트 번호를 수동 설정할 수 있는 방법을 제공한다.

 

 

 

보통은 여기서 4번의 방법만 사용해도 고정 COM 포트 번호를 사용할 수 있다. 문제가 되는 상황은 여러 개의 USB 시리얼 장치를 동시에 사용하는 상황이다. 이 때는 각 장치가 고유한 식별자를 가지고 있어야만 운영체제가 장치를 구분하고 동일한 COM 포트 번호를 지속적으로 할당할 수 있다.

 

 

문제 상황

 

하지만 동일 모델의 USB 시리얼 장치라면 당연히 동일한 VID, PID를 사용할 것이고 그렇지 않더라고 일부 저가형 장치들이 공용 드라이버를 활용하기 위해 특정 제조사의 VID, PID를 그대로 사용해 겹치는 경우가 있다.

 

그리고 시리얼 넘버의 경우 공장 출고시 아예 값을 설정하지 않거나 "0000", "0001"과 같이 기본값으로 설정하는 경우가 많아 시리얼 넘버로도 각 장치를 고유하게 구분하지 못하는 경우가 많다.

 

따라서 레지스트리에 식별자 정보와 이전에 할당된 COM 포트 번호 정보가 저장되어 있다고 하더라도 재부팅이 되거나 장치를 컴퓨터에 연결하는 순서에 따라 다른 COM 포트가 할당되기도 하는 것이다.

 

 

해결 방법

 

이 때 USB 시리얼 칩셋 제조사에서 제공하는 도구를 이용해 시리얼 넘버를 고유한 값으로 설정하면, 운영 체제가 해당 장치를 구분하여 연결할 때마다 동일한 COM 포트를 할당하게 할 수 있다.

 

 

 

 

 

CP2102 칩을 사용하는 USB to TTL 장치에 고정 COM 포트 번호를 할당해보기

 

 

 

나는 CP2102 칩을 사용하는 USB to ttl 컨버터를 가지고 있어서 해당 칩 제조사인 Silicon Labs에서 제공하는 툴을 쓰려고한다.

 

만약 FTDI 사의 FT232x 시리즈 칩을 사용하는 장치라면 FT Prog라는 툴로 동일한 작업을 할 수 있다.

 

참고로 FTDI는 제조사 이름이지만 일찍이 USB-to-Serial 칩으로 FTDI사의 칩이 널리 사용되면서 FTDI칩이라고 하면 USB-to-Serial 칩을 통칭하는 용어처럼 쓰이기도 한다.

 

 

 

Silicon Labs에서 Simplicity Studio를 다운받고 그 안에 있는 Xpress Configurator라는 툴을 사용할거다.

 

 

 

Xpress Configurator를 실행하면 디폴트 Serial String이 "0001"이었는데 이 값을 장치를 고유하게 식별하기 위해 "TTLSERIAL0001"이라는 값으로 바꾸었다.

 

값을 바꾼 뒤 Program To Device를 선택하고 다시 Import From Device를 하면 바꾼 값이 잘 적용됐는지 확인할 수 있다.

 

 

 

다음 장치 관리자 > 장치 속성 > 포트 설정 > 고급에 가서 COM 포트 번호를 수동으로 바꾸는데 보통 운영체제에서는 순차적으로 앞 번호 부터 할당하므로 다른 장치가 먼저 해당 COM 포트 번호를 할당받는 일이 없도록 뒷번호인 COM 256을 선택한다.

 

 

이제 레지스트리에 저장된 정보를 확인해보자.

 

Win + R > regedit 열기

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB 경로로 이동하면 VID_xxxx&PID_xxxx 형식의 키들이 보이는데 이중에서 해당 장치를 찾아 그 하위에 있는 시리얼 넘버 키를 선택하면 Device Parameters 키에 PortName으로 COM256 값을 가지고 있는 것을 확인할 수 있다.

 

 

 

 

이제는 윈도우 재부팅을 하거나 여러 USB 시리얼 장치를 순서를 뒤바꿔가며 PC에 연결하더라도 해당 장치는 항상 동일한 COM 포트 번호를 사용할 수 있을 것이다.

'임베디드 개발 > 펌웨어' 카테고리의 다른 글

AMBA (AHB, APB, AXI)  (0) 2024.12.11
Line Coding (선로 부호화)  (0) 2024.10.30
SerDes  (0) 2024.10.20
PCIe  (0) 2024.10.08
ADC SNR  (0) 2024.09.08