A7+linux4.14内核SPI 总线通讯异常问题分析

news2025/1/15 13:28:13

I.问题现象、

   2023年1月18日,A7核心板 升级内核版本时,发现SPI总线无法跟wk2168通讯,打印信息如下:

nts_io_init in==
gpmi-nand 1806000.gpmi-nand: mode:4 ,failed in set feature.
[bus:0~select:0]wk2xxx_probe() GENA = 0xFF
register spi return v = :0

II.问题分析

一、检查正常的SPI波形如下:
1:CLK 2:MOSI 数据为 01000000 3:MISO 数据 30 4:CS
在这里插入图片描述
4:RST
在这里插入图片描述
二、异常的SPI波形如下:
4:CS
在这里插入图片描述
4:RST
在这里插入图片描述
发现MISO波形有差异:
抓一个完整的CS波形:发现问题点:CLK信号多一个下降沿:
在这里插入图片描述
正常的SPI波形如下:
在这里插入图片描述
再此基础上进行数据解析: MISO 1XX00000
在这里插入图片描述
在这里插入图片描述
解决措施:
因CLK只有第一次是从高到底再CS之后,因此probe时多读两次就OK。
后续:
测试扩展串口时,不通过。跟踪数据发现:2168打印信息 RX前9个字节变成了0。
0x1—0x10----0x70----0x0----0x0----0x4----0xdb----0xa----
0x1----0x3----0x12----0x0----0x65----0x0----0xf3----0x32----0x34----0x30----0x47----0x53----0x32—0x31----0x31----0x30----0x30----0x38----0x34----0x38----0x36----0xcf----0x43----
0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x1d----0x71----0x0----0x0----0x8----0xd4----0x8----0xd4----0x5----0xe2----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x0----0x1----0x0----0x0----0x0----0x0----0x0----0x0—0x0----0x0----0x0----0x0----0x13----0x8a----0x0----0x0----0x65----0x8b----

串口跟踪的打印信息如下:
2023-02-01 14:48:57_351【Read :25】:01 10 70 00 00 04 08 DE A8 0E 30 02 01 07 E7 FF 78 01 10 70 00 00 04 DB 0A
2023-02-01 14:48:57_530【Read :31】:01 03 A0 2C 00 09 66 05 01 03 12 00 65 00 F3 32 34 30 47 53 32 31 31 30 30 38 34 38 36 CF 43
2023-02-01 14:48:57_779【Read :73】:01 03 00 00 00 1E C5 C2 01 03 3C 00 00 00 00 58 54 1D 71 00 00 08 D4 08 D4 05 E2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 13 8A 00 00 65 8B
主控SPI读出数据也是从第三帧开始前9个字节变成0。
在这里插入图片描述
进一步进行抓包。抓2168 uart接口波形:
1:TX 2:EN 3:RX 由图可知,TX,RX,EN波形正常可识别。前四个字节为01 03 3C 00。
在这里插入图片描述
修改读FIFO模式为读Fdat模式,故障消失。
在这里插入图片描述
进一步分析:
更换4.1.15zImage,确保硬件OK。经确认 4.1.15 可正常读写。问题应该出再第一次下拉的 CLK上。检查一下 是否可以调整CS。

改用模拟SPI,工作正常。设备调整如下:
spi {
compatible = “spi-gpio”;
#address-cells = <0x1>;
// #size-cells = <0x1>;
ranges;

	gpio-sck = <&gpio4 25 0>;
	gpio-miso = <&gpio4 28 0>;
	gpio-mosi = <&gpio4 27 0>;
	cs-gpios = <&gpio4 26 0>;
	num-chipselects = <1>;

	/* clients */
	
	wk2166@0{
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "wk2xxxspi";
	spi-max-frequency = <10000000>;
	reg = <0>;
	irq-gpio = <&gpio5 3 GPIO_ACTIVE_LOW>;
	rst-gpio = <&gpio5 4 GPIO_ACTIVE_LOW>;
	};
};

抓波形如下: 第一个波形正常应答。
在这里插入图片描述
此时 CLK最大抓到500K。
远达不到10M这么大。
实际通讯效果顺序杂乱:
正常的一发一收:
在这里插入图片描述
模拟SPI 顺序杂乱:
在这里插入图片描述

Spi-imx 更换成4.1.15 驱动波形加载无改善。
驱动加载成功后,给2168拉RST,无效果。

有效的措施:
1、IO初始化为低(集成SPI怎么改?)
2、采用模拟SPI。
3、2168读FIFO改为读FDAT。
综上,先按3修改继续测试。后续再考虑措施1。

1尝试:
A、修改IO口:设备树增加模拟SCK初始化,无效。还原设备树
B、设备树模拟初始化,关闭集成。有效,打印OK。还原设备树
设备树集成初始化:如下,无效。还原设备树
在这里插入图片描述
D、移植4.1.15 spi-imx.c 无效。还原

3、检查21xx RST信号下图4.驱动加载完成后,发过一个RST信号。后续读取数据错误 跟第一个CLK错误的边沿已经没有关系了。
在这里插入图片描述
解决措施:
1、驱动加载阶段多读两次,读正确为止。
2、
采用调整读FIFO模式为 读FDAT模式:条件编译1 改为0。其他未调整。

在这里插入图片描述
(实际测试 FDAT模式 性能较低,存在扩展串口丢包问题,还需继续解决)2.17.2023
继续尝试:
1、采用集成CS。 要改硬件,暂不调整。
2、更新新版本2168驱动。
检查新版本驱动 读取FIFO代码完全一致。尚未调整。
3、降低SPI波特率看看:降低到5M,修改dtb文件
降低到5M,1M 读取FIFO均无改善。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
4、抓包分析丢包情况:实际发现被统计丢包的,实际应答是正常的。
在这里插入图片描述
查看丢包程序,逻辑是发送没有应答就判定为丢包,实际SPI通讯出错可能性大。
对策:
1、发送改为FIFO,接收采用FDAT。
测试丢包问题解决。

III.解决措施

1、永久措施:
Wk2xxx 驱动 probe时 重复三次,避免一次错误导致驱动无法加载的情况。

2、wk2xxx 发送采用FIFO寄存器,接收读FDAT寄存器。
经测试通讯稳定。

3、更新最新的2168驱动(待更新)

IV.总结建议

SPI 总线波形排查时 需抓一个完整的CS段,关注CLK以及 MISO,MOSI波形。

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

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

相关文章

【动态规划】简单多状态dp问题(2)买卖股票问题

买卖股票问题 文章目录 【动态规划】简单多状态dp问题&#xff08;2&#xff09;买卖股票问题1. 最佳买卖股票时机含冷冻期&#xff08;买卖股票Ⅰ&#xff09;1.1 题目解析1.2 算法原理1.2.1 状态表示1.2.2 状态机1.2.3 状态转移方程1.2.4 初始化1.2.5 填表顺序1.2.6 返回值 1…

26.利用概率神经网络分类 预测基于PNN的变压器故障诊断(附matlab程序)

1.简述 学习目标&#xff1a; 概率神经网络分类预测 基于PNN的变压器故障诊断 概率神经网络是由Specht博士在1989年首先提出&#xff0c; 是一种与统计信号处理的许多概念有着紧密联系的并行算法。它实质上是一个分类器&#xff0c;根据概率密度函数的无参估计进行贝叶斯决策…

VanillaNet实战:使用VanillaNet实现图像分类(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整算法设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试热力图可视化展示…

【掌握Spring事务管理】深入理解事务传播机制的秘密

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1.Spring 中事务的实现方式 1.1 Spring 编程式…

第八十天学习记录:计算机硬件技术基础:80486微处理器的指令系统

80486微处理器的寻址方式 要使微处理器能够完成指令规定的操作&#xff0c;则指令中须包含2种信息&#xff0c;一是执行什么操作&#xff1b;二是该操作所涉及的数据在哪里&#xff1b;三是结果存于何处&#xff0c;故指令通常操作由操作码字段和操作数字组成&#xff0c;其书…

chatgpt赋能python:Python的抹零功能介绍及使用方法

Python的抹零功能介绍及使用方法 Python是一种广泛使用的编程语言&#xff0c;而其抹零功能是在进行浮点数操作时非常有用的。在本文中&#xff0c;我们将介绍python中抹零的概念、使用方法以及注意事项&#xff0c;以帮助大家更好地使用python中的抹零功能。 什么是抹零&…

【MarkDown】CSDN Markdown之时间轴图timeline详解

文章目录 时间轴图一个关于时间轴图的例子语法分组长时间段或事件文本换行时间段和事件文本样式自定义颜色方案主题基础主题森林主题黑色主题默认主题中性主题 与库或网站集成 时间轴图 时间轴图&#xff1a;现在这是一个实验性的图表。语法和属性可能会在未来版本中更改。除了…

渣土车未苫盖识别系统 yolov8

渣土车未苫盖识别系统通过yolov8python&#xff0c;渣土车未苫盖识别系统对经过的渣土车进行实时监测&#xff0c;当检测到有渣土车未能及时苫盖时&#xff0c;将自动发出警报提示现场管理人员及时采取措施。Yolo模型采用预定义预测区域的方法来完成目标检测&#xff0c;具体而…

chatgpt赋能python:Python抽人代码:如何优化你的抽奖过程?

Python抽人代码&#xff1a;如何优化你的抽奖过程&#xff1f; 简介 抽奖是在网站上进行的一项非常常见的活动。随着技术的发展&#xff0c;抽奖活动的方式也越来越多样化。在这些活动中&#xff0c;人们喜欢使用抽人软件或代码来提高效率并确保随机性。这在Python中是相当简…

chatgpt赋能python:Python查找第二大的数——从入门到实战

Python查找第二大的数——从入门到实战 Python是一门非常强大的编程语言&#xff0c;不仅支持基本的编程技巧&#xff0c;也支持各种复杂的算法和数据结构。本篇文章将介绍如何通过Python编写一个程序&#xff0c;来实现查找数组中第二大的数。 环境准备 想要运行这个程序&a…

SQL 函数:concat函数、concat_ws()函数、group_concat()

SQL 函数&#xff1a;concat函数、concat_ws()函数、group_concat()函数(转载) concat()函数 功能&#xff1a;将多个字符串连接成一个字符串。 语法&#xff1a;concat(str1, str2,…) 返回结果为连接参数产生的字符串&#xff0c;如果有任何一个参数为null&#xff0c;则返…

java - 报错解决集合

ssm-java学习笔记 java.lang.NoSuchMethodException: org.cjh.bean.Dept.<init>()Invalid bound statement (not found)错误解决方法动态sql if java.lang.IndexOutOfBoundsException: Index: 5, Size: 5Failed to determine a suitable driver classjava.sql.SQLExcepti…

第十二章 sys模块

1. sys模块介绍 什么是Python 解释器 当编写Python 代码时&#xff0c;通常都会得到一个包含Python 代码的以.py 为扩展名的文件。要运行编写的代码&#xff0c;就需要使用Python 解释器去执行.py 文件。因此&#xff0c;Python 解释器就是用来执行Python 代码的一种工具。常…

Windows下Nacos的配置与使用

一、什么是 Nacos 以下引用来自 nacos.io Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用…

19使用MATLAB中的BP神经网络来做字母识别

1.简述 学习目标&#xff1a; 学习BP神经网络字母识别 字符识别应用非常广泛&#xff0c;比如车辆牌照自动识别和手写识别等。我们采用BP网络对26个英文字母进行识别&#xff0c;首先将26个字母中每一个字母都通过75的方格进行数字化处理&#xff0c;并用一个向量表示&#x…

中间件 -zookeeper

三连支持 一起鼓励 一起进步 zookeeper 文章目录 一、概述1.Leader 角色2.Follower 角色3.数据同步4. 2PC提交5. Observer 角色6. leader 选举7. 集群组成6. 惊群效应 二、Curator三、应用场景总结 一、概述 首先&#xff0c;在分布式架构中&#xff0c;任何的节点都不能以单点…

支持记录和审计上传/下载的文件内容,支持控制用户连接资产的方式,JumpServer堡垒机v3.4.0发布

2023年6月19日&#xff0c;JumpServer开源堡垒机正式发布v3.4.0版本。在这一版本中&#xff0c;JumpServer新增支持多种资源选择策略&#xff0c;包括用户登录、命令过滤、资产登录和连接方式&#xff1b;支持记录和审计上传/下载的文件内容&#xff0c;进一步提升系统的安全性…

linux(线程同步和互斥)

目录&#xff1a; 1.为什么需要同步和互斥 2.明确一些概念 3.实现一个抢票程序 4.理解加锁和解锁是原子的呢&#xff1f;&#xff1f; ------------------------------------------------------------------------------------------------------------------------- 1.为什么…

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议

哈工大计算机网络传输层详解之&#xff1a;流水线机制与滑动窗口协议 在上一节中我们逐步分析了可靠传输协议的设计过程&#xff0c;最后讲到rdt3.0的设计和实现机制。但是rdt3.0为了实现可靠性&#xff0c;牺牲了很大一部分性能&#xff0c;其中最主要的原因就在于停止等待协…

23.ELman神经网络预测数据

1.简述 学习目标&#xff1a;ELman神经网络预测数据 Elman网络介绍 神经网络是一个庞大的体系和概念&#xff0c;根据处理信息的不同方式来区分不同的network。比如根据处理信息结果的传递方向&#xff0c;分前馈型与反馈型。前馈型网络会根据输出数值来调整网络的参数&#xf…