allwinner 全志RS485调试,GPIO状态与万用表测量不同

news2024/11/16 15:30:30

全志RS485调试
思路:UART驱动中已经将485流控功能加进去了,所以我们只需要根据硬件原理图配置一下485脚的GPIO就行了。
硬件原理图:
在这里插入图片描述
将UART3 UART4的RTS脚配置为485流控脚就行, RX和TX不需要配置,在pinctrol已经配置好了。
在这里插入图片描述
设备树修改:

        uart3: uart@05000c00 {
            rs485-en = <&pio PD 16 1 1 1 1>;
            status = "okay";
        };
        uart4: uart@05001000 {
            rs485-en = <&pio PD 20 1 1 1 1>;
            status = "okay";
        };

然后通过串口工具测试发现ok。UART3 UART4就这么简单配置好了。然后UART0卡了我很久,我们来看UART的配置:
在这里插入图片描述
UART0的RTS脚为UART1_RTS,找到这个脚在主控中的PGIO号。
在这里插入图片描述
修改设备树:

		uart0: uart@05000000 {
			uart-supply = <&reg_bldo3>;
			rs485-en = <&pio PG 8 1 1 1 1>;
			status = "okay";

		};

然后诡异的事情就发生了,当我配置完这个脚后,485只能发送不能接受,可是UART0和UART3 UART4的配置都差不多为什么会导致这样的情况呢?接下来就是漫长的debug了。。。。
首先我们用测量PG8的引脚发现为低电平,UART3 UART4的引脚为高电平这就奇怪了。我们去驱动加点打印信息看一下。

A133P:/ $
A133P:/ $ dmesg | grep lijie
[    1.082990] 3 lijie debug gpio_direction_output ok!
[    1.083005] uart uart0:  3 lijie debug sw_uport->rs485_gpio = 200 value = 0
[    1.083018] uart uart0:  x lijie debug sw_uport->rs485_gpio = 200 value = 0
[    1.085674] 3 lijie debug gpio_direction_output ok!
[    1.085687] uart uart3:  3 lijie debug sw_uport->rs485_gpio = 112 value = 0
[    1.085700] uart uart3:  x lijie debug sw_uport->rs485_gpio = 112 value = 0
[    1.086661] 3 lijie debug gpio_direction_output ok!
[    1.086674] uart uart4:  3 lijie debug sw_uport->rs485_gpio = 116 value = 0
[    1.086686] uart uart4:  x lijie debug sw_uport->rs485_gpio = 116 value = 0
A133P:/ $

我们发现驱动将485的gpio调为低电平默认接受状态。
在这里插入图片描述
我们使用串口工具,打开UART0并且发送几条数据,再打开驱动调试信息看看

A133P:/ # dmesg | grep lijie
[    1.091874] 3 lijie debug gpio_direction_output ok!
[    1.091889] uart uart0:  3 lijie debug sw_uport->rs485_gpio = 200 value = 0
[    1.091902] uart uart0:  x lijie debug sw_uport->rs485_gpio = 200 value = 0
[    1.094525] 3 lijie debug gpio_direction_output ok!
[    1.094539] uart uart3:  3 lijie debug sw_uport->rs485_gpio = 112 value = 0
[    1.094551] uart uart3:  x lijie debug sw_uport->rs485_gpio = 112 value = 0
[    1.095534] 3 lijie debug gpio_direction_output ok!
[    1.095547] uart uart4:  3 lijie debug sw_uport->rs485_gpio = 116 value = 0
[    1.095559] uart uart4:  x lijie debug sw_uport->rs485_gpio = 116 value = 0
[   59.966164] 5 lijie debug sw_uport->rs485_gpio = 200 value = 1
[   59.970473] 1 lijie debug sw_uport->rs485_gpio = 200 value = 0
[   60.197280] 5 lijie debug sw_uport->rs485_gpio = 200 value = 1
[   60.201566] 1 lijie debug sw_uport->rs485_gpio = 200 value = 0
[   60.438232] 5 lijie debug sw_uport->rs485_gpio = 200 value = 1
[   60.442523] 1 lijie debug sw_uport->rs485_gpio = 200 value = 0
[   60.685118] 5 lijie debug sw_uport->rs485_gpio = 200 value = 1
[   60.689413] 1 lijie debug sw_uport->rs485_gpio = 200 value = 0

可以发现驱动在数据即将要发送的时候会将485的RTS拉高进入发送模式,当数据发送完毕就会拉低进入接收模式,这个逻辑说明驱动是没有问题的,但是我们用万用表测量发现UART0的485脚一直是高电平状态,根本就没有拉低过。
这就很奇怪,我们再看一下gpio的状态:

A133P:/sys/kernel/debug # cat gpio
gpiochip1: GPIOs 0-319, parent: platform/pio, pio:
 gpio-34  (                    |usbhub_rst          ) out hi
 gpio-38  (                    |touch_gpio_reset    ) out hi
 gpio-39  (                    |touch_gpio_irq      ) in  hi
 gpio-40  (                    |?                   ) in  hi
 gpio-106 (                    |cs-gpios            ) out hi
 gpio-112 (                    |RS485-EN            ) out lo
 gpio-116 (                    |RS485-EN            ) out lo
 gpio-118 (                    |?                   ) in  hi
 gpio-166 (                    |cd                  ) in  hi
 gpio-200 (                    |RS485-EN            ) out lo
 gpio-232 (                    |otg_id              ) in  hi
 gpio-235 (                    |?                   ) out hi
 gpio-236 (                    |phy-rst             ) out hi
 gpio-238 (                    |irq_gpio            ) in  hi
 gpio-240 (                    |mobile_pwr          ) out hi
 gpio-242 (                    |mobile_rst          ) out lo
 gpio-243 (                    |SPK                 ) out lo

gpiochip0: GPIOs 352-383, parent: platform/r_pio, r_pio:
 gpio-354 (                    |bt_rst              ) out lo
 gpio-357 (                    |wifi_bt_pwr         ) out hi
 gpio-360 (                    |usb1-vbus           ) out hi

PG8 = gpio 200 上面显示为485脚输出状态低电平,但是用万用表测试发现是高电平。。。。。这个时候就很无语了。。。。。。。
然后我就想手动拉低确定是不是GPIO号的问题:

mount -t debugfs debug /proc/sys/debug
cd /proc/sys/debug/sunxi_pinctrl
echo PH8 > sunxi_pin  
echo PH6 1 > function
echo PH6 0 > data 

这个是全志手动调试GPIO的方法,输入完上面的命令后,PG8应该为低电平,我们用万用表测试确实是低电平这说明GPIO号没有问题。驱动没有问题,GPIO号没有问题,UART0的485设备树没有问题,这就不知道是什么原因了。。。。。。。。。
后面发现,UART0的RTS脚为UART1_RTS,那UART1呢?

在这里插入图片描述
我们发现UART1 UART2就是普通的串口,然后我们去设备树看看这两个串口的配置信息。

 uart1_pins_a: uart1@0 {
        allwinner,pins = "PG6", "PG7", "PG8", "PG9";
        allwinner,pname = "uart1_tx", "uart1_rx",uart1_rts", "uart1_cts";
         allwinner,function = "uart1";
         allwinner,muxsel = <2>;
         allwinner,drive = <1>;
 };
 
 uart1_pins_b: uart1@1 {
        allwinner,pins = "PG6", "PG7", "PG8", "PG9";
        allwinner,function = "io_disabled";
        allwinner,muxsel = <7>;
        allwinner,drive = <1>;
        allwinner,pull = <1>;
};

看到这里就懂了,pinctrl中配置了UART1的rts和cts脚,但是硬件上面是不需要这两个脚的。
所以我们修改设备树

--- a/arch/arm64/boot/dts/sunxi/sun50iw10p1-pinctrl.dtsi
+++ b/arch/arm64/boot/dts/sunxi/sun50iw10p1-pinctrl.dtsi
@@ -133,9 +133,8 @@
                        };
 
                        uart1_pins_a: uart1@0 {
-                               allwinner,pins = "PG6", "PG7", "PG8", "PG9";
-                               allwinner,pname = "uart1_tx", "uart1_rx",
-                                                 "uart1_rts", "uart1_cts";
+                               allwinner,pins = "PG6", "PG7";
+                               allwinner,pname = "uart1_tx", "uart1_rx";
                                allwinner,function = "uart1";
                                allwinner,muxsel = <2>;
                                allwinner,drive = <1>;
@@ -143,7 +142,7 @@
                        };
 
                        uart1_pins_b: uart1@1 {
-                               allwinner,pins = "PG6", "PG7", "PG8", "PG9";
+                               allwinner,pins = "PG6", "PG7";
                                allwinner,function = "io_disabled";
                                allwinner,muxsel = <7>;
                                allwinner,drive = <1>;

然后重新编译。
在这里插入图片描述
最后UART0就可以正常收到数据了。

总结:
虽然这个485调试花了很多时间,但是学会了很多调试技巧。
在全平台手动拉高拉低,物理手动拉低(镊子短接地)
对485了解更加深刻
对硬件原理图更加得心应手得找到想要的信息了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/814804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

热风梳C22.2 NO.3亚马逊加拿大审核标准

加拿大是目前亚马逊所有站点中&#xff0c;商业规模大、发展势头迅猛的站点之一。亚马逊加拿大站每月吸引近1600万访客。其优势在于在加拿大&#xff0c;目前平台的竞争较小&#xff0c;商家容易出单。既然加拿大站有这么多优势&#xff0c;那产品上架需要有哪些检测认证合规方…

[MAUI 项目实战] 手势控制音乐播放器: 手势交互

原理 定义一个拖拽物&#xff0c;和它拖拽的目标&#xff0c;拖拽物可以理解为一个平底锅&#xff08;pan&#xff09;&#xff0c;拖拽目标是一个坑&#xff08;pit&#xff09;&#xff0c;当拖拽物进入坑时&#xff0c;拖拽物就会被吸附在坑里。可以脑补一下下图&#xff1…

腾讯地图点标记加调用

先看效果 PHP代码 <?phpnamespace kds_addons\edata\controller;use think\addons\Controller; use think\Db;class Maps extends Controller {// 经纬度计算面积function calculate_area($points){$totalArea 0;$numPoints count($points);if ($numPoints > 2) {…

Qt、Qt Creator下载、安装

一、Qt、Qtcreator简介 Qt是一个跨平台应用开发框架。 Qt Creator是一个跨平台的集成开发环境&#xff08;IDE&#xff09;&#xff0c;集成了Qt所提供的功能&#xff0c;可以单独下载使用&#xff0c;也可以结合Qt组合使用。 二、下载 下载地址&#xff1a;https://downloa…

2023 ChinaJoy | 移远通信携手高通,共创数字娱乐新体验

当前&#xff0c; 5G、AI、大数据等智能创新技术正以惊人的速度蔓延至越来越多的领域&#xff0c;从智能家居、智能交通、智能医疗到智能制造&#xff0c;改变了我们的工作和生活方式。 而在数字娱乐领域&#xff0c;智能创新技术也展现出了巨大的潜力。作为全球领先的物联网整…

13.5.5 【Linux】其他相关文件

除了前一小节谈到的 /etc/securetty 会影响到 root 可登陆的安全终端机&#xff0c; /etc/nologin 会影响到一般使用者是否能够登陆的功能之外&#xff0c;我们也知道 PAM 相关的配置文件在 /etc/pam.d &#xff0c;说明文档在 /usr/share/doc/pam-&#xff08;版本&#xff09…

牛客网Verilog刷题——VL47

牛客网Verilog刷题——VL47 题目答案 题目 实现4bit位宽的格雷码计数器。 电路的接口如下图所示&#xff1a; 输入输出描述&#xff1a; 信号类型输入/输出位宽描述clkwireIntput1时钟信号rst_nwireIntput1异步复位信号&#xff0c;低电平有效gray_outregOutput4输出格雷码计数…

管理ceph集群

文章目录 ceph的常用命令查看集群状态查看pg的状态查看mon节点状态查看osd的通用命令查看osd的容量查看osd池写入文件测试查看池的属性查看文件映射过程 添加磁盘删除磁盘 ceph的常用命令 查看集群状态 ceph osd pool application enable pool-name rbd #将池启用rbd功能 ceph…

Java集合框架-List、Set、Map

一、Java集合框架概述&#xff1a; 1.1 Collection接口继承树 JDK提供的集合API位于java.util包内。 Map接口继承树 1.2 Collection接口方法 Collection 接口 Collection 接口是 List、Set 和 Queue 接口的父接口&#xff0c;该接口里定义的方法既可用于操作 Set 集合&#…

Matlab进阶绘图第24期—悬浮柱状图

悬浮柱状图是一种特殊的柱状图。 与常规柱状图相比&#xff0c;悬浮柱状图可以通过悬浮的矩形展示最小值到最大值的范围&#xff08;或其他范围表达&#xff09;&#xff0c;因此在多个领域得到应用。 本文使用自己制作的Floatingbar小工具进行悬浮柱状图的绘制&#xff0c;先…

【Linux】Linux项目自动化构建工具 make/Makefile

目录 1. Makefile 是如何工作的 2. 依赖关系与依赖方法 3. .PHONY 4. Makefile 的特殊符号 写在最后&#xff1a; 1. Makefile 是如何工作的 make 是一个命令。 Makefile 是一个文件&#xff0c;当前目录下的一个文件。 我们先来上手写一个简单的 Makefile 文件&#…

火山引擎AB测试:广告实验深度打通巨量引擎,高效测试广告素材

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近期&#xff0c;火山引擎AB测试DataTester上线了新版的广告AB实验&#xff0c;还推出了与巨量引擎深度打通的能力。用户可以在DataTester中直接进行广告落地页的创…

机器学习:异常检测

问题定义 anomaly&#xff0c;outlier&#xff0c; novelty&#xff0c; exceptions 不同的方法使用不同的名词定义这类问题。 应用 二分类 假如只有正常的数据&#xff0c;而异常的数据的范围非常广的话&#xff08;无法穷举&#xff09;&#xff0c;二分类这些不好做。另外就…

没钱,没人,没IT,如何成功进行数字化转型?

在数字化时代的浪潮下&#xff0c;技术的迅猛发展为企业和个人带来了前所未有的机遇和挑战。然而&#xff0c;传统的软件开发过程通常需要大量的编程工作&#xff0c;对于非技术背景的人士而言&#xff0c;这是一座高不可攀的技术门槛。如何能够快速地实现创新&#xff0c;推动…

YAML+PyYAML笔记 9 | PyYAML源码之dump(),dump_all(),safe_dump(),yaml.YAMLObject

9 | PyYAML源码之emit&#xff0c;dump&#xff0c;safe_dump&#xff0c;yaml.YAMLObject 1 yaml.dump()2 yaml.dump()3 yaml.safe_dump4 yaml.YAMLObject 1 yaml.dump() 源码&#xff1a; 作用&#xff1a; 将Python对象序列化为YAML流。如果stream为None&#xff0c;则返…

无涯教程-jQuery - Tooltip组件函数

小部件工具提示功能可与JqueryUI中的小部件一起使用。Tooltip用于显示提示。 Tooltip - 语法 $( document ).tooltip(); Tooltip - 示例 以下是显示工具提示用法的简单示例- <!doctype html> <html lang"en"><head><meta charset"utf…

【腾讯云 Cloud Studio 实战训练营】在Cloud Studio上使用React实现学生管理系统

一、前言 为了提升办公效率&#xff0c;越来越多的人开始使用云工作站的方法进行“云办公”了&#xff0c;所谓云办公即把传统意义办公场所转移到网络浏览器中&#xff0c;这样做的好处有&#xff1a; 实现真正的移动化办公&#xff0c;不再受设备、时间、地点等的束缚&#…

最近写了10篇Java技术博客【SQL和画图组件】

&#xff08;1&#xff09;Java获取SQL语句中的表名 &#xff08;2&#xff09;Java SQL 解析器实践 &#xff08;3&#xff09;Java SQL 格式化实践 &#xff08;4&#xff09;Java 画图 画图组件jgraphx项目整体介绍&#xff08;一&#xff09; 画图组件jgraphx项目导出…

Java版知识付费 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台免费搭建

提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含&#xff1a;录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署&#xff0c;免费售后&#xff0c;专业技术指导&#xff0c;支持PC、APP、H5、小程序多终端同步&#xff0c;支持二次开发…

VsCode与Idea编辑器更换背景图

目录 VsCode Idea VsCode 需要安装background插件 安装完成后&#xff0c;打开设置&#xff0c;搜索background 然后就可以在json文件进行图片设置&#xff0c;透明度等等 Idea 打开File -> Settings 然后找到Appearance &#xff0c; 往下滑&#xff0c;找到BackGround …