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 图形界面。
  • 扩展模块:触摸屏驱动、本地数据库、云平台数据上传。
相关推荐
前进的李工3 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
LCG米3 小时前
STM32硬件CRC外设实测:多项式固定陷阱、CRC-32校验不匹配根因与软件查表法耗时对比落地
stm32·单片机·嵌入式硬件
lzx_0025 小时前
Linux 进程(二) 深入理解进程
linux
蒸蒸yyyyzwd5 小时前
后端学习笔记三个知识
笔记·八股
沫璃染墨6 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
温暖小土6 小时前
在 CentOS 上安装 Redis Stack
linux·redis·centos
GeW7 小时前
国产化替代进入深水区之后Linux 与数据库为什么必须走向重建
linux
Zhao-Jichao7 小时前
AI Prompting for Everyone 课程笔记 - P19 数据分析 Data Analysis
人工智能·笔记·数据分析
旖旎夜光8 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
ACP广源盛139246256738 小时前
选型笔记:Type‑C 扩展坞方案评估|DP1.2 转 HDMI2.0 桥接芯片 GSV2201D@ACP
笔记·硬件架构·硬件工程·视频·国产芯片