Serial 통신은 병렬 형태의 데이터(보통 Byte 단위)를 직렬(Bit 단위)로 전환 하여 전송하고 수신 하기 때문에 병렬 통신에 비교 하여 속도는 느리다.
그러나 여러 개의 통신선(Bus)을 필요로 하는 병렬 통신에 비교 하여 최소 3개의 통신선(Tx, Rx, GND)만을 필요로 하기 때문에 서로 떨어져 있는 장치 사이에 용이하게 통신 선로를 구축 할 수 있다.
또한, 비동기 방식 통신은 서로 다른 Clock를 사용 하는 장치 사이에도 별도의 Clock 신호 없이(Clock를 사용 하지 않기 때문에 두 장치에서 미리 서로 약속한 속도(Baud Rate)로 송수신 하여야 한다.) 통신 할 수 있기 때문에 대부분의 Embedded Computer에서 기본 통신 장치로 제공(ATmega128에는 2개의 UART 통신 장치가 제공 됨) 된다.
- 두 장치(DCT와 DTE ) 사이에 UART(Universal Asynchronous Receiver/Transmitter) 통신을 하기 위한 구성도
- ATmega128의 USART(Universal Synchronous and Asynchronous Receiver/Transmitter) Block Diagram
- ATmega128 Asynchronous Communication(UART)
- Serial frame format
- Asynchronous Clock Recovery
- Error detection
- 외부 장치와 UART 통신 구현에 필요한 Interface IC 예(MAX232)
- Serial Communication에 사용하는 Connector 예
- ATmega128 USART
- ATmega128 USART에 시용되는 Register
- USART Data Registers
- Baud Rate Registers
- UCSRnA(USART Control and Status Register A)
- UCSRnB(USART Control and Status Register B)
- UCSRnC(USART Control and Register C)
- ATmega128 UART 프로그램 예
- UART 통신를 위한 설정과 문자 Input/Output 프로그램 예
- UART 통신을 이용한 Microcontroller 제어 예
- UART 통신과 문자열(String) I/O을 이해 하기 위한 예
- UART Rx Interrupt를 이용한 제어 문자 입력과 LED shift 제어 프로그램 예
- Serial I/O(UART) Communication 관련 페이지 보기
- 쌍방향 통신(Full Duplex)을 위하여 DTE 의 Tx 신호와 DCE의 Rx 신호를 연결 하고, DTE의 Rx 신호와 DCE의 Tx 신호, 양측의 GND 신호를 연결 한다.
- 비 동기(Asynchronous) 방식 통신인 경우 Clock 신호는 필요 없다.
- 아래에 있는 UART 통신 프로그램 예(cho_uart_basic_i_o.c)에서는 PC를 DTE(PC에 직렬 통신을 위한 Console 프로그램을 설치 하여 사용 함) 장치로 사용 하고, 실험용 Embedded Computer에 통신 프로그램을 설치 하여 DCE로 이용 하였다.
- DTE(Data Terminal Equipment)
- DCE(Data Communication Equipment)
USART Block은 Baud Rate 발생을 시키는 Block과, 병렬 Data를 직렬로 변환 하여 전송 하는 Transmitter Block, 직렬로 수신된 Data를 병렬로 변환 하여 수신 하는 Receiver Block으로 구성 되어 있고, 여기에 USART의 기능을 다양 하게(Programmable) 설정 할 수 있도록 하고, USART의 동작 상태(Status)를 표시 하는 기능 제어 및 상태 표시 Rg(Control and Status Register)가 포함 되어 있다. 이 페이지 에서는 비동기 통신(Asynchronous) 모드 만을 설명 하기 때문에 USART에서 동기 통신(Synchronous)을 뺀 UART 통신 모드에 데하여만 설명 한다.
- Baud Rate Generation Block
- Baud Rate Generation Block은 Baud Rate 설정 값을 저장 하고 있는 UBRR Rg(8 Bits Rg 2개(UBRRH, UBRRL)와 Baud rate 발생 회로로 구성 되어 있다.
- Baud Rate에 따른 UBRR Rg의 설정은 아래(UBRR register 값과 baud rates 예)를 참고 하기 바람.
- Baud Rate 설정 Coding 예
- Transmitter Block
- Transmitter Block은 CPU로 부터 전송 할 Data를 받는 UDR(Transmit) Rg와 직렬 전송을 위하여 병렬로 받은 Data를 직렬로 변환 하는 Transmit shift Rg, Error 검출을 위한 Parity Bit를 발생 시키기 위한 Parity Generator로 구성 되어 있다.
- Data 전송을 위한 Coding 예
- Receiver Block
- Receiver Block은 Rx Pin으로 부터 수신한 Data(Bit 단위로 수신)를 병렬로 변환 하는 Receive shift Rg와 병렬로 변환된 Data를 CPU 내의 Rg로 전송하는 UDR(Receive) Rg, 수신한 Data의 Error 발생 여부를 체크 하는 Parity Checker 회로로 구성 되어 있다.
- Data 수신을 위한 Coding 예(초기화 함수는 윗 void uart0_init(void)를 이용)
- Control and Status Register
- ATmega128 Chip은 UCSRA, UCSRB,UCSRC 3개의 Control and Status Register(Control Rg)를 갖고 있다. Control Rg 에 대한 설명은 아래 Control Rg 부분을 참고 하기 바람.
uart0의 초기화하는 함수
uart0로 부터 하나의 문자를 수신 하는 함수
- Serial frame format
- Every frame will have at least
- 1 start bit
- data bits (5,6,7,8 or 9)
- 1-2 stop bit
- Parity is optional
- Asynchronous Clock Recovery
- 비 동기 모드에서 정확한 Data 수신을 위한 Clock Recovery와 Start Bit Sampling
- Start Bit 를 Sampling 하기 위하여 16배(or 8배)(Normal mode 인 경우 16배, Double Speed mode 인 경우에는 8배) 속도의 내부 Clock를 사용 한다.
- 중간 부분에서 3번 Sampling 하여 2개 이상이 0 이면 0, 2개 이상이 1이면 1로 결정 한다.
- Error detection
- Parity Error
- Data bits의 XOR에 의하여 Parity Bit를 생성 한다.
- Parity는 Even 과 Odd Parity 로 구분 한다.
- Peven= dn XOR dn-1 XOR dn-2 ........ XOR d0 XOR 0
- Podd = dn XOR dn-1 XOR dn-2 ........ XOR d0 XOR 1
- Frame Error
- Stop Bit 가 발견 되지 않는 경우
- 첫 번째 Stop bit가 0으로 검출되는 경우
- Data Overrun Error
- 수신 버퍼에 현재 읽지 않은 데이터가 들어있는 상태에서 새로운 데이터가 수신 완료되고, 그 다음 수신 데이터인 Start bit가 검출된 경유
- 외부 장치와 UART 통신 구현에 필요한 Interface IC 예(MAX232)
- Logic(0,1)의 전압 발생
- TTL Logic : 0V, 5V
- RS-232 : -12V, +12V
- MAX232 : Negative와 Positive 전압을 발생 시키는 Charge pump 기능을 포함 함.
- Serial Communication에 사용하는 Connector 예
- 간단한 RS232 Cable 연결 예
- ATmega128 USART
- USART : UART 의 기능과 Synchronous Communication을 포함 하고 있다.
- Asynchronous (UART): Universal Asynchronous Receiver and Transmitter
- 두 장치간에 clock 을 공유 하지 않는다.
- Synchronous: clock 을 공유 한다.
- Baud rate : 매 초간 전달(수신, 송신)되는 Symbol의 수
- Data rate : 매 초간 전달(수신, 송신)되는 Data 수
- Data rate = Baud rate / Frame Bits(Data Bits + Start,Stop, Parity Bits)
- ATmega128 USART Pin
- USART0 : Port E 사용
- PE0: Receive Pin
- PE1: Transmit Pin
- PE2: External Clock
- USART1 : Port D 사용
- PD2: Receive Pin
- PD3: Transmit Pin
- PD5: External Clock
- USART Data Registers
- UDRn: 8-bit Data Register
- UDRn(Usart 0,1 I/O Data Register)
- UDRn 레지스터는 송/수신되는 데이터 값을 저장하는 버퍼 역할을 하게 된다.
- UDRn은 TXBn(송신버퍼)/RXBn(수신버퍼) 레지스터로 구성되고, 같은 I/O 주소를 갖는다.
- 송신할 때는 UDRn(Read)에 데이터를 Write 하고,
- 수신할 때는 UDRn(Write)의 테이터를 Read 한다.
- UDRn(Read)와 UDRn(Write)은 같은 이름을 사용 하지만 별개의 Rg 이다. Read 동작에서는 UDRn(Read) Rg를 읽고, Write 동작에서는 UDRn(Write) Rg에 Data를 Write 한다.
- Baud Rate Registers
- UBRRnH and UBRRnL: Baud Rate Registers
- USART internal clock 은 UBRR register에 의하여 설정 된다.
- 12 bits Baud Rate Rg UBRR의 값은
- UBRR = (System Clock / 16XBaud Rate) – 1 식으로 구한다.
- UBRR register 값과 baud rates 예
- UCSRnA(USART Control and Status Register A)
- Bit 7 – RXCn(USART Receive Complete Flag)
- Receive Buffer에 읽지 않은 Data가 있을 때 Set 되고,
- Receive Buffer 가 비어 있을 때 Clear 된다.
- Receive Disabled 되면 이 Buffer는 Flushed 되고,
- RXCn Flag는 Clear(Zero) 된다.
- RX Complete Interrupt Enable 상태 일 경우 이 Flag 가 Set 되면 RX Complete Interrupt 가 발생 된다.
- Bit 6 – TXCn(USART Transmit Complete Flag)
- Transmit buffer(UDRn)에 전송된 Data 가 Transmit Shift Register에서 shifted out 되어 전송을 위한 새로운 Data를 받을 수 있는 상태가 되면 이 Flag 가 Set 된다.
- TX Complete Interrupt Enable 상태에서 Transmit complete interrupt 이 실행 되면 이 Falg는 자동으로 Clear 된다.
- TX Complete Interrupt를 사용 하지 않는 경우에는 이 Bit에 1을 쓰는 방법으로 이 Flag를 Clear 할 수 있다.
- TX Complete Interrupt Enable 상태 일 경우 이 Flag 가 Set 되면 TX Complete Interrupt 가 발생 된다.
- Bit 5 – UDREn(USART Data Register Empty Flag)
- Flag는 Transmit buffer(UDRn)의 상태를 표시 한다.
- 이 Flag가 1(Set)인 경우 Transmit buffer(UDRn)가 Empty 상태이기 때문에 전송을 위하여 새 Data를 받을 수 있다.
- Data Register Empty Interrupt Enable 상태 일 경우 이 Flag 가 Set 되면 Data Register Empty Interrupt 가 발생 된다.
- Bit 4 – FEn(USART Frame Error)
- Bit 3 – DORn(USART Data Overrun Error)
- Bit 2 – UPEn(USART Parity Error)
- Bit 1 – U2Xn(Double the USART Transmission Speed)
- U2Xn = 1 : 비동기 모드에서 클럭의 분주비를 16에서 8로 낮추어 전송속도를 2배 높이는 기능.
- Bit 0 – MPCMn(USART Multi-Processer Communication Mode)
- UCSRnB(USART Control and Status Register B)
- Bit 7 – RXCIEn(USART RX Complete Interrupt Enable)
- SREG의 Global interrupt flag 가 Set 되고,
- 이 Bit가 Set된 상태(RX Complete Interrupt Enable)에서,
- RXC flag가 Set 되면 RX Complete Interrupt가 발생 한다.
- RX Complete Interrupt Routine에서 UDRn(Read) Data를 읽어서 사용 할 수 있다.
- Bit 6 – TXCIEn(USART TX Complete Interrupt Enable)
- SREG의 Global interrupt flag 가 Set 되고,
- 이 Bit가 Set된 상태(TX Complete Interrupt Enable)에서,
- TXC flag가 Set 되면 TX Complete Interrupt가 발생 한다.
- TX Complete Interrupt Routine에서 UDRn(Write)에 전송 할 Data를 쓸 수 있다.
- Bit 5 – UDRIEn(USART Data Register Empty Interrupt Enable)
- SREG의 Global interrupt flag 가 Set 되고,
- 이 Bit가 Set된 상태(Data Register Empty Interrupt Enable)에서,
- UDREn flag가 Set 되면 Data Register Empty Interrupt가 발생 한다.
- Data Register Empty Interrupt Routine에서 UDRn(Write)에 전송 할 Data를 쓸 수 있다.
- Bit 4 – RXENn(USART Receiver Enable)
- 이 Bit가 Set 되면 USARTn Receiver가 Enable(사용 할 수 있는 상태) 된다.
- 이 Bit가 Set 되면 RxDn와 공통으로 이 Pin을 사용 하는 I/O Port는 이 Pin을 사용 할 수 없다.
- 이 Bit을 Clear(Receiver Disable) 하면 Receive buffer(UDRn(Read))는 Flush 된다.
- Bit 3 – TXENn(USART Transmitter Enable)
- 이 Bit가 Set 되면 USARTn Transmitter가 Enable(사용 할 수 있는 상태) 된다.
- 이 Bit가 Set 되면 TxDn와 공통으로 이 Pin을 사용 하는 I/O Port는 이 Pin을 사용 할 수 없다.
- 이 Bit을 Clear(Transmitter Disable) 하여도 현재 전송 중인 Data는 전송이 완료 된다.
- Bit 2 – UCSZn2(USART Character Size)
- UCSTnC 의 UCSZn1:0 와 함께 사용 함.
- Bit 1 – RXB8n(USART Receive Data Bit 8)
- Bit 0 – TXB8n(USART Transmit Data Bit 8)
- UCSRnC(USART Control and Register C)
- Bit 6 – USMSELn(USART Mode Select)
- USMSELn = 1 : 동기전송모드
- USMSELn = 0 : 비동기전송모드
- Bit 5, 4 – UPMn1, UPMn0(USART Parity Mode)
- Bit 3 – USBSn(USART Stop Bit Select)
- USBSn = 0 : 1 Stop bits
- USBSn = 1 : 2 Stop bits
- Bit 2, 1 – UCSZn1, UCSZn0 : 아래 "Character Size" 참고요
- Bit 0 – UCPOLn(USART Clock Polarity)
- 동기 전동 모드에서만 사용.
- UCPOLn = 1 : 송신데이터는 XCKn Clock Falling Edge에서, 출력 수신데이터는 XCKn Clock Rising Edge 에서 검출
- UCPOLn = 0 : 송신데이터는 XCKn Clock Rising Edge 에서, 출력 수신데이터는 XCKn Clock Falling Edge에서 검출
- Character Size : UCSZn2(UCSRnB: Bit2), UCSZn1(UCSRnC: Bit2), UCSZn0(UCSRnC: Bit1)
- UCSZn2, UCSZn1, UCSZn0의 설정에 따라 5-9Bits 로 결정 된다.
2개의 8-bit registers를 사용 한다.(n은 USART 번호로 0 또는 1)
주의 : UBBRnH Write 후 UBBRnL를 나중에 Write 하여야 한다.
- UART 통신를 위한 설정과 문자 Input/Output 프로그램 예
- UART 통신를 위한 설정과 문자를 Input/Output 하는 프로그램 예: AVR_asm_usart_io_basic.zip
- 실험을 위한 준비
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Atmega128의 TXD0(PE1)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Atmega128의 RXD0(PE0)를 연결한다.
- 컴퓨터(USB --> UART(RS232)의 GND와 Atmega128의 GND를 연결한다. "USB --> UART(RS232) 변환 모듈"를 사용하는 경우 변환 모듈의 GND와 Atmega128의 GND를 연결한다.
- 실험 방법
- Project(Project name: AVR_asm_usart_io_basic)를 생성 한다.
- 위 프로그램을 main.asm에 복사하고 저장한다.
- Build → Build Solution 를 실행 하면 main.asm File 이 Assemble 되어 AVR_asm_usart_io_basic.hex 파일이 생성된다.
- AVR_asm_usart_io_basic.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
- 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate 등을 설정)을 한다.
- 실험:
- 개발 보드의 Reset SW를 누르면 모니터에 "UART0 Testing..." 메세지가 출력된다.
- 모니터에서 문자를 입력하면 입력된 문자는 UART 통신을 이용하여 개발보드에 전송된다.
- 개발보드에 전송된 문자는 다시 UART 통신을 이용하여 모니터에 출력된다.
- UART 통신을 이용한 Microcontroller 제어 예
- UART 통신을 이용하여 Microcontroller를 제어 하는 프로그램 예: AVR_asm_led_usart_shift.zip
- 실험을 위한 준비
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Atmega128의 TXD0(PE1)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Atmega128의 RXD0(PE0)를 연결한다.
- 컴퓨터(USB --> UART(RS232)의 GND와 Atmega128의 GND를 연결한다. "USB --> UART(RS232) 변환 모듈"를 사용하는 경우 변환 모듈의 GND와 Atmega128의 GND를 연결한다.
- 실험 방법
- Project(Project name: AVR_asm_led_usart_shift)를 생성 한다.
- 위 프로그램을 main.asm에 복사하고 저장한다.
- Build → Build Solution 를 실행 하면 main.asm File 이 Assemble 되어 AVR_asm_led_usart_shift.hex 파일이 생성된다.
- AVR_asm_led_usart_shift.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
- 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate 등을 설정)을 한다.
- 실험:
- 개발 보드의 Reset SW를 누르면 모니터에 "UART: LED Rotation Control" 메세지가 출력된다.
- 모니터에서 L 문자를 입력하면 LED가 좌측으로 회전하고 R 문자를 입력하면 LED가 우측으로 회전한다.
- UART 통신과 문자열(String) I/O을 이해 하기 위한 예
- UART 통신과 문자열(String) I/O 프로그램 예: AVR_asm_usart_string_io.zip
- 실험을 위한 준비
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Atmega128의 TXD0(PE1)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Atmega128의 RXD0(PE0)를 연결한다.
- 컴퓨터(USB --> UART(RS232)의 GND와 Atmega128의 GND를 연결한다. "USB --> UART(RS232) 변환 모듈"를 사용하는 경우 변환 모듈의 GND와 Atmega128의 GND를 연결한다.
- 실험 방법
- Project(Project name: AVR_asm_usart_string_io)를 생성 한다.
- 위 프로그램을 main.asm에 복사하고 저장한다.
- Build → Build Solution 를 실행 하면 main.asm File 이 Assemble 되어 AVR_asm_usart_string_io.hex 파일이 생성된다.
- AVR_asm_usart_string_io.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
- 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate 등을 설정)을 한다.
- 실험:
- 개발 보드의 Reset SW를 누르면 모니터에 "Input New String:" 메세지가 출력된다.
- 모니터에서 문자를 입력하면 입력된 문자는 UART 통신을 이용하여 개발보드에 전송되어 Input buffer에 저장된다.
- Enter Key를 누르면 Input buffer에 저장된 문자열이 모니터에 출력된다.
- UART Rx Interrupt를 이용한 제어 문자 입력과 LED shift 제어
- UART Rx Interrupt를 이용한 제어 문자 입력과 LED shift 제어 프로그램 예: AVR_asm_led_shift_uart_Rx_int.zip
- ATMega128 Interrupt Vector Table Template: "avr128_interrupt_table.inc"
- USART0 Rx Complete Handler을 사용하기위한 Interrupt Vector Table 편집 예
- 실험을 위한 준비
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Atmega128의 TXD0(PE1)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Atmega128의 RXD0(PE0)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Atmega128의 GND를 연결한다. "USB --> UART(RS232) 변환 모듈"를 사용하는 경우 변환 모듈의 GND와 Atmega128의 GND를 연결한다.
- PORTF에 저항(330Ω)과 LED Array(8Bits)를 연결한다.
- 실험 방법
- Project(Project name: AVR_asm_led_shift_uart_Rx_int)를 생성 한다.
- 위 프로그램을 main.asm에 복사하고 저장한다.
- ATMega128 Interrupt Vector Table Template를 Download 하여 avr128_interrupt_table.inc 파일을 main.asm이 있는 폴더에 복사한다
- USART0 Rx Interrupt가 발생하면 "getchar_set_dir" Interrupt Handler 가 실행되도록 avr128_interrupt_table.inc 파일의 "USART0 Rx Complete Handler"를 위 "USART0 Rx Complete Handler을 사용하기위한 Interrupt Vector Table 편집 예"와 같이 편집하여 저장한다.
- Build → Build Solution 를 실행 하면 main.asm File 이 Assemble 되어 AVR_asm_led_shift_uart_Rx_int.hex 파일이 생성된다.
- AVR_asm_led_shift_uart_Rx_int.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
- 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate 등을 설정)을 한다.
- 실험: USART0 Rx Interrupt를 이용하는 예 이다.
- 개발 보드의 Reset SW를 누르면 모니터에 "UART0 Interrupt: LED Shift."와 "SHIFT_LEFT: L SHIFT_RIGHT: R" 메세지가 출력된다.
- 모니터 프로그램에서 문자 "L"를 입력하면 LED 가 좌측으로 회전하고, 문자 "R"를 입력하면 LED 가 우측으로 회전한다.
- 개발보드는 모니터 프로그램으로 부터 UART Interrupt를 이용하여 명령 문자를 받는다.
UART 통신 실험을 위한 회로 구성 예
주: 컴퓨터에 Serial Port가 없는 경우 "USB --> UART(RS232) 변환 모듈"를 사용(USB Port를 Serial Port로 변환)하여 연결한다. 개발보드에 따라서는 "USB --> UART(RS232) 변환 모듈"을 내장하고 있는 경우가 많기 때문에 본인이 사용하는 개발보드에서 확인 하여야 한다.
참고자료: USB - Serial 변환 모듈
주: 모니터 프로그램(예: OC-Console, Tera Term)과 hex 파일을 Target Board에 Upload 하는 프로그램이 동일한 Port를 사용하기 때문에 모니터 프로그램을 중지하고 Upload를 실행하여야 한다.
참고자료: GCC asm 프로그램 예: GCC_asm_usart_io_basic.zip
주: 컴퓨터에 Serial Port가 없는 경우 "USB --> UART(RS232) 변환 모듈"를 사용(USB Port를 Serial Port로 변환)하여 연결한다. 개발보드에 따라서는 "USB --> UART(RS232) 변환 모듈"을 내장하고 있는 경우가 많기 때문에 본인이 사용하는 개발보드에서 확인 하여야 한다.
참고자료: USB - Serial 변환 모듈
주: 모니터 프로그램(예: OC-Console, Tera Term)과 hex 파일을 Target Board에 Upload 하는 프로그램이 동일한 Port를 사용하기 때문에 모니터 프로그램을 중지하고 Upload를 실행하여야 한다.
주: 컴퓨터에 Serial Port가 없는 경우 "USB --> UART(RS232) 변환 모듈"를 사용(USB Port를 Serial Port로 변환)하여 연결한다. 개발보드에 따라서는 "USB --> UART(RS232) 변환 모듈"을 내장하고 있는 경우가 많기 때문에 본인이 사용하는 개발보드에서 확인 하여야 한다.
참고자료: USB - Serial 변환 모듈
주: 모니터 프로그램(예: OC-Console, Tera Term)과 hex 파일을 Target Board에 Upload 하는 프로그램이 동일한 Port를 사용하기 때문에 모니터 프로그램을 중지하고 Upload를 실행하여야 한다.
참고자료: GCC asm 프로그램 예: GCC_asm_usart_string_io.zip