当前位置: 首页 > article >正文

Linux中QT应用IO状态设置失效问题

问题:在进入freeze休眠前需要设置特定IO关闭电源灯操作,唤醒后需要将特定IO恢复原来正常工作状态,此时出现偶然性(概率很低)的IO控制失效问题;【平台:君正X1600HN】

一、问题点分析

1、电路

  • GPIO电流驱动能力排查

2、检查 GPIO 是否被其他外设复用

排查方法:

  • 检查设备树
  • 尝试禁用其他外设驱动,排除干扰

3、驱动设置问题

  • 查看设备树的对应IO配置是否设置正确

4、IO口竞争

  • 中断干扰
  • 系统任务调度延时(采用实时性更好的驱动方法,如gpio_set_value)

二、解决思路

通过建立log日志的方式,把对应IO口时钟配置寄存器、复用功能寄存器、方向寄存器、状态寄存器这几个值存到一个文件中,然后等出现异常时候,查看文件里面寄存器的变化
① 进入休眠前记录这几个数据
② 唤醒后记录这几个数据

正常的IO状态

GPIO功能正常工作状态睡眠状态唤醒状态
PC25CAN使能引脚010
PD00屏幕电源控制101

读取IO寄存器

【PC端口基地址:0x10010200】
【PD端口基地址:0x10010300】

读取寄存器名称偏移地址PC实际地址PD实际地址功能
PORT PIN Level Registers0x000x100102000x10010300读取当前电平(0/1)
PORT PULL-UP/DOWN State Register0x800x100102800x10010380查看IO口上下拉使能是否被改变
PORT Interrupt Registers0x100x100102100x10010310查看是否配置中断
PORT Mask Registers0x200x100102200x10010320/
PORT PAT1/Direction Registers0x300x100102300x10010330/
PORT PAT0/Data Registers0x400x100102400x10010340/

由以上寄存器可以把对应IO口的配置、复用功能、方向、当前状态读出来

// 伪代码
PC25_Register1_Value = volatile $(devmem 0x10010200) >> 25 & 0x00000001
... ... 
PD00_Register1_Value = volatile $(devmem 0x10010300)  & 0x00000001
... ...

三、最终结果:

1、电路排查没问题
2、从寄存器读出结果看,无复用情况(没配置重复)
3、驱动设置正确
4、从Log中发现,当应用设置到对应IO状态时候,读回寄存器值,发现;

四、解决方法:

两种方式:
① 在内核里面直接控制freeze休眠和唤醒对应IO状态(suspend.c文件); Or
② 使用字符设备驱动方式进行驱动,再转给QT控制;


http://www.kler.cn/a/454732.html

相关文章:

  • 无人零售 4G 工业无线路由器赋能自助贩卖机高效运营
  • 《机器学习》——利用OpenCV库中的KNN算法进行图像识别
  • js版本之ES6特性简述【Proxy、Reflect、Iterator、Generator】(五)
  • Goland 安装与使用
  • ESP-NETIF L2 TAP 接口-物联网嵌入式开发应用
  • RK3588在Android13/14如何查看GPU,NPU,DDR,RGA数据
  • 论文阅读:Multi-view Document Clustering with Joint Contrastive Learning
  • PostgreSQL的一主一从集群搭建部署 (两同步)
  • 【图像处理lec10】图像压缩
  • nginx(openresty) lua 解决对接其他平台,响应文件中地址跨域问题
  • 集成方案 | Docusign + 蓝凌 EKP,打造一站式合同管理平台,实现无缝协作!
  • 双指针——查找总价格为目标值的两个商品
  • SQL进阶技巧:如何分析双重职务问题?
  • xwd-ant组件库笔记
  • 气相色谱-质谱联用分析方法中的常用部件,分流平板更换
  • 学一学前沿开发语言之Python
  • Vue3项目中引入TailwindCSS(图文详情)
  • 【分享】Pytorch数据结构:Tensor(张量)及其维度和数据类型
  • 《Transformer:AI 领域的变革力量》
  • 深度解析:电商平台API接口的安全挑战与应对策略
  • 修改网络ip地址方法有哪些?常用的有这四种
  • sod123(封装大一点)和sod323的区别
  • 贪心算法(常见贪心模型)
  • Vue BPMN Modeler流程图
  • 安卓 SystemServer 启动流程
  • 24. 解密犯罪时间