- UART object(class UART)
- RP2040의 UART
- RP2040에는 ARM Primecell UART(PL011)(Revision r1p5)를 기반으로 하는 2개의 동일한 UART가 있다.
- 각 UART는 다음 기능을 지원한다.
- 분리된 32x8 Tx 와 32x12 Rx FIFO Buffer
- clk_peri에 의하여 Clock 되는 Programmable baud rate generator
- 전송시 자동으로 삽입되고 수신시 자동으로 제거되는 Standard asynchronous communication bits(start, stop, parity)
- Line break detection
- Programmable serial interface(5, 6, 7, or 8 bits)
- 1 or 2 stop bits
- Programmable hardware flow control
- 각 UART는 GPIO muxing 테이블에 정의된 여러 GPIO 핀에 연결할 수 있다.
- UART object 생성자(Constructors): class machine.UART(id, ...)
- id: UART 식별자이다.
- Methods
- UART.init(baudrate=9600, bits=8, parity=None, stop=1, *, ...)
- UART를 초기화 할 때 사용하는 매개변수
- baudrate: Clock rate
- bits: Number of bits per character, 7, 8 or 9.
- parity: Parity is the parity, None, 0 (even) or 1 (odd).
- stop: Number of stop bits, 1 or 2.
- 포트 설정에 자주 사용하는 사용하는 전용 매개변수
- tx: TX 신호에 사용하는 pin.
- rx: RX 신호에 사용하는 pin.
- UART.deinit(): Turn off the UART bus.
- UART.any()
- Blocking 없이 읽을 수 있는 문자 수를 세는 정수를 반환한다.
- 사용 가능한 문자가 없으면 0을 반환하고 문자가 있으면 양수를 반환한다.
- 이 Method는 읽을 수 있는 문자가 두 개 이상 있더라도 1을 반환할 수 있다. 사용 가능한 문자를 보다 정확하게 쿼리하려면 select.poll을 사용하여야 한다.
- UART.read([nbytes])
- UART로 부터 문자를 읽는다.
- nbytes가 지정된 경우 최대 nbytes를 읽고, 읽을 수 있는 문자가 nbytes 보다 적은 경우에는 가능한 한 많은 데이터를 읽는다.
- 시간 초과(timeout)이 발생하면 하면 nbytes 보다 더 적은 수의 문자만 읽고 빨리 반환될 수 있다. 시간 초과 설정은 생성자에서 구성할 수 있다.
- Return value: 읽은 문자(Bytes)를 포함하는 Byte열 객체. 시간 초과 시 None을 반환한다.
- UART.readinto(buf[, nbytes])
- buf로 Bytes를 읽는다.
- nbytes가 지정된 경우 최대 nbytes를 읽고, 읽을 수 있는 문자가 nbytes 보다 적은 경우에는 최대 len(buf) 바이트를 읽는다.
- 시간 초과(timeout)이 발생하면 하면 nbytes 보다 더 적은 수의 문자만 읽고 빨리 반환될 수 있다. 시간 초과 설정은 생성자에서 구성할 수 있다.
- Return value: buf에 저장한 Bytes 수. 시간 초과 시 None을 반환한다.
- UART.readline()
- 줄 바꿈 문자(Newline character)로 끝나는 줄을 읽는다.
- 시간 초과(timeout)이 발생하면 하면 한 줄(Line) 보다 더 적은 수의 문자만 읽고 빨리 반환될 수 있다. 시간 초과 설정은 생성자에서 구성할 수 있다.
- Return value: 한 line을 읽은 문자열. 시간 초과 시 None을 반환한다.
- UART.write(buf)
- Bytes buffer의 문자열을 UART bus에 write 한다.
- Return value: Write 한 Bytes 수. 시간 초과 시 None을 반환한다.
- UART.sendbreak()
- UART bus에 Break condition을 보낸다. 이것은 문자의 정상적인 전송에 필요한 것보다 더 긴 기간 동안 버스를 Low로 구동한다.
- UART.irq(trigger, priority=1, handler=None, wake=machine.IDLE)
- UART에서 데이터가 수신될 때 트리거될 Callback을 생성한다.
- trigger는 오직 UART.RX_ANY 만 될 수 있다.
- 인터럽트의 우선 순위. 1-7 범위의 값을 사용할 수 있다. 값이 높을수록 우선 순위가 높음을 나타낸다.
- handler는 새 문자가 도착할 때 호출되는 선택적 함수로 아래의 두 조건 중 하나가 충족될 때마다 호출된다.
- 8 개의 새 문자기 수신된 경우
- Rx 버퍼에서 최소 1개의 새 문자가 대기 중이고 Rx 라인이 1개의 완전한 프레임 기간 동안 침묵(silent)한 경우
- wake는 오직 machine.IDLE 만 될 수 있다.
- UART object의 생성과 초기화 예
- 프로그램 예: UART basic
- UART 통신를 위한 설정과 문자 Input/Output 프로그램 예: uart-basic.py
- 실험을 위한 준비
- Pi Pico 개발보드와 PC의 UART 신호 연결
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Pi Pico 개발보드의 TXD1(GP4)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Pi Pico 개발보드의 RXD1(GP5)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Pi Pico 개발보드의 GND를 연결한다.
- 실험 방법
- 윗 프로그램을 File name "uart-basic.py"로 저장 한다.
- PC에서 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
- 모니터 프로그램에서 USB --> UART(RS232) 변환 모듈의 Serial Port를 확인하고 필요한 설정(Serial Port와 Baudrate(115200) 등을 설정)을 한다.
- Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
- Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
- Thonny IDE에서 "파일 -> 열기... -> 이 컴퓨터"를 실행하여 uart-basic.py를 Open 한다.
- 실험
- "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
- 프로그램이 실행되면 모니터 프로그램에 "UART test" 메세지가 출력된다.
- 모니터 프로그램에 문자를 입력하면 입력한 문자가 Pi Pico에 전송되고, Pi Pico에서 수신한 문자는 다시 PC에 전송되어 모니터 프로그램에 문자가 출력된다.
- 프로그램 예: UART-LED control
- UART 통신를 위한 설정과 문자 Input/Output 프로그램 예: uart-led-control.py
- 실험을 위한 준비
- Pi Pico 개발보드와 PC의 UART 신호 연결
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Pi Pico 개발보드의 TXD1(GP4)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Pi Pico 개발보드의 RXD1(GP5)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Pi Pico 개발보드의 GND를 연결한다.
- LED는 Pi Pico 개발보드의 LED(GP25)를 사용한다.
- 실험 방법
- 윗 프로그램을 File name "uart-led-control.py"로 저장 한다.
- PC에서 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
- 모니터 프로그램에서 USB --> UART(RS232) 변환 모듈의 Serial Port를 확인하고 필요한 설정(Serial Port와 Baudrate(115200) 등을 설정)을 한다.
- Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
- Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
- Thonny IDE에서 "파일 -> 열기... -> 이 컴퓨터"를 실행하여 uart-led-control.py를 Open 한다.
- 실험
- "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
- 프로그램이 실행되면 모니터 프로그램에 "UART LED period control" 메세지가 출력된다.
- 모니터 프로그램에서 U(or u) 문자를 입력하면 LED의 점멸 속도가 빨라지고,
- 모니터 프로그램에서 D(or d) 문자를 입력하면 LED의 점멸 속도가 느려진다.
- 프로그램 예: UART readline
- UART 통신를 사용하여 line 단위로 통신하는 프로그램 예: uart-readline.py
- 실험을 위한 준비
- Pi Pico 개발보드와 PC의 UART 신호 연결
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Pi Pico 개발보드의 TXD1(GP4)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Pi Pico 개발보드의 RXD1(GP5)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Pi Pico 개발보드의 GND를 연결한다.
- 실험 방법
- 윗 프로그램을 File name "uart-readline.py"로 저장 한다.
- PC에서 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
- 모니터 프로그램에서 USB --> UART(RS232) 변환 모듈의 Serial Port를 확인하고 필요한 설정(Serial Port와 Baudrate(115200) 등을 설정)을 한다.
- Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
- Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
- Thonny IDE에서 "파일 -> 열기... -> 이 컴퓨터"를 실행하여 uart-readline.py를 Open 한다.
- 실험
- "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
- 프로그램이 실행되면 모니터 프로그램에 "UART readline test" 메세지가 출력된다.
- 아래 내용이 반복(while loop)된다.
- 개발 Tool의 console에 while loop의 count 값이 출력된다.
- UART console에 while loop의 count 값이 출력된다.
- UART console에 count 값이 출력된음 4초 이내에 UART console에서 문자열을 입력하고 Enter key를 누른다.
- UART console에서 문자열을 readline으로 읽어 개발 Tool의 console과 UART console에 출력한다.
참고자료: Raspberry Pi Pico Pinout
참고자료: 기타 포트 설정에 사용하는 사용하는 전용 매개변수는 "class UART – duplex serial communication bus"를 참고바람.
이것은 handler 함수가 호출될 때 1-8개의 문자가 대기한다는 것을 의미한다.
주: Pi pico 보드는 이 Method를 지원하지 않는 것 같다. 문제를 해결한 분은 e-mail로 연락 주시기 바람니다.
from machine import UART
uart = UART(1, 9600) # UART 1 object를 생성 하고 baudrate를 초기화 한다.
uart.init(9600, bits=8, parity=None, stop=1) # uart를 주어진 parameters로 초기화 한다.
이 예는 Pi Pico 개발보드 UART 1을 이용하여 PC와 Serial communication을 하는 예이다.
실험 회로 구성 예
주의: 컴퓨터(USB --> UART(RS232) 변환 모듈)의 전원 전압(Vdd)과 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 연결하지 않는다. USB --> UART와 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 다를 수 있다.
주: UART0는 개발 도구에서 사용하기 때문에 실험에는 UART1을 사용한다.
이 예는 Pi Pico 개발보드 UART 1을 이용하여 Pi Pico 개발보드의 LED의 점멸 속도를 제어하는 예이다.
실험 회로 구성 예
주: Raspberry Pi Pico는 GPIO25를 On-board LED 제어에 사용하고, Raspberry Pi Pico W는 WL_GPIO0(Infineon CYW43439의 GPIO0)를 On-board LED 제어에 사용한다.
주: 위 회로에서 LED 회로(보드에 점선으로 연결)는 개발보드에 내장된 LED를 사용하기 때문에 실제 회로 구성은 하지 않아도 된다.
주의: 컴퓨터(USB --> UART(RS232) 변환 모듈)의 전원 전압(Vdd)과 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 연결하지 않는다. USB --> UART와 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 다를 수 있다.
이 예는 Pi Pico 개발보드 UART 1을 이용하여 PC와 Line 단위로 Serial communication을 하는 예이다.
실험 회로 구성: UART basic의 실험 회로 구성 예와 같다.
주의: 컴퓨터(USB --> UART(RS232) 변환 모듈)의 전원 전압(Vdd)과 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 연결하지 않는다. USB --> UART와 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 다를 수 있다.