您好,我目前正在基于 EC800M-CNGB + QuecPython 开发一款无独立 MCU 的终端设备,EC800M-CNGB 本身承担全部系统控制功能。
在进行 PCB 引脚资源冻结时,我对照了:
-
Quectel《EC800M-CNEG810M-CN QuecOpenQuecPython 硬件设计手册》
-
QuecPython 官方
machine.PinGPIO API 文档 -
Quectel 官方社区关于 UART 引脚是否可以复用为普通 GPIO 的答复
目前发现官方文档中的 GPIO Mapping 与实际 QuecPython 外设复用能力之间存在一些容易产生歧义的地方。
因此希望官方能够针对 EC800M-CNGB 给出明确结论。
一、首先确认一个核心问题:GPIO Mapping 的含义
在 QuecPython 官方 machine.Pin 文档中,EC800M-CNGB 相关 GPIO Mapping 中可以看到:
-
GPIO17 → Pin76
-
GPIO18 → Pin77
-
GPIO20 → Pin83
-
GPIO21 → Pin86
-
GPIO22 → Pin87
-
GPIO27 → Pin19
-
GPIO28 → Pin20
-
GPIO29 → Pin21
-
GPIO30 → Pin22
-
GPIO31 → Pin23
-
GPIO49 → Pin75
-
GPIO50 → Pin74
同时也可以看到部分具有 UART、Camera、SPI、LCD 等其他功能的物理引脚也存在 GPIO Mapping。
但 Quectel 官方社区此前针对 UART 引脚复用问题的答复为:
“在 QuecPython 中,UART 引脚和 GPIO 引脚是两个独立的外设资源,目前 QuecPython API 层不支持将 UART 引脚动态切换为普通 GPIO(输入/输出/中断)。”
因此我想确认:
1. machine.Pin 中列出的 GPIO Mapping 到底代表什么?
是:
A. 该物理 PIN 在底层硬件存在 GPIO 功能,但不代表 QuecPython 一定允许作为普通 GPIO 使用
还是:
B. 只要出现在 machine.Pin GPIO Mapping 中,就可以直接通过 machine.Pin() 作为普通 GPIO 使用
如果是 A,希望官方能够明确区分:
-
硬件 GPIO 功能存在
-
QuecPython 当前固件可用
-
QuecPython API 可作为普通 GPIO IN/OUT 使用
-
是否支持 GPIO IRQ
-
是否受到其他外设资源占用限制
二、目前已经按照官方定义使用的资源
以下功能我没有进行 GPIO 复用,希望确认这些分配本身没有问题。
1. MAIN_UART
| 物理 Pin | 功能 | 用途 |
|---|---|---|
| Pin17 | MAIN_RXD | RS-485 |
| Pin18 | MAIN_TXD | RS-485 |
RS-485 使用 MAIN_UART。
由于 RS-485 不使用硬件 RTS/CTS 流控,因此 Pin22 / Pin23 希望用于其他 GPIO 功能。
2. AUX_UART
| 物理 Pin | 功能 | 用途 |
|---|---|---|
| Pin28 | AUX_RXD | AUX_UART |
| Pin29 | AUX_TXD | AUX_UART |
板级定义名称为 AUX_UART,用于板内辅助串口。
当前实际使用的 QuecPython UART 映射为 UART4,目前实际串口功能正常。
3. DEBUG_UART
| 物理 Pin | 功能 | 用途 |
|---|---|---|
| Pin38 | DBG_RXD | DEBUG_RX |
| Pin39 | DBG_TXD | DEBUG_TX |
调试接口使用:
-
DEBUG_TXD
-
DEBUG_RXD
-
GND
外部只引出 3 Pin,不额外引出 1.8V。
4. NOR Flash
16 MB NOR Flash 使用 SPI0:
| 物理 Pin | SPI功能 |
|---|---|
| Pin30 | SPI_CLK |
| Pin31 | SPI_CS |
| Pin32 | SPI_MOSI |
| Pin33 | SPI_MISO |
5. LCD
LCD 使用专用 LCD SPI:
| 物理 Pin | 功能 |
|---|---|
| Pin49 | LCD_RST |
| Pin50 | LCD_SPI_DOUT |
| Pin51 | LCD_SPI_RS |
| Pin52 | LCD_SPI_CS |
| Pin53 | LCD_SPI_CLK |
| Pin78 | LCD_TE |
LCD 为系统主要人机交互界面。
6. I2C
I2C1:
-
Pin68 = I2C1_SCL
-
Pin69 = I2C1_SDA
I2C2:
-
Pin66 = I2C2_SDA
-
Pin67 = I2C2_SCL
7. ADC
-
Pin9 = ADC0
-
Pin96 = ADC1
8. 状态指示
-
Pin25 = STATUS
-
Pin16 = NET_STATUS
9. 系统控制
-
Pin7 = PWRKEY
-
Pin15 = RESET_N
-
Pin82 = USB_BOOT / KP_MKOUT[4]
10. GNSS
-
Pin2 = ANT_GNSS
-
Pin44 = GNSS_VBCKP
-
Pin35 = ANT_MAIN
其中 Pin44 用作 GNSS 备份电源输入。
11. 模拟音频
当前保留模拟音频功能:
-
Pin3 / Pin4:MIC
-
Pin5 / Pin6:SPK
数字功放方案已经取消。
三、目前希望使用的普通 GPIO
由于本产品没有独立 MCU,需要由 EC800M-CNGB 直接控制多个外设电源和按键,因此需要约 13 个普通 GPIO。
目前计划如下:
| 物理 Pin | QuecPython GPIO Mapping | 计划用途 |
|---|---|---|
| Pin20 | GPIO28 | RS485_PWR_EN |
| Pin21 | GPIO29 | AUX_UART_PWR_EN |
| Pin22 | GPIO30 | LCD_PWR_EN |
| Pin23 | GPIO31 | 5V_PWR_EN |
| Pin74 | GPIO50 | 3V3_PWR_EN |
| Pin75 | GPIO49 | SENSOR_PWR_EN |
| Pin76 | GPIO17 | LED_PWR_EN |
| Pin77 | GPIO18 | APP_LED |
| Pin83 | GPIO20 | KEY1 |
| Pin84 | GPIO15 | KEY2 |
| Pin85 | GPIO38 | KEY3 |
| Pin86 | GPIO21 | KEY4 |
| Pin87 | GPIO22 | KEY5 |
这些 PIN 在 machine.Pin 文档中都有对应 GPIO Mapping。
希望官方明确确认:
对于以上 13 个物理 PIN,在 EC800M-CNGB + 当前 QuecPython 环境下:
-
是否都可以作为普通 GPIO?
-
是否都支持 GPIO 输入?
-
是否都支持 GPIO 输出?
-
是否都支持 GPIO 中断 IRQ?
-
是否存在上电默认状态?
-
是否存在内部上下拉限制?
-
是否存在启动阶段特殊功能?
-
是否存在与 UART / Keypad / 其他外设冲突的问题?
-
是否有任何一个 PIN 不建议作为普通 GPIO 长期使用?
特别希望官方直接给出 Y/N 形式的确认。
四、重点确认 Pin19 / GPIO27
官方 machine.Pin Mapping 中:
GPIO27 → Pin19
Pin19 在硬件定义中具有:
MAIN_DTR / GPIO27
目前我的设计中没有使用 MAIN_DTR,因此希望将 Pin19 作为普通 GPIO 候选资源。
这里特别说明:
我的资料中并没有将 Pin19 标记为 AGPIO,因此我不希望预先假定它属于 AGPIO。
希望官方明确回答:
Pin19 / GPIO27 在 EC800M-CNGB + QuecPython 下是否可以作为普通 GPIO?
具体希望确认:
-
GPIO IN:是否支持?
-
GPIO OUT:是否支持?
-
GPIO IRQ:是否支持?
-
是否可以通过
machine.Pin()直接操作? -
是否存在启动阶段 / 系统阶段特殊用途?
-
如果不使用 MAIN_DTR,是否可以完全按照普通 GPIO 使用?
五、UART 引脚复用问题
这里是目前最需要官方确认的地方。
在 machine.Pin Mapping 中可以看到 UART 相关 PIN 也存在 GPIO 编号,例如:
| 物理 Pin | UART功能 | GPIO Mapping |
|---|---|---|
| Pin17 | MAIN_RXD | GPIO25 |
| Pin18 | MAIN_TXD | GPIO26 |
| Pin19 | MAIN_DTR | GPIO27 |
| Pin20 | MAIN_RI | GPIO28 |
| Pin21 | MAIN_DCD | GPIO29 |
| Pin22 | MAIN_CTS | GPIO30 |
| Pin23 | MAIN_RTS | GPIO31 |
| Pin28 | AUX_RXD | GPIO32 |
| Pin29 | AUX_TXD | GPIO33 |
| Pin38 | DBG_RXD | GPIO34 |
| Pin39 | DBG_TXD | GPIO35 |
但官方社区已有答复称:
UART 引脚和 GPIO 是独立外设资源,QuecPython API 层目前不支持将 UART 引脚动态切换为普通 GPIO。
因此希望进一步确认:
1. 上述 GPIO Mapping 是否仅表示芯片底层 GPIO 编号,而不是表示 QuecPython 可以实际将这些 UART PIN 当普通 GPIO 使用?
2. 如果某个 UART 外设完全没有初始化,是否仍然可以将对应 PIN 作为 GPIO?
3. 如果 UART 已经初始化,是否绝对不能再作为 GPIO?
4. 是否存在“启动前可以作为 GPIO、初始化 UART 后不能作为 GPIO”的情况?
5. 是否支持通过关闭 UART 后重新释放为 GPIO?
6. 是否支持 GPIO → UART → GPIO 的动态切换?
如果不支持,希望确认最终规则是否可以理解为:
一个物理 PIN 在 QuecPython 中一旦作为 UART 外设资源使用,就不能再通过
machine.Pin作为普通 GPIO 使用;machine.PinMapping 中存在对应 GPIO 编号并不代表可以动态复用。
六、Camera 相关 PIN 是否可以作为 GPIO
本产品完全不使用 Camera。
硬件手册中 Camera 相关资源包括:
| 物理 Pin | Camera功能 | QuecPython GPIO Mapping |
|---|---|---|
| Pin8 | CAM_VDD | 无 |
| Pin54 | CAM_MCLK | GPIO10 |
| Pin55 | CAM_SPI_DATA0 | GPIO11 |
| Pin56 | CAM_SPI_DATA1 | GPIO12 |
| Pin57 | CAM_I2C_SCL | GPIO13 |
| Pin58 | CAM_I2C_SDA | GPIO14 |
| Pin80 | CAM_SPI_CLK | GPIO41 |
| Pin81 | CAM_PWDN | GPIO16 |
其中 Pin8 是 Camera 电源,不考虑作为 GPIO。
但是 Pin54~58、Pin80、Pin81 在 machine.Pin Mapping 中又存在 GPIO 编号。
因此希望官方明确:
在 EC800M-CNGB 中,如果完全不使用 Camera:
-
Pin54 是否可以作为普通 GPIO?
-
Pin55 是否可以作为普通 GPIO?
-
Pin56 是否可以作为普通 GPIO?
-
Pin57 是否可以作为普通 GPIO?
-
Pin58 是否可以作为普通 GPIO?
-
Pin80 是否可以作为普通 GPIO?
-
Pin81 是否可以作为普通 GPIO?
并分别确认:
-
IN
-
OUT
-
IRQ
-
上电默认状态
-
是否需要关闭 Camera 外设
-
QuecPython 是否实际支持
尤其希望确认:
硬件手册定义为 Camera 专用/复用功能,但
machine.Pin又提供 GPIO Mapping,这种情况下以哪个文档为准?
七、SIM2 / USIM2 引脚是否可以复用
硬件手册中:
-
Pin62 = USIM2_CLK
-
Pin63 = USIM2_RST
-
Pin64 = USIM2_DATA
-
Pin65 = USIM2_VDD
目前产品:
-
使用 GNSS
-
使用 USIM1
-
不使用 USIM2
根据硬件设计资料,EC800M-CN 的 USIM2 属于可选资源,并存在与 GNSS / 模拟音频等功能组合相关的限制。
因此希望官方明确确认:
如果 EC800M-CNGB 产品中完全不使用 USIM2:
Pin62~Pin65 是否可以:
-
作为普通 GPIO 使用?
-
通过
machine.Pin使用? -
支持 IN?
-
支持 OUT?
-
支持 IRQ?
-
是否存在硬件上的限制?
-
是否存在 QuecPython API 层面的限制?
如果不能作为 GPIO,也希望明确说明原因。
八、SPI / LCD 引脚是否存在类似问题
目前:
SPI0
Pin30~33 用于 NOR Flash。
LCD
Pin49~53 用于 LCD。
但这些 PIN 在 machine.Pin Mapping 中也存在 GPIO 编号。
因此希望确认统一规则:
对于已经被 SPI / LCD 外设占用的 PIN,GPIO Mapping 是否只是底层 GPIO 编号定义?
以及:
-
外设未初始化时能否作为 GPIO?
-
外设初始化后能否作为 GPIO?
-
是否支持动态切换?
-
是否必须通过专门 API 释放外设资源?
九、Keypad 相关 PIN
当前产品需要 5 个实体按键。
计划使用:
-
Pin83 / GPIO20
-
Pin84 / GPIO15
-
Pin85 / GPIO38
-
Pin86 / GPIO21
-
Pin87 / GPIO22
其中部分 PIN 在硬件定义中同时属于 Keypad 资源。
由于这里只使用普通 GPIO 按键,不使用 QuecPython Keypad 外设,因此希望官方确认:
这些 PIN 是否可以直接通过 machine.Pin:
Pin.IN
并使用 GPIO 输入 / IRQ 实现按键?
尤其希望确认:
-
Pin83
-
Pin84
-
Pin85
-
Pin86
-
Pin87
是否均可以安全作为普通 GPIO 输入。
十、希望官方最终给出一张“EC800M-CNGB GPIO 可用性表”
为了避免后续 PCB 冻结时产生歧义,希望官方能够提供或确认类似下面这样的最终表格:
| 物理Pin | GPIO编号 | 默认/主要功能 | QuecPython普通GPIO | IN | OUT | IRQ | 复用限制 |
|---|---|---|---|---|---|---|---|
| Pin19 | GPIO27 | MAIN_DTR | ? | ? | ? | ? | ? |
| Pin20 | GPIO28 | MAIN_RI | ? | ? | ? | ? | ? |
| Pin21 | GPIO29 | MAIN_DCD | ? | ? | ? | ? | ? |
| Pin22 | GPIO30 | MAIN_CTS | ? | ? | ? | ? | ? |
| Pin23 | GPIO31 | MAIN_RTS | ? | ? | ? | ? | ? |
| Pin54 | GPIO10 | CAM_MCLK | ? | ? | ? | ? | ? |
| Pin55 | GPIO11 | CAM_SPI_DATA0 | ? | ? | ? | ? | ? |
| Pin56 | GPIO12 | CAM_SPI_DATA1 | ? | ? | ? | ? | ? |
| Pin57 | GPIO13 | CAM_I2C_SCL | ? | ? | ? | ? | ? |
| Pin58 | GPIO14 | CAM_I2C_SDA | ? | ? | ? | ? | ? |
| Pin74 | GPIO50 | Keypad | ? | ? | ? | ? | ? |
| Pin75 | GPIO49 | Keypad | ? | ? | ? | ? | ? |
| Pin76 | GPIO17 | GPIO | ? | ? | ? | ? | ? |
| Pin77 | GPIO18 | GPIO | ? | ? | ? | ? | ? |
| Pin80 | GPIO41 | CAM_SPI_CLK | ? | ? | ? | ? | ? |
| Pin81 | GPIO16 | CAM_PWDN | ? | ? | ? | ? | ? |
| Pin83 | GPIO20 | Keypad | ? | ? | ? | ? | ? |
| Pin84 | GPIO15 | Keypad | ? | ? | ? | ? | ? |
| Pin85 | GPIO38 | Keypad | ? | ? | ? | ? | ? |
| Pin86 | GPIO21 | Keypad | ? | ? | ? | ? | ? |
| Pin87 | GPIO22 | Keypad | ? | ? | ? | ? | ? |
另外希望官方特别说明:
“GPIO Mapping”是否等于“QuecPython 可用普通 GPIO”?
这是目前整个设计中最核心的问题。
十一、最终希望确认的结论
我希望最终能够得到以下几类明确结论:
A. 明确可以作为普通 GPIO 的 PIN
请官方直接列出:
EC800M-CNGB + QuecPython 中可以安全作为普通 GPIO 使用的物理 PIN。
并说明支持:
-
IN
-
OUT
-
IRQ
B. 有 GPIO Mapping,但不能作为普通 GPIO 的 PIN
请明确列出:
虽然
machine.Pin文档中存在 GPIO Mapping,但 QuecPython API 实际不允许作为普通 GPIO 使用的 PIN。
C. 只有在对应外设关闭时才能作为 GPIO 的 PIN
请明确列出:
UART / SPI / LCD / Camera / Keypad / USIM 等外设关闭后可以使用 GPIO,但不能动态复用或存在其他限制的 PIN。
D. 完全不能作为 GPIO 的 PIN
请明确列出:
硬件或 QuecPython 层面禁止作为普通 GPIO 使用的 PIN。
十二、最关键的问题
如果只能回答一个问题,希望官方明确回答:
对于 EC800M-CNGB,QuecPython
machine.Pin文档中的 GPIO Mapping,究竟是“底层 GPIO 编号映射表”,还是“实际可以通过machine.PinAPI 使用的普通 GPIO 资源表”?如果两者不同,请官方给出 EC800M-CNGB 的最终普通 GPIO 可用表,以及 UART / Camera / Keypad / USIM / SPI / LCD 等复用限制。
感谢。
