iMX6ull Linux 嵌入式驱动开发笔记(LCD / ADXL345 / SPI 子系统)

一、LCD 屏幕驱动(Framebuffer)

主题:Linux LCD 驱动适配原理、Framebuffer 驱动开发与验证

1. Framebuffer 驱动框架

  • Framebuffer 是 Linux 显示专用驱动框架,应用层通过 /dev/fb0 节点和内核驱动交互。
  • LCD 驱动分为控制器驱动(原厂提供) + 设备驱动,开发者主要修改设备树 DTS 做适配。
  • 驱动调用 register_framebuffer 注册,生成 /dev/fb0。

2. LCD RGB 接口与时序

  • RGB 并行接口:24bit 数据线并行传输,带宽高。
  • 同步信号:PCLK 像素时钟、HSYNC 行同步、VSYNC 场同步,保证采样正确。
  • 时序参数(前后肩、有效分辨率)写在设备树 display-timings。

3. 应用层编程

  • mmap:把显存映射到用户空间,避免内核-用户空间大量数据拷贝。
  • ioctl(FBIOGET_VSCREENINFO):获取屏幕分辨率、色深。
  • 像素计算:偏移 = y * xres + x,直接操作映射内存绘制像素。

4. 本次直播实现与验证

  • 像素绘制:操作 RGB 数据,屏幕中心点显示白色像素点。
  • 环境问题:解决编译头文件缺失,修改设备树,使 Framebuffer 驱动正常运行。

二、ADXL345 三轴加速度传感器 SPI 驱动(2 场直播)

###:ADXL345 SPI 驱动开发流程(初始化、读数据、应用测试)

1. 驱动初始化
  • 读寄存器 0x00 获取设备 ID,校验为 0xE5(229),确认 SPI 通信正常。
  • 寄存器 0x31 = 0x0B:开启全分辨率,量程 ±16g。
  • 寄存器 0x2D = 0x08:启动测量。
2. 数据读取
  • spi_message 构建消息队列,连续读取,一次性获取 X/Y/Z 三轴 6 字节。
  • 高低字节拼接为 short 加速度原始值,copy_to_user 拷贝到用户空间。
3. 硬件与测试
  • 引脚:GND、3.3V、CS、SCL、MISO、MOSI。
  • 测试:加载驱动后应用打印三轴数值,旋转传感器观察 X/Y 变化。

i.MX6 ECSPI3 + ADXL345(设备树、驱动加载、读写逻辑)

1. 硬件引脚 & 设备树配置
  • 使用 ECSPI3,SCLK/MOSI/MISO;CS 由 GPIO1_IO20 软件模拟。
  • DTS:启用 ECSPI3 节点,配置 cs-gpios,从机数量 1,引脚复用 SPI 功能。
  • ADXL345 子节点:compatible 匹配字符串,速率 1MHz,SPI Mode3(CPOL=1,CPHA=1)。
2. 驱动加载验证
  • 编译模块加载,成功匹配 DTS 节点,probe 执行。
  • 驱动打印 SPI 频率、片选、模式,核对是否与设备树一致。
3. 驱动代码架构
  • Probe 中注册 misc 混杂设备 ,填充 file_operations,实现 read 供用户层读取。
  • Read 函数流程:校验设备 ID → 设置量程分辨率 → 读取 XYZ 数据 → copy_to_user。
  • SPI 两套 API:
    • spi_write_then_read:单寄存器读写
    • spi_message + spi_sync:批量连续读取
4. ADXL345 基础特性补充
  • 供电:2.0~3.6V,四线 SPI。
  • 驱动三大步骤:开启全分辨率 → Power Control 寄存器置位开启测量 → 读取三轴数据。
  • SPI 驱动框架:spi_register_driver 注册驱动、of_match_table 设备匹配、probe 函数。

三、Linux SPI 子系统(SPI vs I2C 对比)

1. SPI 与 I2C 子系统对比

  • 架构相似:都有控制器(Master/Adapter)、总线核心层、从设备驱动。
  • I2C:SCL+SDA 两根线,硬件简单,速率低,半双工。
  • SPI:SCLK/MOSI/MISO/CS,全双工,速率高;每个从机单独 CS,占用引脚多;支持三线/四线模式。

2. SPI 协议原理

  • 4 种模式:CPOL 时钟极性、CPHA 时钟相位组合,决定空闲电平、采样边沿。
  • 支持连续多寄存器读取,通过标志位实现地址自动递增。
  • 高速 SPI 场景(十几 MHz)大量数据传输可用 DMA,减轻 CPU 负担。

3. SPI 驱动开发流程

  • DTS 描述 SPI 控制器与从设备信息,platform 总线完成设备-驱动匹配。
  • 控制器:spi_register_master 注册;设备驱动依靠 of_match_table 匹配,触发 probe。
  • 应用层:打开设备文件读写,屏蔽底层总线细节。

四、后续项目 & 求职规划

  • 传感器 + LCD 联动:DS18B20 采集温度,LCD 显示;LVGL 图形界面。
  • 扩展模块:触摸屏驱动、本地数据库、云平台数据上传。
相关推荐
Ruiery1 小时前
Linux 6.6内核内存管理深度解析(三):页表与缺页处理 — 虚拟地址怎么按需映射到物理页
linux·运维·服务器
小诗懂技术1 小时前
linux驱动中断,相关中断的方式与适用场景
linux·arm开发·驱动开发·算法
xiaoqiMikko1 小时前
Linux 实战(九·完):重定向、sudo、通配符的坑 + 报错速查表 —— 三台真机实测
linux·centos
qq_284274051 小时前
信号分析·傅里叶级数与频谱(单边谱·双边谱·傅里叶变换)CSDN发布稿
笔记·学习·信号处理·傅里叶分析
xian_wwq1 小时前
【学习笔记】pgvector 入门:用 PostgreSQL 直接实现向量检索-13
笔记·学习·postgresql
H.莓飛1 小时前
【C++】模板初阶
linux·开发语言·c++·visual studio
kmomo..1 小时前
Linux SPI 驱动开发学习笔记:从框架到实战
linux·驱动开发·学习
传感器与混合集成电路1 小时前
LIFM1 LIFM2 LIFM3多路IF转换模块量程输出频率精度等级选型
嵌入式硬件
一直C1 小时前
嵌入式 Linux 驱动开发学习笔记(三)设备树、GPIO子系统、中断与外设驱动实战
驱动开发·单片机·嵌入式硬件·嵌入式·arm·imx6ull