
摘要本文完整梳理IMX6ULL裸机外设知识点SPI串行外设接口、CPOL/CPHA四种模式UART/I2C/SPI总线横向对比ADXL345三轴加速度计LCD液晶显示原理、像素格式、显存与时序信号PWM脉冲宽度调制原理、周期/占空比GT9147/GT1158电容多点触控屏硬件、I2C驱动流程附带计算公式、代码片段。标签#SPI#LCD#PWM#电容触控屏#IMX6ULL裸机开发1. SPI总线协议基础SPISerial Peripheral Interface串行外设接口同步全双工串行通信。SPI四根硬件信号线信号含义方向SCLKSerial Clock 串行时钟主机输出产生通信时钟MOSIMaster‑Out Slave‑In 主机输出从机输入主机→从机MISOMaster‑In Slave‑Out 主机输入从机输出从机→主机CS/SSChip Select 片选信号主机输出选中某一个从机设备SPI特点高位先行MSB优先先传输bit7最后bit0写即是读读即是写。同步通信所有比特由主机SCLK时钟同步不需要双方协商波特率。拓扑一主多从架构多个从机使用独立CS片选线同一时刻只能选中一个从机。通信速率范围1MHz ~ 上百MHz速度远高于I2C。IMX6ULL主机可以对SPI外设分频例如系统时钟60MHz分频得到1MHz SPI时钟输出。SPI硬件内部有移位寄存器 shift register发送和接收同步移位发送一个bit的同时就会收到一个bit。TXFIFO发送缓冲区、RXFIFO接收缓冲区用于缓存数据降低CPU占用。2. CPOL时钟极性、CPHA时钟相位、四种SPI模式两个核心参数CPOL、CPHA组合得到4种SPI工作模式。CPOL Clock Polarity 时钟极性决定总线空闲状态时SCLK电平CPOL0空闲时 SCLK 为低电平CPOL1空闲时 SCLK 为高电平CPHA Clock Phase 时钟相位决定在哪一个时钟边沿进行数据采样CPHA0第一个时钟边沿采样数据CPHA1第二个时钟边沿采样数据SPI四种模式汇总表模式CPOLCPHA空闲SCLK电平采样边沿典型器件Mode000低电平SCLK上升沿采样ADXL345、OLEDMode101低电平SCLK下降沿采样Mode210高电平SCLK下降沿采样Mode311高电平SCLK上升沿采样⚠️主机和从机SPI模式必须完全一致否则通信乱码。3. UART / I2C / SPI三大串行总线横向对比对比项UARTI2CSPI通信模式异步、串行、全双工同步、串行、半双工同步、串行、全双工信号线2根TXD、RXD2根SCL、SDA4根SCLK、MOSI、MISO、CS速率5MHz100KHz ~ 3.4MHz1MHz ~ 100MHz设备拓扑点对点多主多从一主多从独立片选CS比特顺序低位先行高位先行高位先行同步方式波特率无时钟线SCL同步时钟SCLK同步时钟4. SPI读写特性、FIFO、Dummy占位字节SPI“写即是读”只要主机输出SCLK时钟MOSI往外发数据的同时MISO就会同步接收从机的数据。SPI写操作流程主机发送寄存器地址 → 主机发送要写入的数据SCLK持续输出时钟MISO返回无效数据直接丢弃。SPI读操作流程SPI读不能单纯只接收必须发送Dummy占位字节一般0xFF或0x00用来产生SCLK时钟。流程主机发送寄存器地址 → 发送Dummy占位字节产生时钟此时MISO线上得到从机返回有效数据。伪代码软件SPI发送接收示例//SPI发送1字节同时返回读到的1字节unsignedcharspi_rw_byte(unsignedchardat){unsignedchari,ret0;for(i0;i8;i){//输出MOSI数据MOSI(dat0x80)?1:0;dat1;SCLK1;//时钟边沿ret1;if(MISO)ret|0x01;//读取MISOSCLK0;}returnret;}5. SPI实战器件 ADXL345三轴加速度计ADXL345是SPI接口三轴加速度传感器分辨率13bit数值范围0 ~ 2^13‑1 8191硬件量程可配置 ±16g灵敏度系数1g对应 32g / 8191 ≈ 0.0039g/LSB换算公式加速度(g)原始采样值×0.0039加速度(g) 原始采样值 × 0.0039加速度(g)原始采样值×0.0039示例x轴采样值123 → ax 123 * 0.0039 g y轴采样值200 → ay 200 * 0.0039 g z轴采样值300 → az 300 * 0.0039 gg为重力加速度1g 9.8m/s²。6. LCD液晶屏幕基础概念分辨率格式横向像素 × 纵向像素。800 × 480横向800个像素点纵向480个像素点1920 ×10801080P高清2560 ×14402K分辨率。屏幕物理尺寸单位英寸 inch1英寸 2.54 cm代表屏幕对角线长度。规律分辨率相同屏幕尺寸越小 → PPI像素密度越高画面越细腻清晰屏幕尺寸相同分辨率越高 → 画面越细腻清晰。刷新率单位HZ代表每秒钟刷新多少帧完整图像常见60HZ。显存FrameBuffer专门用来存放一帧图像像素数据的内存空间LCD控制器会不断读取显存数据输出到屏幕。示例800*480屏幕每个像素4字节ARGB显存大小 800 * 480 *4 1536000 Byte ≈1.5MBIMX6ULL DDR地址范围0x80000000 ~ 0xA0000000显存开辟在DDR内存区域。7. 像素颜色格式RGB888 / RGB565 / ARGB格式每个像素占用字节RGB说明RGB5652字节R(5bit)G(6bit)B(5bit)16bit嵌入式LCD最常用节省显存RGB8883字节R(8bit)G(8bit)B(8bit)24bit1670万色彩ARGB88884字节A(Alpha透明度8bit)R(8bit)G(8bit)B(8bit)RGB1010104字节R(10bit)G(10bit)B(10bit)高色深视频剪辑专业面板Alpha透明度通道0完全透明255完全不透明。8. 显存与像素点内存映射计算假设显存起始地址0x89000000分辨率800×48032bit ARGB格式。x横坐标列0~799y纵坐标行0~479像素内存地址计算公式像素地址 显存基地址 4 * ( 800 * y x )C语言指针访问示例//显存起始地址ARGB每个像素4字节unsignedint*fb(unsignedint*)0x89000000;//向坐标(x,y)像素点写入颜色0x00FF0000(红色)fb[800*yx]0x00FF0000;fb是unsigned int指针指针自增自动偏移4字节不需要手动×4。9. LCD时序控制信号 PCLK、HSYNC、VSYNC、DE信号全称功能说明PCLKPixel Clock 像素时钟每个PCLK周期输出1个像素点数据HSYNCHorizontal Sync 行同步信号同步每一行图像标志一行的开始VSYNCVertical Sync 帧同步信号同步整帧图像标志一帧画面开始DEData Enable 数据使能高电平代表当前传输的数据是有效像素LCD控制器按照时序输出DE有效期间输出RGB像素数据。10. IMX6ULL LCD裸机配置步骤IOMUXC配置引脚复用功能配置引脚电气属性配置LCD外设时钟典型31MHZ配置LCD控制器寄存器分辨率、时序参数、显存起始地址开启LCD控制器屏幕输出图像。11. PWM脉冲宽度调制原理PWM(Pulse‑Width Modulation)脉冲宽度调制利用计数器输出周期性方波广泛用于LED亮度调节、电机调速、蜂鸣器。关键概念PWM周期一次完整方波循环占用时间例如PWM频率1KHz周期 1ms。占空比一个周期内高电平时间占整个周期的百分比例如50%占空比。内部计数器计数器从0向上计数计数到达比较采样点触发电平翻转计数到达**回滚点周期值**计数器清零重新计数。示例计数器时钟源1MHz计数器每加1代表1us。简单伪代码逻辑//周期回滚值 1000 → 周期1ms频率1KHzuint16_tperiod1000;uint16_tcompare_val500;//比较点占空比50%12. PWM寄存器周期寄存器、比较采样寄存器、引脚极性周期寄存器设置计数器回滚点决定PWM输出周期、输出频率。采样/比较寄存器设置比较点决定占空比。引脚极性配置决定引脚默认电平会改变占空比效果引脚默认高电平比较寄存器数值越大 → 高电平时间越长占空比越大。引脚默认低电平比较寄存器数值越大 → 高电平时间越短占空比越小。PWM硬件内部自带FIFO可以存放多组比较值支持输出复杂波形。13. 触控屏分类电阻屏、电容屏电阻触控屏依靠压力按压需要做屏幕校准支持硬物、手写笔按压不支持多点触控。电容触控屏感应人体感应电荷手指触摸生效不需要按压支持多点触控。开发板常用电容触控芯片GT1158I2C设备地址0x14GT9147I2C设备地址0x5D最多支持5点多点触控读取寄存器可以获取触摸点数、X/Y坐标。14. GT9147电容多点触控I2C裸机驱动完整流程GT9147使用I2C总线和IMX6ULL通信有RST复位引脚、INT中断引脚。完整执行步骤IOMUXC配置配置RST复位引脚、INT中断引脚复用功能与电气属性操作RST引脚对触控芯片执行硬件复位初始化I2C控制器封装gt9147_read()、gt9147_write()I2C读写函数读取芯片ID寄存器0x8140确认芯片通信正常配置INT引脚中断触发方式下降沿触发GIC配置注册GT9147中断服务函数、设置中断优先级、使能GIC该路中断使能内核INT引脚对应的外设中断发生触摸触发INT中断进入中断服务函数判断实际按下的触摸点数读取坐标寄存器0x8158 ~ 0x815B获取多点触摸X、Y坐标清除中断标志位退出中断。寄存器说明0x804D、0x8056用来配置INT中断触发方式。//伪代码读取GT9147芯片IDunsignedcharid_buf[4];gt9147_read(0x8140,id_buf,4);15. 英文缩写全称对照表缩写英文全称中文释义SPISerial Peripheral Interface串行外设接口SCLKSerial ClockSPI串行时钟MOSIMaster‑Out Slave‑In主机输出从机输入信号线MISOMaster‑In Slave‑Out主机输入从机输出信号线CSChip Select片选信号CPOLClock Polarity时钟极性CPHAClock Phase时钟相位FIFOFirst‑In First‑Out先进先出缓冲区DummyDummy Byte占位虚字节ADXL345Analog‑Devices Accelerometer 345三轴加速度传感器型号ggravity重力加速度单位LCDLiquid Crystal Display液晶显示器PCLKPixel Clock像素时钟HSYNCHorizontal Sync行同步信号VSYNCVertical Sync帧/垂直同步信号DEData Enable数据使能信号RGBRed Green Blue红绿蓝三原色ARGBAlpha Red Green Blue带透明度的RGB像素格式fbFrame Buffer帧缓存显存HZHertz赫兹频率单位PWMPulse‑Width Modulation脉冲宽度调制INTInterrupt中断引脚RSTReset硬件复位引脚复习小结SPI同步全双工写即是读读从机必须发送Dummy字节来产生SCLK时钟CPOL、CPHA主机从机模式必须匹配。SPI对比I2CSPI速度更高I2C支持多主SPI一主多从每个从机需要独立CS片选。ADXL345加速度原始值 ×0.0039得到g单位加速度。LCD显存fb[y*宽 x]定位像素RGB565节省内存RGB888色彩丰富PCLK输出像素HSYNC行同步VSYNC帧同步DE有效表示像素数据有效。PWM由周期寄存器、比较寄存器决定频率与占空比引脚极性会改变占空比逻辑。GT9147电容触控使用I2C通信依靠INT引脚中断上报触摸事件先硬件复位再读取ID中断回调读取多点坐标。