一、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 图形界面。
- 扩展模块:触摸屏驱动、本地数据库、云平台数据上传。