OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 116|回复: 1

MX6ULL写一个应用跑自有外设

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-12-22
在线时间
1 小时
发表于 昨天 14:16 | 显示全部楼层 |阅读模式
1金钱
我现在想一个应用 每次上电后运行,通过SPI去读取数据然后显示在LCD屏上,通过外接的几路按键来执行不同逻辑,这种我是自己写个字符驱动设备来操作SPI读写数据再显示到LCD上,还是我就设备树里把SPI注册设备节点,直接操作设备节点来的方便呢?

回复

使用道具 举报

0

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2026-1-29
在线时间
31 小时
发表于 5 小时前 | 显示全部楼层
在嵌入式Linux系统中,通过SPI接口读取数据并显示到LCD屏,同时处理多路按键的逻辑,选择设备树注册设备节点还是自行编写字符驱动设备,需综合以下因素评估:

一、设备树注册设备节点的优势
简化开发流程

若使用内核已支持的SPI设备(如标准SPI控制器),只需在设备树(.dts文件)中定义SPI控制器及设备节点(如spi@0 { ... }),并正确设置compatible属性匹配内核驱动(如rohm,dh2228fv或microchip,mcp2515)。内核会自动创建/dev/spidevX.Y设备节点。
无需手动编写驱动代码,依赖内核成熟的SPI子系统框架(如spi.c和平台特定控制器驱动,如spi-rockchip.c)。
动态配置与兼容性

通过修改设备树即可调整SPI速率(spi-max-frequency)、引脚复用(pinctrl-0)等参数,无需重新编译驱动模块。
适用于标准化设备(如CAN控制器MCP2515或通用SPI传感器),避免重复造轮子。
性能优化支持

内核SPI子系统原生支持DMA传输和异步操作(spi_async),可高效处理大数据量通信。
二、自写字符驱动设备的适用场景
复杂逻辑与定制化需求

若需实现非标准SPI协议(如自定义时序、多片选组合操作)或特殊LCD控制逻辑(如ST7789的初始化序列、DC/RST引脚管理),需在驱动中直接操作SPI控制器寄存器或封装专用函数(如lcd_write_cmd/lcd_write_data)。
例如,LCD驱动常需区分命令和数据通道,需通过GPIO控制DC引脚,此类逻辑更适合集成到驱动内部。
实时性与中断处理

若外接按键需快速响应(如消抖、中断触发),可在驱动中结合GPIO子系统注册中断处理回调,避免用户态程序的性能损耗。
独立于内核版本的兼容性

对于旧内核(如4.4.12)或未完全支持设备树的平台,手动编写驱动可绕过设备树匹配的限制。
三、推荐方案
优先尝试设备树+内核驱动

若SPI设备为标准器件(如SPI转RGB芯片),且仅需基础读写功能,采用设备树配置最为便捷。例如:
      

        

&spi1 {
    status = "okay";
    pinctrl-0 = <&spi1_pins>;
    lcd: st7789@0 {
        compatible = "sitronix,st7789v";
        reg = <0>;
        spi-max-frequency = <32000000>;
        reset-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
        dc-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>;
    };
};

      
用户态程序可通过/dev/spidevX.Y直接调用ioctl(SPI_IOC_MESSAGE)发送数据。
复杂场景选择自定义驱动

若涉及LCD初始化时序、多层菜单界面渲染或按键事件联动(如长按进入配置模式),建议编写字符设备驱动,整合SPI通信、GPIO控制及业务逻辑。例如:
在probe函数中初始化LCD(发送复位命令、设置分辨率);
通过file_operations暴露read/write接口供应用层调用;
使用互斥锁保证多线程安全。
总的来说,优先使用设备树注册设备节点,借助内核SPI子系统快速实现基础功能;当面临非标硬件或复杂交互逻辑时,再转向自定义字符驱动开发。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-7-16 23:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表