ARM X210开发板的软开关按键问题

2023-05-16

一、X210 开发板的软启动电路详解

在这里插入图片描述
《x210bv3.pdf》


(1) 210 供电需要的电压比较稳定,而外部适配器的输出电压不一定那么稳定,因此板载了一个文稳压器件 MP1482. 这个稳压芯片的作用就是外部适配器电压在一定范围内变化时稳压芯片的输出电压都是 5V。
(2) MP1482芯片有一个EN(Enable)引脚,这个引脚可以让稳压芯片输出或关闭输出。EN 为高电平时有输出电压,EN 引脚为低电平时稳压芯片无输出。
(3) 两个因素可以影响 EN 引脚的电平:第一个是 POWER 按键(SW1),POWER 按键按下时 EN 为高电平,POWER 按键弹起时 EN 为低电平;第二个是 POWER_LOCK(EINT0)引脚,这个引脚为 POWER_LOCK 模式下高电平,则 EN 为高;若这个引脚为 EINT0 模式或者为POWER_LOCK 模式但输出为低电平,则 EN 为低。
(4) 图中还有 EINT1 引脚,这个引脚的作用是用来做中断,提供给 CPU 用来唤醒的。


二、为什么要软启动

(1) 一般的电路设计都是用拨码开关来做电源开关的(打到一侧则接通,打到另一侧则关闭)。这种方式的优点是设计简单,缺点是电路太简单,整个主板要么有电要么没电无法做休眠模式、低功耗模式等。
(2) 软启动电路是比较接近于实际产品的,其他开发板的硬开关其实是简化版的,和实际产品还有差异。


《x210v3s开发板裸机教程.pdf》

市面上绝大多数开发板都是给整个系统直接上电,通过拨码开关实现硬件开关机,这种设计开发板将无法休眠唤醒。x210 开发板独特的软件开关机功能,可实现轻触开关实现软件开关机,休眠唤醒等,让开发板更接近产品。

上述电路图中,EINT0 用于置锁整个开发板的 5V 电源,EINT0 为高时,5V 电源被使能,为低时 5V 电源关闭。在实现休眠唤醒时,配合 EINT1 中断,通过 POWER 键实现中断响应,继而实现休眠唤醒。

EINT0 管脚和 PS_HOLD 管脚复用,当 PS_HOLD_CONTROL 寄存器的第 0 位设置为高时,使 能 PS_HOLD 管 脚 , 这 时 , EINT0 的 相 关 寄 存 器 设 置 将 无 效 , 该 管 脚 将 完 全 由PS_HOLD_CONTROL 寄存器控制。
在这里插入图片描述

我们将 PS_HOLD_CONTROL 的第 8,9 位设置为 1 时,该 IO 口为高,设置为 0 时,为低。
在 tester_powerlock 函数中,经 5 秒延时后,执行如下指令:

writel(S5PV210_PS_HOLD_CONTROL, (readl(S5PV210_PS_HOLD_CONTROL) & ~( 0x00000301 )) | ((0x1<<0) | (0x0<<8) | (0x0<<9)));

即将 PS_HOLD_CONTROL 的第 8,9 位清零,这时,EINT0 管脚被拉低,整个开发板的 5V
电源被关闭,开关板断电关机。

在整个 main 函数中,我们并没有对该寄存器做过任何设置,而上面的寄存器表格显示,在
芯片的初始化状态,PS_HOLD_CONTROL 的第 0 位是 0,即默认为普通 GPIO 口,复位时电平
为 0,那么开发板为什么还能运行起来呢?

在 start.s 中,有如下程序段:

ldr r0, =0xe010e81c
ldr r1, [r0]
orr r1, r1, #0x300
orr r1, r1, #0x1
str r1, [r0]

上面程序将 PS_HOLD_CONTROL 的第 0,8,9 位置高,即将该 IO 设置为 PS_HOLD 的模
式的同时,将 IO 口拉高,实现 5V 电源置锁。如果在 start.s 中去掉上面语句,那么开发板只
能长按住 POWER 键不放,才能维持电平。


三 、开发板供电置锁原理和分析

(1) 软开关在设计时有一个置锁电路,用 EINT0(也就是GPH0_2)引脚来控制的。

(2) EINT0 这个引脚是有复用设计(两个完全不相干的功能挤在同一个引脚上,同时我们只能让这个引脚用于其中一种功能,这就叫复用)的,一个是 GPIO(也就是GPH0_2引脚)、一个是PS_HOLD_CONTROL。(注意:EINT0 功能算是 GPIO 下的一个子功能)。

(3) PS_HOLD 在Section2.4 Power Management章节下的 4.10.5.8 节下。
在这里插入图片描述

(4) PS_HOLD_CONTROL 寄存器(0xE010E81C),共有 3 个位有用。
bit0, 0 表示这个引脚为 GPIO 功能,1表示这个引脚为 PS_HOLD 功能;
bit9,0 表示这个引脚方向为输入,1 表示这个引脚方向为输出。
bit8,0 表示这个引脚输出为低电平,1 表示输出为高电平。

分析:我们要使用软启动置锁,则需要将 bit0、8、9 都置为 1 即可。


四、写代码+实验验证

(1) 要想让开发板和普通的开发板一样,一按下按键程序运行后即可松手不会断电,则只要在程序的开头部分添加代码去置锁开关板即可。

文件名: BL1/start.S

 cat BL1/start.S

/*
 * 文件名:     start.s
 * 描述:       演示重定位(在SRAM内部重定位)
 */

#define WTCON           0xE2700000

#define SVC_STACK       0xd0037d80

.global _start                                  // 把_start链接属性改为外部,这样其他文件就可以看见_start了
_start:
        //第0步:开发板置锁
        ldr r0, =0xe010e81c
        ldr r1, [r0]
        orr r1, r1, #0x300
        orr r1, r1, #0x1
        str r1, [r0]

        // 第1步:关看门狗(向WTCON的bit5写入0即可)
        ldr r0, =WTCON
        ldr r1, =0x0
        str r1, [r0]

        // 第2步:设置SVC栈
        ldr sp, =SVC_STACK

        // 第3步:开/关icache
        mrc p15,0,r0,c1,c0,0;                   // 读出cp15的c1到r0中
        //bic r0, r0, #(1<<12)                  // bit12 置0  关icache
        orr r0, r0, #(1<<12)                    // bit12 置1  开icache
        mcr p15,0,r0,c1,c0,0;

        // 第4步:初始化ddr
        bl sdram_asm_init

        // 第5步:重定位,从SD卡第45扇区开始,复制32个扇区内容到DDR的 0x23E0,0000
        bl copy_bl2_2_ddr


// 汇编最后的这个死循环不能丢
        b .

(2) 置锁代码的方法是:给 PS_HOLD_CONTROL 寄存器的 bit0、8、9 均写入 1 即可。

(3) 注意:此时开发板已经置锁,POWER 按键已经失效,关机时需要按下复位按键。


源自朱有鹏老师.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM X210开发板的软开关按键问题 的相关文章

  • SDN(一) 用OpenWRT将路由器刷成openflow交换机

    1 引言 积跬步以至千里 xff0c 积怠情以至深渊 xff0c 我要做一个踏实的ABCer 没想到还是正式步入了SDN这条康庄大道上 一切还需从初识Mininet WIFI说起 xff0c 以为SDN如仿真层面那般 xff0c 一个模块对
  • 树莓派(二) 树莓派开启VNC远程连接服务

    1 启用树莓派 VNC 服务 在树莓派命令行终端执行如下命令 xff1a sudo raspi span class token operator span config 出现如下界面 xff1a 依次操作 xff1a Interfacin
  • 自己操作SMT贴片过程 BGA QFN封装

    提前准备 xff1a 1 钢网 xff08 如果有bga 尽量选择0 01mm的厚度吧 xff09 2 锡膏 xff08 如果过期了 xff0c 可以找个空板 xff0c 加点锡膏过一次回流焊测一下导通性 xff09 3 固定台 xff08
  • Linux系统Ubuntu终端用命令编辑一文件并保存

    1 首先进入到该文件所在的目录下 xff0c 比如我要找learn test1 file txt这个文件 xff1a ls表示查看该目录下的所有文件 2 查看该文件的内容 xff0c 使用命令cat file txt xff0c 如下可看到
  • 异常与中断

    异常比中断的优先级高 xff0c 中断可以屏蔽 xff0c 但异常是一定要去处理的 1 undefined instruction CPU遇到了不认识的指令 xff0c 则会进入未定义指令异常处理函数 xff0c 因为CPU不认识该指令 x
  • 大学老师告诉我:20年内程序员会被取代,未来不需要程序员...

    今天收到一个同学的邮件 xff0c 他告诉我 xff0c 他们的大学计算机老师告诉他 xff0c 以后机器人可以自动生成代码 xff0c 估计20年 xff0c 程序员就会被取代 所以他现在感觉很苦恼 xff0c 既然会被淘汰 xff0c
  • MySQL 主从复制

    新建主服务器容器实例3307 span class token function docker span run p span class token number 3307 span 3306 name mysql master span
  • 盘点strlen()、sizeof()、length()、size()的区别

    目录 序言 1 总览 2 用法 2 1 sizeof 2 2 strlen 3 length 和size 序言 项目中经常用到这些用于计算大小的函数 或运算符 xff0c 网上也有许多关于其间区别的文章介绍 xff0c 在此按自己的思路整理
  • Android:知识体系结构

    刚开始接触android xff0c 学习之初 xff0c 各种迷茫阿 xff0c 网上看到了这个知识结构体系的图 xff0c 觉得很有用 xff0c 在此备份一下 xff0c 或许以后的某一天我成了android大神 xff08 PS x
  • android studio导入一个已存在的项目

    在使用android studio导入一个已经存在的项目之前 xff08 xff01 xff01 xff01 记住是导入之前 xff09 xff0c 需要做三件事 xff1a 1 xff0c 查看项目的gradle wrapper grad
  • 从内部类中访问本地变量temp; 需要被声明为最终类型

    class Outer 定义外部类 private String info 61 34 hello world 34 定义外部类的私有属性 public void fun final int temp 定义外部类的方法 class Inne
  • Android学习笔记 ---- 四大组件之 Activity

    1 Activity的概念与Activity的生命周期图 xff1a Activity是一个应用程序的组件 xff0c 他在屏幕上提供了一个区域 xff0c 允许用户在上面做一些交互性的操作 xff0c 比如打电话 xff0c 照相 xff
  • Docker ubuntn 使用apt-get update报错

    在docker 容器中执行apt get update有时候会报错 xff0c 当然造成错误的原因有很多情况 xff0c 具体情况具体分析 xff0c APT Hash sum mismatch错误的常见解决方法总结这篇博客写的不错 xff
  • npm安装报错 rollbackFailedOptional verb npm-session 解决办法

    该问题一般情况是因为代理问题 xff0c npm代理和git代理都要设置 首先确认网络是否需要设置代理 如果是公司网络需要设置代理 xff0c 则设置npm代理和git代理 1 设置npm代理 1npm config set proxy a
  • Docker 安装C#编译环境

    Docker 是一个开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中 xff0c 然后发布到任何流行的 Linux或Windows操作系统的机器上 xff0c 也可以实现虚拟化 本文主要介绍Docke
  • 关于句柄中带命名空间对实际程序运行中的影响

    ROS头文件 include lt ros ros h gt 自定义msg产生的头文件 include lt topic demo gps h gt int main int argc char argv 用于解析ROS参数 xff0c 第
  • 部署Redis集群

    部署Redis集群 span class token comment 创建网卡 span span class token function docker span network create redis subnet span clas
  • ROS编译出现generate_messages() must be called after add_message_files()错误

    新人小白 xff0c 刚刚开始学ROS 编译出现这个错误 xff0c 搞了好久也没找到这个问题 xff0c 后来偶然发现了问题所在 CMake Error at opt ros kinetic share genmsg cmake genm
  • SLAM因子图构建笔记

    因子图简介 最近在读了Joan Sola所写的Course on SLAM中有关因子图部分的介绍后 xff0c 发现其中有关于因子图构建的思路觉得很有意思 xff0c 因此在这里记录一下 DBN网络 首先简单地介绍一下如何将一个SLAM问题
  • xmanager关闭linux命令,Linux下xmanager passive功能无法使用的解决技巧

    xmanager Passive可以在仅登陆ssh字符界面的情况下传输图形 xff0c 为很多开发者所喜爱 有一用户因需要调整了防火墙 xff0c xmanger passive功能便无法正常使用了 xff0c 我们该如何处理这个问题呢 到

随机推荐

  • liteos内核驱动和linux,移植RTOS必备基础知识

    1 基础知识 移植内核对技术的要求比较高 比较细 1 1 单片机相关的知识 栈的作用 加载地址 链接地址 重定位 几个简单的硬件知识 串口 定时器 中断的概念 1 2 Linux操作相关的知识 Linux常用命令 简单的脚本 xff1a 脚
  • matlab subs什么意思,什么是matlab subs函数?

    matlab中subs 是符号计算函数 xff0c 详细用法可以在Matlab的Command Windows输入 xff1a help subs subs 函数表示将符号表达式中的某些符号变量替换为指定的新的变量 xff0c 常用调用方式
  • 虚拟机linux装无线网卡驱动,linux无线网卡驱动安装

    环境 在笔记本里的虚拟机10 0版本 xff0c centos 6 5 无线网卡fast fw300um 第一步要查看芯片 lsusb 当你得到芯片之后接下来查看内核 xff0c 如果内核已经有芯片模块就不用再装了 xff0c 如果不支持的
  • 使用Altium Designer 20绘制双层板以及四层板

    直接入正题 1 按照正常的绘制双层板的方式新建工程文件 xff0c 加入原理图和PCB文件 xff08 如果会绘制双层板请直接看第二步 xff09 xff08 1 xff09 新建工程文件 xff08 2 xff09 选择工程类型 xff0
  • 1.1 Ubuntu18.04 ROS tcp/ip Server通信实现

    Ubuntu18 04 ROS tcp ip Server通信实现 此小节介绍tcp ip Server收发数据 xff0c 并将截取到底信息通过话题方式发布出去 下一节介绍Ubuntu18 04 ROS tcp ip client通信实现
  • 1.2 Ubuntu18.04 ROS tcp/ip Client通信实现

    Ubuntu18 04 ROS tcp ip Client通信实现 此小节介绍tcp ip Client收发数据 xff0c 测试平台为为Ubuntu18 04 与Windows系统上的网络调试助手进行通信测试 xff0c 调试助手采用的有
  • 使用Gazebo对PX4飞控进行SITL仿真

    在仿真之前 xff0c 首先需要搞清楚每个模块所代表的含义 xff0c 在这个操作中扮演什么角色 Gazebo xff1a 可以理解成对我们实际飞行物理环境的一个仿真 QGC xff1a 地面站 xff0c 不用多说 Firmware xf
  • GitLab统计代码量

    gitlab官方文档 xff1a https docs gitlab com ee api index html 1 生成密钥 登录gitlab xff0c 编辑个人资料 xff0c 设置访问令牌 2 获取当前用户所有可见的项目 接口地址
  • 【树莓派】(2)网络连接、IP设置、屏幕大小设置、VNC安装与配置

    目录 1 网络连接 1 1有线网连接 SSH协议 1 2 无线网连接 VNC 方法1 xff1a 不能联网 方法2 xff1a 能联网 2 VNC安装与配置 3 IP WiFi配置 4 屏幕大小 屏幕黑屏时间设置 1 网络连接 分为有屏幕和
  • Linux服务配置 配置VNC远程桌面

    一 VNC简介 VNC Virtual Network Console 是虚拟网络控制台的缩写 它 是一款优秀的远程控制工具软件 xff0c 由著名的 AT amp T 的欧洲研究实验室开发的 VNC 是在基于 UNIX 和 Linux 操
  • 异常检测 and 自编码器(2)

    文章目录 前言一 自编码器用于异常检测的网址推荐1 自编码器AutoEncoder解决异常检测问题2 基于自编码器的时间序列异常检测算法3 深度学习实现自编码器Autoencoder神经网络异常检测心电图ECG时间序列 总结 前言 上篇文章
  • python树莓派3控制蜂鸣器_树莓派3 modelB型 连接HC-SR501人体红外感应模块和蜂鸣器模块...

    连接前准备 树莓派3 modelB型一个 HC SR501传感器一只 低电平蜂鸣器模块 有源 即接上电就会响 xff0c 低电平触发 母对母杜邦线三根 实物图如下 xff1a 博主连接的不是特别美观 两个传感器的连接图分别如下 HC SR5
  • git submodule 使用教程

    1 submoude 介绍 xff08 1 xff09 项目很大参与开发人员多的时候 xff0c 需要将各个模块文件进行抽离单独管理 xff08 2 xff09 使用git submodule来对项目文件做成模块抽离 xff0c 抽离出来的
  • 为什么笔记本电脑电源适配器基本是19V供电

    为什笔记本电源适配器供电一般不是20V xff0c 不是25V xff0c 偏偏是19V呢 xff0c 我们从硬件角度聊聊这个问题 首先一个大背景是 xff0c 笔记本电池基本都是锂电池为主 xff0c 在设计上 xff0c 一般会使用多枚
  • 基于国产飞腾、Intel X86等CPU主板设计与调试入门指导

    知识就像货币 xff0c 流动才有意义 一 前言 因为我是做硬件的 xff0c 想用这样一篇文章介绍一下我们常见的电脑主板 xff0c 或者说电路板卡 xff0c 是怎么设计出来的 仅以技术之所学 xff0c 得此文章 xff0c 若有表达
  • 两台电脑直接使用一根网线传输文件

    教程 目录 xff1a https blog csdn net dkbnull article details 87933584 有时候我们需要在两台电脑之间传输几十G的大文件 xff0c 或者置换新电脑时复制文件到新电脑 xff0c 而我
  • keil5(ARM)的下载和安装教程

    Keil 5的下载与安装 下载和安装教程均在以下百度网盘链接中 链接 xff1a 百度网盘 请输入提取码 https pan baidu com s 11N8EwQRBT 5AzXmW7y1X6A 提取码 xff1a efv3
  • git 远程分支与本地分支

    前言 远程仓库上只有 1 个 master 分支 复制远程仓库的地址 3 克隆远程仓库到本地 一 注意 xff1a 本地的 head 和 master 文件都存在 xff0c 但是 remote 的 master 信息是保存在文件 git
  • ARM 自己动手安装交叉编译工具链

    一 Windows中装软件的特点 Windows中装软件使用安装包 xff0c 安装包解压后有2种情况 xff1a 一种是一个安装文件 xff08 exe msi xff09 xff0c 双击进行安装 xff0c 下一步直到安装完毕 安装完
  • ARM X210开发板的软开关按键问题

    一 X210 开发板的软启动电路详解 x210bv3 pdf 1 210 供电需要的电压比较稳定 xff0c 而外部适配器的输出电压不一定那么稳定 xff0c 因此板载了一个文稳压器件 MP1482 这个稳压芯片的作用就是外部适配器电压在一