0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于i.MX6ULL的掉電檢測設(shè)計與軟件測試

武漢萬象奧科 ? 2023-11-09 10:40 ? 次閱讀

基于i.MX6ULL的掉電檢測設(shè)計與軟件測試

基于i.MX6ULL平臺設(shè)計實現(xiàn)掉電檢測功能,首先選擇一路IO,利用IO電平變化觸發(fā)中斷,在編寫驅(qū)動時捕獲該路GPIO的中斷,然后在中斷響應(yīng)函數(shù)中發(fā)送信號通知應(yīng)用程序掉電發(fā)生了。

wKgaomVMRH6ABtVLAABTQ_BeDQs250.png

圖 1.1掉電信號IO

驅(qū)動代碼:

#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;

}

/*關(guān)閉 */

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);

/*將該設(shè)備登記到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,

};

/*在中斷服務(wù)函數(shù)中向應(yīng)用層發(fā)送消息-異步通知 */

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;

/*注冊設(shè)備驅(qū)動 */

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

if(ret<0){

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

return ret;

}

/*自動創(chuàng)建設(shè)備節(jié)點 */

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中斷服務(wù)函數(shù)注冊,*/ /*下降沿觸發(fā)*/

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){

/*卸載相應(yīng)的設(shè)備驅(qū)動 */

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");

}

/*宏實現(xiàn) */

module_init(power_init_module);

module_exit(power_cleanup_module);

/*開源許可聲明 */

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Zou");

應(yīng)用代碼:

#include

#include

#include

#include

#include

#include

static int fd;

/*內(nèi)核產(chǎn)生異步通知,調(diào)用該應(yīng)用層函數(shù)處理 */

void sigterm_handler(int signo)

{

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

}

int main(void)

{

int oflags;

fd=open("/dev/powerdetect",O_RDWR); //打開設(shè)備文件

/*啟動異步通知信號驅(qū)動機制 */

signal(SIGIO, sigterm_handler);

fcntl(fd, F_SETOWN, getpid());

oflags = fcntl(fd, F_GETFL);

fcntl(fd, F_SETFL, oflags | FASYNC);

/*建立一個死循環(huán),防止程序結(jié)束 */

while(1)

{

printf("sleep\n");

usleep(200000); //2ms

}

close(fd);

return 0;

}

將驅(qū)動編譯成模塊,上電加載并執(zhí)行應(yīng)用程序后,將電壓緩慢下調(diào)至掉電臨界點。觸發(fā)GPIO下降沿中斷,并提供應(yīng)用程序掉電信號。

wKgZomVMRI-AUhYrAABRAjOFBuU101.png

圖1..2掉電檢測

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1812

    瀏覽量

    85044
  • 軟件測試
    +關(guān)注

    關(guān)注

    2

    文章

    221

    瀏覽量

    18533
  • 掉電檢測
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    2913
收藏 人收藏

    評論

    相關(guān)推薦

    在NXP源碼基礎(chǔ)上如何適配ELF 1開發(fā)板的UART功能

    UART即通用異步收發(fā)器,是一種支持全雙工串行通信協(xié)議的接口。在i.MX6ULL處理器平臺上,該處理器原生支持多達(dá)8路的UART接口,提供了豐富的串行通信能力。 針對ELF 1開發(fā)板,實際引出了4路
    的頭像 發(fā)表于 09-29 11:49 ?208次閱讀
    在NXP源碼基礎(chǔ)上如何適配ELF 1開發(fā)板的UART功能

    使用TPS6521815 PMIC為NXP i.MX 6ULL6UltraLite供電

    電子發(fā)燒友網(wǎng)站提供《使用TPS6521815 PMIC為NXP i.MX 6ULL、6UltraLite供電.pdf》資料免費下載
    發(fā)表于 09-13 09:44 ?0次下載
    使用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供電

    電子發(fā)燒友網(wǎng)站提供《使用TPS6521815 PMIC為NXP i.MX 6Solo、6DualLite供電.pdf》資料免費下載
    發(fā)表于 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進(jìn)入light sleep電壓降低觸發(fā)掉電檢測,怎么規(guī)避這個問題?

    之后,仍會出現(xiàn)重啟,只是打印的信息不同了。 請問:針對可能是進(jìn)入light sleep電壓降低觸發(fā)掉電檢測,怎么規(guī)避這個問題?謝謝您
    發(fā)表于 06-20 07:05

    淺析在NXP I.MX6ULL+Linux平臺下進(jìn)行WM8960音頻芯片移植的過程

    本文詳細(xì)記錄在NXP I.MX6ULL+Linux平臺下進(jìn)行WM8960音頻芯片移植的過程,其他平臺操作方法類似,希望為大家提供幫助。
    的頭像 發(fā)表于 05-17 11:33 ?1037次閱讀
    淺析在NXP <b class='flag-5'>I.MX6ULL</b>+Linux平臺下進(jìn)行WM8960音頻芯片移植的過程

    米爾NXP i.MX 93開發(fā)板限量6折!賦能入門級邊緣處理市場

    NXP在處理器板塊耕耘多年,從早期的i.MX6i.MX7→i.MX8,再到最新的i.MX9都已經(jīng)有一條完整的生態(tài)鏈以及很多客戶基礎(chǔ)。i.MX
    的頭像 發(fā)表于 04-29 08:01 ?438次閱讀
    米爾NXP <b class='flag-5'>i.MX</b> 93開發(fā)板限量<b class='flag-5'>6</b>折!賦能入門級邊緣處理市場

    多功能局部放電帶電檢測儀的介紹——每日了解電力知識

    今天武漢摩恩智能電氣有限公司帶大家了解一下ME-PD57i 多功能局部放電帶電檢測儀。 ME-PD57i 多功能局部放電帶電檢測儀介紹: ME-PD57
    的頭像 發(fā)表于 04-28 15:47 ?364次閱讀
    多功能局部放電帶<b class='flag-5'>電檢測</b>儀的介紹——每日了解電力知識

    基于飛凌嵌入式i.MX6ULL核心板的電梯智能物聯(lián)網(wǎng)關(guān)方案

    使用飛凌嵌入式FETMX6ULL-S核心板作為智能電梯物聯(lián)網(wǎng)關(guān)的主控平臺,為智能電梯的變革提供了強有力的技術(shù)支持。
    的頭像 發(fā)表于 03-22 10:45 ?1304次閱讀
    基于飛凌嵌入式<b class='flag-5'>i.MX6ULL</b>核心板的電梯智能物聯(lián)網(wǎng)關(guān)方案

    適用于 NXP i.MX 6ULL、6ULZ 和 6UltraLite的TPS6521835電源管理IC數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《適用于 NXP i.MX 6ULL6ULZ 和 6UltraLite的TPS6521835電源管理IC數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 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數(shù)據(jù)表

    電纜漏電檢測儀器原理 電纜漏電檢測儀器使用方法

    電纜漏電檢測儀器是一種用于檢測電纜是否存在漏電問題的儀器。在電力工程、建筑工程、工業(yè)自動化等領(lǐng)域中,電纜是電力傳輸和信號傳輸?shù)闹匾O(shè)備。為了確保電纜線路的安全運行,檢測電纜的漏電情況非常重要。接下來
    的頭像 發(fā)表于 01-25 14:39 ?2533次閱讀

    在ELF 1 開發(fā)板上實現(xiàn)讀取攝像頭視頻進(jìn)行目標(biāo)檢測

    深度學(xué)習(xí)模型的項目,該項目能夠?qū)崟r讀取攝像頭視頻流并實現(xiàn)對畫面中的物體進(jìn)行精準(zhǔn)的目標(biāo)檢測。項目所需的硬件設(shè)備:1、基于NXP(恩智浦)i.MX6ULL的ELF1開
    的頭像 發(fā)表于 01-24 10:38 ?595次閱讀
    在ELF 1 開發(fā)板上實現(xiàn)讀取攝像頭視頻進(jìn)行目標(biāo)<b class='flag-5'>檢測</b>

    ART Pi Smart基于RT-Thread Smart系統(tǒng)的LVGL移植

    ART-Pi Smart開發(fā)板為RT-Thread聯(lián)合百問科技出品,使用的是 NXP 公司的 i.MX6ULL 處理器,具備單核 ARM Cortex-A7,最高運行頻率可以達(dá)到 800MHz。
    的頭像 發(fā)表于 11-29 14:29 ?1012次閱讀
    ART Pi Smart基于RT-Thread Smart系統(tǒng)的LVGL移植

    i.MX6ULL——ElfBoard ELF1板卡 初次編譯uboot的方法

    在下面章節(jié)有講解,本章節(jié)主要演示編譯流程,ELF1開發(fā)板的配置文件為imx6ull_elf1_defconfig。 三、 編譯 如果曾經(jīng)編譯過,在編譯之前可以使用make clean命令清除一下中間
    發(fā)表于 11-16 09:34

    IMX6ULL-開機啟動ssh卡頓

    1.問題現(xiàn)象i.MX6ULL平臺,在調(diào)試過程中出現(xiàn)sshd在開機自啟動的過程中卡頓現(xiàn)象(等待時間較久),觀察打印信息發(fā)現(xiàn),sshd一定等待直到以下代碼出現(xiàn)才能正常啟動。random
    的頭像 發(fā)表于 11-07 17:58 ?549次閱讀
    IMX<b class='flag-5'>6ULL</b>-開機啟動ssh卡頓

    i.MX6ULL——ElfBoard ELF1板卡 網(wǎng)絡(luò)更新鏡像

    ubuntu的tftpboot目錄下。 2.賦予權(quán)限: elf@ubuntu:~/tftpboot$ chmod 777 imx6ull-elf1-emmc.dtb elf@ubuntu:~/tftpboot
    發(fā)表于 11-03 09:49