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

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

3天内不再提示

基于i.MX6ULL的掉电检测设计与软件测试

武汉万象奥科 2023-11-09 10:40 次阅读

基于i.MX6ULL的掉电检测设计与软件测试

基于i.MX6ULL平台设计实现掉电检测功能,首先选择一路IO,利用IO电平变化触发中断,在编写驱动时捕获该路GPIO的中断,然后在中断响应函数中发送信号通知应用程序掉电发生了。

wKgaomVMRH6ABtVLAABTQ_BeDQs250.png

图 1.1掉电信号IO

驱动代码:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define power_MAJOR 200

static struct class *my_class;

static struct fasync_struct *fasync_queue; //异步通知队列

#define GPIO_NUM 1 //中断引脚为:GPIO1_1

static unsigned int irq_num;

/*打开 */

int power_open(struct inode *inode,struct file *filp){

return 0;

}

/*关闭 */

int power_release(struct inode *inode,struct file *filp){

return 0;

}

ssize_t power_read(struct file *filp,char __user *buf,size_t count,loff_t *f_pos){

return count;

}

ssize_t power_write(struct file *file,const char __user *buf,size_t count,loff_t *f_pos){

return count;

}

static int my_fasync(int fd, struct file * filp, int on)

{

int retval;

retval=fasync_helper(fd,filp,on,&fasync_queue);

/*将该设备登记到fasync_queue队列中去*/

if(retval<0)

return retval;

return 0;

}

static const struct file_operations simple_fops={

.owner=THIS_MODULE,

.open=power_open,

.release=power_release,

.read=power_read,

.write=power_write,

.fasync=my_fasync,

};

/*在中断服务函数中向应用层发送消息-异步通知 */

static irqreturn_t irq_callback (int irqno, void *dev_id){

printk("irq power-detect working !\n");

if (fasync_queue) {

kill_fasync(&fasync_queue, SIGIO, POLL_IN);

}

return IRQ_HANDLED;

}

int power_init_module(void){

int rtn;

int ret;

/*注册设备驱动 */

ret = register_chrdev(power_MAJOR,"power-detect-test",&simple_fops);

if(ret<0){

printk("Unable to register character device %d!/n",ret);

return ret;

}

/*自动创建设备节点 */

my_class = class_create(THIS_MODULE, "my_class");

device_create(my_class, NULL, MKDEV(power_MAJOR, 0), NULL,"powerdetect");

/*gpio申请*/

rtn = gpio_request(GPIO_NUM, "my_irq");

if(rtn!=0){

printk("my_irq irq pin request io failed.\n");

}

rtn = gpio_direction_input(GPIO_NUM);

if(rtn<0){

printk("gpio_direction_input() failed !\n");

}

/*获取gpio中断号*/

irq_num = gpio_to_irq(GPIO_NUM);

/*GPIO中断服务函数注册,*/ /*下降沿触发*/

rtn = request_irq(irq_num, irq_callback,IRQF_TRIGGER_FALLING,"my_irq", NULL);

if (rtn<0) {

printk("my_irq request irq false\n");

} else {

printk("my_irq request irq success: %d\n",irq_num);

}

printk("module_init sucessful!!!\n");

return 0;

}

/*卸载 */

void power_cleanup_module(void){

/*卸载相应的设备驱动 */

unregister_chrdev(power_MAJOR,"power-detect-test");

device_destroy(my_class,MKDEV(power_MAJOR, 0));

class_destroy(my_class);

/*释放GPIO*/

gpio_free(GPIO_NUM);

printk("module_exit sucessful!!!\n");

}

/*宏实现 */

module_init(power_init_module);

module_exit(power_cleanup_module);

/*开源许可声明 */

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Zou");

应用代码:

#include

#include

#include

#include

#include

#include

static int fd;

/*内核产生异步通知,调用该应用层函数处理 */

void sigterm_handler(int signo)

{

printf("app irq work !!!\n");

}

int main(void)

{

int oflags;

fd=open("/dev/powerdetect",O_RDWR); //打开设备文件

/*启动异步通知信号驱动机制 */

signal(SIGIO, sigterm_handler);

fcntl(fd, F_SETOWN, getpid());

oflags = fcntl(fd, F_GETFL);

fcntl(fd, F_SETFL, oflags | FASYNC);

/*建立一个死循环,防止程序结束 */

while(1)

{

printf("sleep\n");

usleep(200000); //2ms

}

close(fd);

return 0;

}

将驱动编译成模块,上电加载并执行应用程序后,将电压缓慢下调至掉电临界点。触发GPIO下降沿中断,并提供应用程序掉电信号。

wKgZomVMRI-AUhYrAABRAjOFBuU101.png

图1..2掉电检测

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

    关注

    12

    文章

    1825

    浏览量

    85175
  • 软件测试
    +关注

    关注

    2

    文章

    228

    浏览量

    18567
  • 掉电检测
    +关注

    关注

    0

    文章

    7

    浏览量

    2923
收藏 人收藏

    评论

    相关推荐

    【新品】i.MX6ULL工业嵌入式核心板!NXP低功耗MPU,LCD显示

    核心板新品上市ECK20-6Y2XA系列核心板是亿佰特基于NXPCortex-A7内核i.MX6ULL处理器精心设计的,采用邮票孔连接的低成本、低功耗、高性价比、高可靠性的嵌入式核心板。可广泛应用于工业控制、HMI、IoT等领域。
    的头像 发表于 11-15 01:04 97次阅读
    【新品】<b class='flag-5'>i.MX6ULL</b>工业嵌入式核心板!NXP低功耗MPU,LCD显示

    i.MX Linux开发实战指南—基于野火i.MX系列开发板

    电子发烧友网站提供《i.MX Linux开发实战指南—基于野火i.MX系列开发板.pdf》资料免费下载
    发表于 10-10 17:23 9次下载

    在NXP源码基础上如何适配ELF 1开发板的UART功能

    UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1开发板,实际引出了4路
    的头像 发表于 09-29 11:49 284次阅读
    在NXP源码基础上如何适配ELF 1开发板的UART功能

    采用TPS65023的恩智浦i.MX 6电源设计

    电子发烧友网站提供《采用TPS65023的恩智浦i.MX 6电源设计.pdf》资料免费下载
    发表于 09-29 10:00 0次下载
    采用TPS65023的恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>6</b>电源设计

    使用TPS6521815 PMIC为NXP i.MX 6ULL6UltraLite供电

    电子发烧友网站提供《使用TPS6521815 PMIC为NXP i.MX 6ULL6UltraLite供电.pdf》资料免费下载
    发表于 09-13 09:44 1次下载
    使用TPS6521815 PMIC为NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>6ULL</b>、<b class='flag-5'>6</b>UltraLite供电

    使用TPS6521815 PMIC为NXP i.MX 6Solo、6DualLite供电

    电子发烧友网站提供《使用TPS6521815 PMIC为NXP i.MX 6Solo、6DualLite供电.pdf》资料免费下载
    发表于 09-13 09:39 0次下载
    使用TPS6521815 PMIC为NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>6</b>Solo、<b class='flag-5'>6</b>DualLite供电

    ESP32进入light sleep电压降低触发掉电检测,怎么规避这个问题?

    之后,仍会出现重启,只是打印的信息不同了。 请问:针对可能是进入light sleep电压降低触发掉电检测,怎么规避这个问题?谢谢您
    发表于 06-20 07:05

    浅析在NXP I.MX6ULL+Linux平台下进行WM8960音频芯片移植的过程

    本文详细记录在NXP I.MX6ULL+Linux平台下进行WM8960音频芯片移植的过程,其他平台操作方法类似,希望为大家提供帮助。
    的头像 发表于 05-17 11:33 1179次阅读
    浅析在NXP <b class='flag-5'>I.MX6ULL</b>+Linux平台下进行WM8960音频芯片移植的过程

    米尔NXP i.MX 93开发板限量6折!赋能入门级边缘处理市场

    NXP在处理器板块耕耘多年,从早期的i.MX6i.MX7→i.MX8,再到最新的i.MX9都已经有一条完整的生态链以及很多客户基础。i.MX
    的头像 发表于 04-29 08:01 505次阅读
    米尔NXP <b class='flag-5'>i.MX</b> 93开发板限量<b class='flag-5'>6</b>折!赋能入门级边缘处理市场

    多功能局部放电带电检测仪的介绍——每日了解电力知识

    今天武汉摩恩智能电气有限公司带大家了解一下ME-PD57i 多功能局部放电带电检测仪。 ME-PD57i 多功能局部放电带电检测仪介绍: ME-PD57
    的头像 发表于 04-28 15:47 432次阅读
    多功能局部放电带<b class='flag-5'>电检测</b>仪的介绍——每日了解电力知识

    基于飞凌嵌入式i.MX6ULL核心板的电梯智能物联网关方案

    使用飞凌嵌入式FETMX6ULL-S核心板作为智能电梯物联网关的主控平台,为智能电梯的变革提供了强有力的技术支持。
    的头像 发表于 03-22 10:45 1396次阅读
    基于飞凌嵌入式<b class='flag-5'>i.MX6ULL</b>核心板的电梯智能物联网关方案

    适用于 NXP i.MX 6ULL6ULZ 和 6UltraLite的TPS6521835电源管理IC数据表

    电子发烧友网站提供《适用于 NXP i.MX 6ULL6ULZ 和 6UltraLite的TPS6521835电源管理IC数据表.pdf》资料免费下载
    发表于 03-01 09:10 0次下载
    适用于 NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>6ULL</b>、<b class='flag-5'>6</b>ULZ 和 <b class='flag-5'>6</b>UltraLite的TPS6521835电源管理IC数据表

    电缆漏电检测仪器原理 电缆漏电检测仪器使用方法

    电缆漏电检测仪器是一种用于检测电缆是否存在漏电问题的仪器。在电力工程、建筑工程、工业自动化等领域中,电缆是电力传输和信号传输的重要设备。为了确保电缆线路的安全运行,检测电缆的漏电情况非常重要。接下来
    的头像 发表于 01-25 14:39 2952次阅读

    在ELF 1 开发板上实现读取摄像头视频进行目标检测

    深度学习模型的项目,该项目能够实时读取摄像头视频流并实现对画面中的物体进行精准的目标检测。项目所需的硬件设备:1、基于NXP(恩智浦)i.MX6ULL的ELF1开
    的头像 发表于 01-24 10:38 654次阅读
    在ELF 1 开发板上实现读取摄像头视频进行目标<b class='flag-5'>检测</b>

    ART Pi Smart基于RT-Thread Smart系统的LVGL移植

    ART-Pi Smart开发板为RT-Thread联合百问科技出品,使用的是 NXP 公司的 i.MX6ULL 处理器,具备单核 ARM Cortex-A7,最高运行频率可以达到 800MHz。
    的头像 发表于 11-29 14:29 1061次阅读
    ART Pi Smart基于RT-Thread Smart系统的LVGL移植