mirror of
https://github.com/micropython/micropython.git
synced 2025-09-07 10:20:52 +02:00
Some checks are pending
JavaScript code lint and formatting with Biome / eslint (push) Waiting to run
Check code formatting / code-formatting (push) Waiting to run
Check code size / build (push) Waiting to run
Check spelling with codespell / codespell (push) Waiting to run
Check commit message formatting / build (push) Waiting to run
Build docs / build (push) Waiting to run
Check examples / embedding (push) Waiting to run
Package mpremote / build (push) Waiting to run
.mpy file format and tools / test (push) Waiting to run
Build ports metadata / build (push) Waiting to run
cc3200 port / build (push) Waiting to run
esp32 port / build_idf (esp32_build_cmod_spiram_s2) (push) Waiting to run
esp32 port / build_idf (esp32_build_s3_c3) (push) Waiting to run
esp8266 port / build (push) Waiting to run
mimxrt port / build (push) Waiting to run
nrf port / build (push) Waiting to run
powerpc port / build (push) Waiting to run
qemu port / build_and_test_arm (push) Waiting to run
qemu port / build_and_test_rv32 (push) Waiting to run
renesas-ra port / build_renesas_ra_board (push) Waiting to run
rp2 port / build (push) Waiting to run
samd port / build (push) Waiting to run
stm32 port / build_stm32 (stm32_misc_build) (push) Waiting to run
stm32 port / build_stm32 (stm32_nucleo_build) (push) Waiting to run
stm32 port / build_stm32 (stm32_pyb_build) (push) Waiting to run
unix port / minimal (push) Waiting to run
unix port / reproducible (push) Waiting to run
unix port / standard (push) Waiting to run
unix port / standard_v2 (push) Waiting to run
unix port / coverage (push) Waiting to run
unix port / coverage_32bit (push) Waiting to run
unix port / nanbox (push) Waiting to run
unix port / float (push) Waiting to run
unix port / stackless_clang (push) Waiting to run
unix port / float_clang (push) Waiting to run
unix port / settrace (push) Waiting to run
unix port / settrace_stackless (push) Waiting to run
unix port / macos (push) Waiting to run
unix port / qemu_mips (push) Waiting to run
unix port / qemu_arm (push) Waiting to run
unix port / qemu_riscv64 (push) Waiting to run
webassembly port / build (push) Waiting to run
windows port / build-vs (Debug, x64, windows-2022, dev, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Debug, x64, windows-latest, dev, 2017, [15, 16)) (push) Waiting to run
windows port / build-vs (Debug, x86, windows-2022, dev, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Debug, x86, windows-latest, dev, 2017, [15, 16)) (push) Waiting to run
windows port / build-vs (Release, x64, windows-2019, dev, 2019, [16, 17)) (push) Waiting to run
windows port / build-vs (Release, x64, windows-2019, standard, 2019, [16, 17)) (push) Waiting to run
windows port / build-vs (Release, x64, windows-2022, dev, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x64, windows-2022, standard, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x64, windows-latest, dev, 2017, [15, 16)) (push) Waiting to run
windows port / build-vs (Release, x64, windows-latest, standard, 2017, [15, 16)) (push) Waiting to run
windows port / build-vs (Release, x86, windows-2019, dev, 2019, [16, 17)) (push) Waiting to run
windows port / build-vs (Release, x86, windows-2019, standard, 2019, [16, 17)) (push) Waiting to run
windows port / build-vs (Release, x86, windows-2022, dev, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x86, windows-2022, standard, 2022, [17, 18)) (push) Waiting to run
windows port / build-vs (Release, x86, windows-latest, dev, 2017, [15, 16)) (push) Waiting to run
windows port / build-vs (Release, x86, windows-latest, standard, 2017, [15, 16)) (push) Waiting to run
windows port / build-mingw (i686, mingw32, dev) (push) Waiting to run
windows port / build-mingw (i686, mingw32, standard) (push) Waiting to run
windows port / build-mingw (x86_64, mingw64, dev) (push) Waiting to run
windows port / build-mingw (x86_64, mingw64, standard) (push) Waiting to run
windows port / cross-build-on-linux (push) Waiting to run
zephyr port / build (push) Waiting to run
Python code lint and formatting with ruff / ruff (push) Waiting to run
Getting this test running on stm32- and mimxrt-based boards requires adding a small delay after constructing the UART so that the initial idle frame has time to be transmitted before the test starts. Also, the timing margin needs to account for an additional 1-bit worth of time on some MCUs. Thanks to @robert-hh for the esp32, mimxrt and samd settings. Signed-off-by: Damien George <damien@micropython.org>
61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
# Test machine.UART transmission.
|
|
# Does not require any external connections.
|
|
|
|
try:
|
|
from machine import UART
|
|
except ImportError:
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
import time, sys
|
|
|
|
initial_delay_ms = 0
|
|
bit_margin = 0
|
|
timing_margin_us = 100
|
|
|
|
# Configure pins based on the target.
|
|
if "esp32" in sys.platform:
|
|
uart_id = 1
|
|
pins = {}
|
|
timing_margin_us = 400
|
|
elif "mimxrt" in sys.platform:
|
|
uart_id = 1
|
|
pins = {}
|
|
initial_delay_ms = 20 # UART sends idle frame after init, so wait for that
|
|
bit_margin = 1
|
|
elif "pyboard" in sys.platform:
|
|
uart_id = 4
|
|
pins = {}
|
|
initial_delay_ms = 50 # UART sends idle frame after init, so wait for that
|
|
bit_margin = 1 # first start-bit must wait to sync with the UART clock
|
|
elif "rp2" in sys.platform:
|
|
uart_id = 0
|
|
pins = {"tx": "GPIO0", "rx": "GPIO1"}
|
|
timing_margin_us = 180
|
|
elif "samd" in sys.platform:
|
|
uart_id = 2
|
|
pins = {"tx": "D1", "rx": "D0"}
|
|
timing_margin_us = 300
|
|
bit_margin = 1
|
|
else:
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
# Test that write+flush takes the expected amount of time to execute.
|
|
for bits_per_s in (2400, 9600, 115200):
|
|
text = "Hello World"
|
|
uart = UART(uart_id, bits_per_s, bits=8, parity=None, stop=1, **pins)
|
|
time.sleep_ms(initial_delay_ms)
|
|
|
|
start_us = time.ticks_us()
|
|
uart.write(text)
|
|
uart.flush()
|
|
duration_us = time.ticks_diff(time.ticks_us(), start_us)
|
|
|
|
# 1(startbit) + 8(bits) + 1(stopbit) + 0(parity)
|
|
bits_per_char = 10
|
|
expect_us = (len(text)) * bits_per_char * 1_000_000 // bits_per_s
|
|
delta_us = abs(duration_us - expect_us)
|
|
margin_us = timing_margin_us + bit_margin * 1_000_000 // bits_per_s
|
|
print(bits_per_s, delta_us <= margin_us or delta_us)
|