bl_mcu_sdk/docs/source/notes/note_uart.rst
2022-12-07 10:19:27 +08:00

37 lines
1.9 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

UART 引脚映射详解
===============================
博流系列芯片每个 pin 都可以配置成 UART 任意一个功能,这种灵活的配置就会出现一些坑,比如多个 pin 配成了一个 uart 功能。
下面介绍下如何正确的理解 `每个 pin 都可以配置成 UART 任意一个功能` 并防止踩坑。最后讲下 ``bflb_gpio_uart_init`` 函数的实现。
UART SIG
-------------------
在博流系列芯片中,有个 `UART SIG` 的概念, 每个 SIG 对应到 UART 所有功能,功能类似于 8选1 选择器或者 12 选1 选择器。并且每个 SIG 都有一个默认的 UART 功能,如图所示:
.. figure:: img/uart_sig.png
:alt:
2 个 pin 选了一个 SIG
^^^^^^^^^^^^^^^^^^^^^^^
每个 GPIO 对应一个 SIG, 对应关系跟芯片相关,比如 BL602/BL702 是 mod 8 的关系,而 BL616/BL808 是 mod 12 的关系,这个时候就会产生一个问题, **存在重复的可能性**
**假设现在是 mod 8 的关系,则 GPIO0 跟 GPIO8 都对应 SIG0如果 GPIO0 配置了 UART 一个功能,则不能再使用 GPIO8否则会出现两个 GPIO 共用一个功能的情况**
2 个 SIG 选了一个 UART 功能
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
为了方便软件,代码中将默认功能全部改成了 `0xF`,所有 SIG 都指向一个没有作用的功能。为什么这么做?
假设 GPIO2 默认使用 UART0 TX这个时候我想使用 GPIO6 作为 UART0 TX当我软件中配置 GPIO6 为 UART0 TX 以后请问GPIO2 是什么功能?没错,还是 UART0 TX这个时候就是有问题的。
bflb_gpio_uart_init
------------------------
针对以上两个问题,出现了 ``bflb_gpio_uart_init``。该函数的作用是避免了 `2 个 SIG 选了一个 UART 功能` ,如果出现了,则后配置的覆盖前面的。
而对于 `2 个 pin 选了一个 SIG` 则是无法靠软件避免的,只能人为的避免。