0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式加油站 来源:嵌入式加油站 2023-10-30 09:37 次阅读


前言
【入坑】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电路连接原理图,默认是网口功能,用网口功能时就不能用串口功能。

905da5a0-7566-11ee-939d-92fbcf53809c.png

9085cf26-7566-11ee-939d-92fbcf53809c.png

DTS文件

首先确保系统中启动/dev/ttyS2,先查看修改dts文件。

1)确保 ./target/linux/ramips/dts/mt7628an.dtsi中有如下代码

  uart2: uart2@e00 {


                        compatible = "ns16550a";






                        reg = <0xe00 0x100>;


                        reg-shift = <2>;


                        reg-io-width = <4>;


                        no-loopback-test;


                        clock-frequency = <40000000>;


                        resets = <&rstctrl 20>;


                        reset-names = "uart2";


                        interrupt-parent = <&intc>;






                        interrupts = <22>;


                        pinctrl-names = "default";


                        pinctrl-0 = <&uart2_pins>;


                };

复制代码


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";


};

90a29fd4-7566-11ee-939d-92fbcf53809c.png
出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

90c694d4-7566-11ee-939d-92fbcf53809c.png


MT7628/7688串口2 UART2寄存器配置

MT7688/7628分为IoT Device Mode和IoT Gateway Mode,即单网口模式和五网口模式。如要使用UART2,则必须使用单网口模式,需要配置的寄存器如下:
90d852a0-7566-11ee-939d-92fbcf53809c.png

其中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 |= 0x0f<<17;

__raw_writel(cfg, sysc + 0x3c);

复制代码

编译openwrt源码,请参看:【Openwrt】开发环境搭建 编译openwrt源码http://bbs.sunsili.com/thread-175555-1-1.html

2)通过/dev/mem内存映射方式


编译openwrt时,先开启/dev/mem支持,make menuconfig

->Global build settings
->Kernel 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 < 2)


        {


                set_7628_work_mode(wrkMd);


        }


        else


        {


                if(!strcmp(argv[1], "--iot-mode"))


                {


                        printf("Set iot_dev_mode

");


                        set_7628_work_mode(IOT_DEV_MODE);


                }


                else if(!strcmp(argv[1], "--gateway-mode"))


                {


                        printf("Set gateway mode

");


                        set_7628_work_mode(IOT_GATEWAY_MODE);


                }


                else


                {


                        printf("Usage: usemode --iot-mode | --gateay-mode

");


                }


        }






        return 0;


}


保存编译、下载到开发板
具体操作请参阅:
【openwrt应用开发】openwrt交叉编译自己的应用程序入门

在开发板运行

./usemode --iot-mode


Set iot_dev_mode

设置为iot-dev-mode,如果没执行权限,需添加执行权限

chmod +x usemode

查看串口2配置

stty -F /dev/ttyS2


speed 9600 baud; line = 0;


intr = ; quit = ; erase = ; kill = ; eof = ; susp = ; rprnt = ; werase = ; lnext = ; flush = ; min = 1; time = 0;


-brkint -icrnl -imaxbel


-opost


-isig -icanon -iexten -echo -echoe


接收数据

cat /dev/ttyS2&

PC连接usb串口线,打开串口调试助手

发送数据

echo -e   "hello ttys2 " > /dev/ttyS2

90eea992-7566-11ee-939d-92fbcf53809c.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 原理图
    +关注

    关注

    1293

    文章

    6305

    浏览量

    232733
  • 串口
    +关注

    关注

    14

    文章

    1542

    浏览量

    76137
  • OpenWrt
    +关注

    关注

    10

    文章

    127

    浏览量

    39256
  • UART2
    +关注

    关注

    0

    文章

    6

    浏览量

    2331

原文标题:【openwrt】MT7628/7688 openwrt下启用串口2 UART2入坑指南

文章出处:【微信号:嵌入式加油站,微信公众号:嵌入式加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【WRTnode2R试用体验】MT7688串口1的使用

    `Mt7688在WRTnode2R上引出了2串口即图中下部的UART1,平时我们一直使用的是UART
    发表于 10-18 15:00

    【WRTnode2R试用体验】初识WRTnode2R

    。root@openwrt:/#cat /proc/cpuinfo可以看到MT7628AN的字样。推测MT7628AN和板卡实际使用的MT7688仅有外设上的区别。root@
    发表于 10-21 12:24

    联发科MT7628MT7688数据手册和编程手册硬件原理图

    联发科MT7628MT7688数据手册和编程手册硬件原理图
    发表于 06-06 10:41

    MT7628开发板硬件篇

    接口(192K/24bits)、IIC 通讯接 口、PWM、SPI master/slave。 (13)丰富的 GPIO。资源下载MT7628开发板openwrt入门教程v1.4.1载SYQ-
    发表于 08-18 09:16

    MT7628处理器是什么

    MT7628处理器:MT7628nn/mt7628an 系列产品是新一代2T2R 802.11n Wi-Fi AP / 路由器 (系统单芯片)。 M
    发表于 07-22 06:19

    mt7628处理器

    mt7628处理器:MT7628nn/mt7628an 系列产品是新一代2T2R 802.11n Wi-Fi AP / 路由器 (系统单芯片)。 M
    发表于 07-30 06:23

    MT7628处理器有哪些特点呢

    什么是MT7628处理器呢?MT7628处理器有哪些特点呢?
    发表于 11-09 06:13

    MT7628支持哪几种操作模式呢

    ,SD-XC, I2S/PCM和多个低速IOs在一个SOC。MT7628支持两种操作模式——物联网网关和物联网设备模式。高性能的USB 2.0允许MT7628为无线IP摄像机添加3G/4GLTE调制解调器支持或H.264 ISP
    发表于 12-20 06:16

    mt7628/mt7688 apcli0 中继调试记录

    mt7628option type mt7628option vendor ralinkoption band 2.4Goption channel 11option autoch 2
    发表于 08-25 17:46

    浅析MT7628/7688 SDK编译中的以及增加wifi驱动

    lzma版本错误,再次感谢manfeel!进入source/vendors/Ralink/MT7628,查看Makefile发现这个该死的Makefile调用的居然是系统默认的lzma文件
    发表于 08-26 17:10

    如何在S32G2启用UART2

    亲爱的,现在我们使用的是 NXP S32G274 平台。BSP 基于 BSP34 版本。如何在 BSP34 中启用 UART2?目前在内核DTS中添加了一些配置信息(如下),但是没有作用(无法读写
    发表于 04-03 09:19

    MT7688/MT7628嵌入式无线AP/路由器/中继/网桥/CPE核心模块选型参考

    ;有1Wan+4Lan、USB、Uart、GPIO接口!    型号四:TT-AP2S2TR7628-D60   这是和TT-AP2S1TR7688-D60硬件完全兼容一致,仅仅是采用MT76
    的头像 发表于 08-27 21:01 9843次阅读

    MT7628系列嵌入式核心模块选型参考

    电压、天线连接方式等,以下是MT7628设计时市场认可的模块型号,分享给大家,便于集成时综合评估后选型!型号一:TT-AP2S2TR7628-LGA48      这是
    的头像 发表于 11-14 13:53 6646次阅读
    <b class='flag-5'>MT7628</b>系列嵌入式核心模块选型参考

    MT7628 SoC芯片的数据手册免费下载

    MT7628芯片路由器包括802.11n MAC和基带、2.4 GHz无线电和FEM、580 MHz MIPS 24K CPU核心、5端口10/100快速以太网交换机。MT7628包括从单个芯片构建
    发表于 03-03 08:00 76次下载
    <b class='flag-5'>MT7628</b> SoC芯片的数据手册免费下载

    MT7628及外围原理图详解

    MT7628及外围原理图详解
    发表于 10-08 12:03 91次下载