MT7628/7688 openwrt下启用串口2 UART2入坑指南

前言
【入坑】mt7628/7688有3个串口,  uart0,uart1和uart2,  但使用uart2 时碰到一些问题, mt7628/7688的uart2对应的io口 默认是做网口功能,但未配置或开机状态,给mt7628/7688的uart2发送数据,会发现发送,mt7628/7688的uart2就会返回什么。刚开始用mt7628/7688的uart2时,我还以为焊板连锡了,检查板并没有连锡短路。后来又检查电路、查mt7628/7688 的手册、上网查资料,确定uart2电路没有错,是软件末配置好, openwrt源码里也没有相应代码。于是,我们这段历程写下来,让有此问题的小伙伴,少走一些弯路。
mt7628/7688串口简介
mt7628单网口模式下有3个串口,uart0默认为控制台使用,uart1和uart2用作和其他设备通信 。
多网口模式下只有两个串口,uart0默认为控制台使用,uart1用作和其他设备通信。
串口引脚对应关系表:
uart_rxd0        gpio#13
uart_txd0        gpio#12
uart_rxd1        gpio#46
uart_txd1        gpio#45
uart_rxd2        gpio#21
uart_txd2        gpio#20
mt7628/7688串口2 uart2电路连接原理图
mt7628/7688串口2 uart2电路连接原理图,默认是网口功能,用网口功能时就不能用串口功能。
dts文件
首先确保系统中启动/dev/ttys2,先查看修改dts文件。
1)确保 ./target/linux/ramips/dts/mt7628an.dtsi中有如下代码
uart2: uart2@e00 { compatible = ns16550a; reg = ; reg-shift = ; reg-io-width = ; no-loopback-test; clock-frequency = ; resets = ; reset-names = uart2; interrupt-parent = ; interrupts = ; pinctrl-names = default; pinctrl-0 = ; };  
复制代码
2)在 ./target/linux/ramips/dts/mt7628.dts中添加
mt7628芯片里面有很多管脚是复用,这里我们以“spis”功能为例做介绍如何配置js76x8开发板的管脚功能复用。
找到dts文件中的(源码目录下)
./target/linux/ramips/dts/mt7628.dts
spis { ralink,group = spis; ralink,function = pwm_uart2; };......uart2_pins: uart2 { uart2 { ralink,group = uart2; //ralink,function = pwm; ralink,function = uart2;                                };
&uart2 { status = okay;};
出mt7628芯片的spis管脚默认配置为pwm_uart2功能,具体可以配置哪几种功能是在
./build_dir/target-mipsel_24kec+dsp_uclibc-0.9.33.2/linux-ramips_mt7628/linux-3.18.29/arch/mips/ralink/mt7620.c
mt7628/7688串口2 uart2寄存器配置
mt7688/7628分为iot device mode和iot gateway mode,即单网口模式和五网口模式。如要使用uart2,则必须使用单网口模式,需要配置的寄存器如下:
其中ephy_gpio_aio_en设置成digital pad。
1)修改内核源码方式
在./build_dir/target-mipsel_24kc_musl/linux-ramips_mt76x8/linux-4.14.132/arch/mips/ralink/mt7620.c中的prom_soc_init函数中添加
u32 cfg;
cfg = __raw_readl(sysc + 0x3c);
cfg |= 0x0fkernel build options
                ->/dev/mem virtual device support
源码,每次开机时,执行该程序。
#include #include #include #include #include typedef enum{ iot_dev_mode, //单网口模式 iot_gateway_mode //五网口模式}work_mode_7628_t;int set_7628_work_mode(work_mode_7628_t mode){ int ch; int mem_fd = open(/dev/mem, o_rdwr|o_sync); if(mem_fd == -1) { perror(open /dev/mem); return -1; } int size = 0x100; int *addr = (int *)mmap(null, size, prot_read|prot_write, map_shared, mem_fd, 0x10000000); if(addr == map_failed) { perror(mmap); return -1; } if(mode == iot_dev_mode) { *(addr+(0x3c/4)) |= 0x0f<<17; } else { *(addr+(0x3c/4)) &= ~(0x0f<<17); } close(mem_fd); munmap(addr, size); return 0;}int main(int argc, char **argv){ work_mode_7628_t wrkmd = iot_dev_mode; if(argc /dev/ttys2


联发科技与 Imagination 大幅扩展战略伙伴关系
PCB翘曲原因及解决办法 PCB翘曲度的计算公式
CS5366 Typec转HDMI 4k_60Hz方案可外挂HUB实现网口,读卡等功能
教你检测三相电机丨三相电机的检测方法
友恩家族新添一枚开关电源芯片U65123
MT7628/7688 openwrt下启用串口2 UART2入坑指南
什么是物联网攻击面?如何防范物联网安全风险
如何运用超级电容器来提供欠压和断电保护?
展讯与三星合作 芯片供应组数翻番
由中兴事件分析中美关系 是否是个转折点?
工业互联网强调的方法
无锡除尘器废气处理设备—告别粉尘爆炸!
数学的影响和作用可以说是无处不在的
鸿利智汇正积极探索5G浪潮下的智慧路灯
紫光展锐将展示首颗5G芯片 并支持全球第一波5G智能终端的上市
耗尽型JFET在模拟设计中的应用分析
PRBTEK分享知用柔性电流探头CP9000/9000S/9000L/9000LF系列产品说明书
什么是5.1声道
我国RFID市场规模全球第三
针对温度控制过程而设计的FB58