本文我們要講的是如何通過 GPIO 驅動配置實現控制 i.MX8 芯片引腳電平變化。
硬件平臺:i.MX8QMMEK EVM Board
軟件環境:i.MX-P9.0.0_2.1.0-AUTO-GA
我們這里使用的是通過 DTS 文件來進行設備硬件資源的申請及分配,用戶可以在 fsl-imx8qm-mek.dtsi 文件下操作 DTS,文件所在目錄:kernel_imxarcharm64bootdtsfreescale,定義 myled節點 設備如下:
myled {
compatible = "fsl,myled";
pinctrl-names = "default";
pinctrl-0 = < &pinctrl_gpio_keys >;
};
使用的引腳編號為 GPIO4_22,引腳功能定義 pinctrl_gpio_keys 如下:
pinctrl_gpio_keys: myled{
fsl,pins = <
SC_P_QSPI1A_DQS_LSIO_GPIO4_IO22 0x00000021
>;
};
以上便完成 DTS 配置,接下來需要編寫驅動代碼 myled.c ,首先建立好驅動代碼框架:
- 構建 platform_driver 結構體及定義 compatible
static const struct of_device_id myled_ids[] = {
{ .compatible = "fsl,myled", },
{ },
};
static struct platform_driver myled_driver={
.probe = myled_probe,
.remove = myled_remove,
.driver = {
.name = "myled",
.of_match_table = myled_ids,
}
};
- 注冊平臺驅動
static int __init myled_init(void)
{
/*2. 注冊平臺驅動*/
platform_driver_register(&myled_driver);
return 0;
}
- 注銷平臺驅動
static void __exit myled_exit(void)
{
/*3. 注銷平臺驅動*/
platform_driver_unregister(&myled_driver);
}
- 定義 probe 函數
static int myled_probe(struct platform_device *pdev)
{
int ret;
ret = gpio_request(USER_LED, "LED");//第一個參數,為要申請的引腳,第二個為你要定義的名字
if (ret)
{
printk("[pual] gpio_request error %s - %d -- n",__func__,__LINE__);
return ret;
}
gpio_direction_output(USER_LED, 1);
gpio_set_value(USER_LED, 1);
major = register_chrdev(0,"myled",&myled_drv_fops);
//創建設備信息,執行后會出現 /sys/class/myled
myled_class = class_create(THIS_MODULE, "myled");
//創建設備節點,就是根據上面的設備信息來的
myled_class_devs = device_create(myled_class, NULL, MKDEV(major, 0), NULL, "myled"); /* /dev/myled */
return 0;
}
- 定義 ioctl 函數
static long myled_drv_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
printk("gpio_ioctln");
switch(cmd) {
case 1:
if(arg == 0)
{
gpio_set_value(USER_LED, 0);
printk("led is offn");
break;
}else
{
gpio_set_value(USER_LED, 1);
printk("led is onn");
break;
}
default:
return -EINVAL;
}
return 0;
}
- 設定引腳編號
#define USER_LED 374 /*GPIO LED GPIO4_22*/
以上便完成 GPIO 驅動代碼,通過應用程序便可以調用 ioctl 函數控制引腳電平變換。
注意:
i.MX8 GPIO 引腳編號設定與其他芯片會有所不同,總共有八組 GPIO,GPIO0~GPIO6,如下圖所示:

它們所對應的編號分別為:

前面完成了對 i.MX8 GPIO 設備驅動的介紹,后續將會分享更多關于 i.MX8 系列的開發內容。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
芯片
+關注
關注
463文章
54010瀏覽量
466084 -
電平
+關注
關注
5文章
372瀏覽量
41604 -
引腳
+關注
關注
16文章
2111瀏覽量
55694 -
GPIO
+關注
關注
16文章
1328瀏覽量
56230
發布評論請先 登錄
相關推薦
熱點推薦
如何將對i.MX8芯片的支持添加到rustBoot?
我想為rustBoot添加對 i.MX8 芯片的支持,我希望你能在以下問題中為我指出正確的方向。關于i.MX8 容器格式的文檔很少。我在哪里可以找到有關“容器布局”的詳細信息,即哪些字節表示什么以及
發表于 03-30 07:48
i.MX8以太網無法配置靜態IP如何解決?
我在 i.MX8 pluse evk 上用 android 13 測試以太網功能。我發現了一個關于靜態ip的問題。更改以太網配置對話框后,我無法配置靜態 IP。你能解決這個問題嗎?
發表于 03-30 06:51
i.MX8 SPI CS引腳不工作是怎么回事?
我在 Variscite i.MX8 迷你 SoM 上運行 Debian。我已經用邏輯分析儀驗證了除 CS 之外的所有 SPI 信號都在工作。無論我做什么,CS 總是很低。我嘗試通過命令行寫入
發表于 03-31 06:38
在i.MX8 Mini的參考手冊框圖中為什么找不到SCU?
對應的i.MX8設備。所以我認為這是 i.MX8 系列的一般特征。在 i.MX8 Mini 的參考手冊框圖中,我找不到 SCU。我假設此設備沒有 SCU 是否正確?我如何設置設備以實現
發表于 04-19 10:39
是否有任何文檔提供i.MX8的MTBF值?
我正在搜索 i.Mx8 的 MTBF 值,但只找到 i.MX6 的 MTBF 值。
是否有任何文檔提供 i.MX8 的 MTBF 值?
(例如 AN4724 - i.MX 6Dual/
發表于 05-22 09:12
無法在i.MX8文檔中找到有關DP引腳的任何信息,求分享
我正在使用 MCIMX8M-EVK,我需要使用顯示端口 (DP)。i.MX8 處理器通過接口 HDMI 顯示接口支持 DP。
我的第一個問題是關于這個界面。我無法在 i.MX8 文檔
發表于 05-30 06:18
i.mx8系列是在哪里制造的?
我沒有看到 i.mx8 處理器的原產國。據我了解,恩智浦在全球擁有一系列FAB。因此想知道是否有人可以分享 i.mx8 處理器的制造地點?
發表于 06-01 07:22
淺談NXP i.MX8系列應用處理器
NXP i.MX系列應用處理器是基于32和64位ARM技術,提供多核解決方案,適用于多媒體和顯示應用,具有高性能和低功耗、可擴展、安全可靠等特點。i.MX系列家族成員包括i.MX28系列、i.
發表于 04-02 09:59
?6475次閱讀
i.MX8 Android Automotive12 修改開機 logo
在 i.MX8 的 Android Automotive12 BSP 版本中,默認的是 NXP 的開機 LOGO 顯示,如果我們想要更改顯示自己的 logo,該如何配置?本篇文件給大家介紹如何更改 i.MX8 Android A
如何通過GPIO驅動配置實現控制i.MX8芯片引腳電平變化
評論