5G模块引脚配置与识别流程

一、相关引脚配置
在软件部分,需要配置如下引脚状态,并检查模块供电是否正常使能,以及使用万用表确认供电情况。如果配置正确,lusb 工具可以检测到该5G模块对应的 PID 和 VID。

硬件连接说明
根据硬件连接,5G模块的 RESET、5G_KEY、AIRPLA_EN 均由 MCU 控制。
相关代码示例(根据实际情况进行配置,此处只是做个别示例)
#include "eh.h"
#include "eh_debug.h"
#include "eh_module.h"
#include "gd32f10x.h"
#include "io-ctrl.h"
#include "gd32f10x_gpio.h"
#include <stdbool.h>
// 信号定义
EH_DEFINE_SIGNAL(signal_io_smi_change);
// 电源控制函数
void io_ctrl_mpu_power_set(bool is_on){
gpio_bit_write(GPIOE, GPIO_PIN_8, is_on ? SET : RESET );
}
void io_ctrl_lte_power_set(bool is_on){
gpio_bit_write(GPIOE, GPIO_PIN_7, is_on ? SET : RESET );
}
void io_ctrl_5g_reset_set(bool is_on){
gpio_bit_write(GPIOE, GPIO_PIN_14, is_on ? SET : RESET );
}
void io_ctrl_airplane_mode_set(bool is_on){
gpio_bit_write(GPIOE, GPIO_PIN_11, is_on ? SET : RESET );
}
void io_ctrl_5g_key_set(bool is_on){
gpio_bit_write(GPIOE, GPIO_PIN_10, is_on ? SET : RESET );
}
// SMI状态检测
extern bool io_ctrl_smi_status(void){
return gpio_input_bit_get(GPIOD, GPIO_PIN_0);
}
// 初始化函数
static __init int io_ctrl_init(void){
rcu_periph_clock_enable(RCU_AF);
rcu_periph_clock_enable(RCU_GPIOE);
rcu_periph_clock_enable(RCU_GPIOD);
gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);
eh_minfofl(IO_CTRL, "io_ctrl_mpu_power_set true");
io_ctrl_mpu_power_set(true);
gpio_init(GPIOD, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
nvic_irq_enable(EXTI0_IRQn, 0U, 2U);
gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOD, GPIO_PIN_SOURCE_0);
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
exti_interrupt_flag_clear(EXTI_0);
gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
eh_minfofl(IO_CTRL, "io_ctrl_lte_power_set true");
io_ctrl_lte_power_set(true);
gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
eh_minfofl(IO_CTRL, "io_ctrl_5g_key_set true");
io_ctrl_5g_key_set(true);
gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
eh_minfofl(IO_CTRL, "io_ctrl_airplane_mode_set true");
io_ctrl_airplane_mode_set(true);
gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13);
gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
eh_minfofl(IO_CTRL, "io_ctrl_5g_reset_set true");
io_ctrl_5g_reset_set(false);
return 0;
}
void io_ctrl_exit(void){
// 退出处理
}
eh_module_level1_export(io_ctrl_init, io_ctrl_exit);

二、查看 PID 与 VID
使用 lusb 等工具确认模块已正常识别,检查 PID 和 VID 是否正确。


三、添加 PID 和 VID
在 MPU 内核代码 drivers/usb/serial/option.c 文件的 option_ids 数组下方,添加 RG255AA 模块的 VID 和 PID:
#define QUECTEL_VENDOR_ID 0x2c7c
#define QUECTEL_PRODUCT_RG255AA 0x600b
四、在内核中启用 USB SERIAL 配置
请确保在内核配置中启用如下选项:
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_WWAN=y
CONFIG_USB_SERIAL_OPTION=y
CONFIG_USB_ACM=y
CONFIG_USB_NET_DRIVERS=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_CDCETHER=y
五、添加 option_ids
在 option_ids 列表内增加 RG255AA 的 PID/VID,以便系统能够识别该 USB 设备为串口设备。
// /kernel/linux-5.15/drivers/usb/serial/option.c
static const struct usb_device_id option_ids[] = {
......
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200A, 0xff, 0, 0) },
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RG255AA, 0xff, 0, 0) },
{ USB_DEVICE_AND_INTERFACE_INFO(AWQUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_AW190, 0xff, 0, 0) },
......
}
六、测试与验证
- 查看日志是否正常

- 检查串口设备是否正常枚举

- 检查5G网卡设备是否生成

- 联网测试


总结:按照上述步骤配置和检查后,可实现5G模块的正常识别与联网功能。如遇问题,建议逐步排查硬件连接、驱动配置及内核日志。