3线spi屏幕驱动方式
前言
最近研究了一下3线spi屏幕的驱动方式。屏幕的驱动芯片为ILI9488,相比于4线,3线spi屏幕没有用到DC写命令/写数据控制线。DC=0表示写命令,DC=1表示写数据。
3线spi数据格式
3线spi就是将DC命令放到了每个8位数据的最高位。这么说还是有些枯燥,看下具体的例子。
假如采用spi发送0x55,一般采用的MSB,高位在前的方式。
那么SDA(MOSI)数据线上是这样的:
01010101
如果要假如dc命令,则0x55要分为两个字节进行发送,假设DC=1,则SDA(MOSI)数据如下:
10101010 1
低字节 高字节
相当于要将0x55转换为:0x80AA。同时要在单片机中设置spi数据为9位。经过多次摸索,其转换公式为:
uint16_t data = (0x8000&(cmd<<15))|(0x7f&(cmd>>1)) ;
具体在esp32中需要将发送函数改为如下:
static void lcd_cmd(spi_device_handle_t spi, const uint8_t cmd)
{esp_err_t ret;spi_transaction_t t;uint16_t data=0;data = (0x8000&(cmd<<15))|(0x7f&(cmd>>1)) ;memset(&t, 0, sizeof(t)); //Zero out the transactiont.length=9; //Command is 8 bitst.tx_buffer=&data; //The data is the cmd itselfret=spi_device_polling_transmit(spi, &t); //Transmit!assert(ret==ESP_OK); //Should have had no issues.
}static void lcd_data_byte(spi_device_handle_t spi, const uint8_t cmd)
{esp_err_t ret;spi_transaction_t t;uint16_t data=0;data = (0x8000&(cmd<<15))|(0x80|cmd>>1) ;memset(&t, 0, sizeof(t)); //Zero out the transactiont.length=8; //Command is 8 bitst.tx_buffer=&data; //The data is the cmd itselfret=spi_device_polling_transmit(spi, &t); //Transmit!assert(ret==ESP_OK); //Should have had no issues.
}
只有改成为这样才能正常与屏幕通信。这个造成了通信速度降低,难以采用dma传输大量的数据。原因就是每个字节都要先进行拆解拼凑成2个字节再发送。及其不方便,当时调这个花了不少时间。
个人觉得3线spi通信方式及其扯淡,效率极低,还是老老实实用4线spi或者单片机8080接口来驱动屏幕。有的屏幕中DC引脚使用RS来表示的,笔者也是一开始没搞明白,发现这个屏幕没有DC引脚,才来研究3线spi,后面发现屏幕刷新率太低了,刷新一整屏需要10s钟。最后发现RS=DC,立刻改为4线spi,爽歪歪。
不过ILI9488这个驱动芯片最坑的一点是采用spi方式,只支持8bit和18bit的颜色格式,不支持16bit。这是实验所得,其规格书上写的是采用4线spi时,可以支持16bit颜色,
但将0x3A写入0x05(16bit)屏幕没有显示,只有将0x3A写入0x06(18bit)时,才能显示出颜色。这一点非常坑爹。
ILI9488 18位颜色格式
通常用的都是16位颜色,所以在采用18位颜色是需要进行装换。然后再通过spi发送。具体转换方式就是
colors[0] = (color>>8)&0xf8;colors[1] = (color>>3)&0xfc;colors[2] = (color<<3)&0xfc;
红色放到第一个字节,绿色放到第二个字节,蓝色放到低三个字节,且都是高位对齐。低位空置。转换后屏幕即可正常显示。
3线spi屏幕驱动方式相关推荐
- Arduino使用u8g2库函数驱动4线/6线OLED屏幕(I2C/SPI通讯)附带库函数详解
话不多说,直接入正题: 常见的OLED通常有两种样式,如下图所示,分别是4线和6线控制 本人几乎浏览了网上所有关于控制OLED模块的教程,并都经过了项目实测:大力推荐u8g2这个库函数来控制,文章末尾 ...
- stm32 4线SPI方式驱动CH452A数码管驱动芯片
stm32 采用的是4线SPI方式连接.操作命令是12位的数据,采用的是io模拟的方式驱动.试过使用硬件SPI驱动,但是命令只支持12位,硬件SPI发送的是8位或者16位,是驱动不起来的. 常用指令如 ...
- 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- STM32—4线SPI驱动SSD1306 OLED
文章目录 一.OLED简介 二.驱动SSD1306所需知识 1.引脚介绍 2.通信时序 3.显存GRAM 4.字库 5.SSD1306基本命令 三.代码讲解 1.相关引脚配置 2.模拟SPI通信 3. ...
- TLE5012B ESP32驱动程序、硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出
一.TLE5012B 简介 TLE5012B 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行角度测量. 它通过使用单片集成 巨磁阻 (iGMR) 元件,来测量正弦和余弦角分量,这些原 ...
- STC单片机驱动1.8‘TFT SPI屏幕示例模板(含资料包)
STC单片机驱动1.8'TFT SPI屏幕示例模板(含资料包) 驱动演示 STC单片机采用的是: STC12C5A60S2,采用的自制开发板:<[开源]STC12C5A60S2开发板> 1 ...
- Arduino UNO驱动合宙1.8‘TFT SPI屏幕示例演示(含资料包)
Arduino UNO驱动合宙1.8"TFT SPI屏幕示例演示 效果展示 驱动参考资料包 来源于:http://www.lcdwiki.com/zh/1.8inch_Arduino_SPI ...
- OLED显示屏驱动:8080并口,IIC,SPI三种驱动方式
本文介绍了对OLED的几种驱动方式,8080并口,IIC,SPI三种驱动方式,采用的单片机是STM32F407. 文章目录 一.OLED驱动原理介绍 二.8080并口驱动方式 三.IIC驱动方式 四. ...
- 【全志T113-S3_100ask】15-1 内核5.4驱动spi屏幕——ILI9341
[全志T113-S3_100ask]15-1 内核5.4驱动spi屏幕--ILI9341 背景 (一)spi设备树 1.修改设备树 2.完善设备树 (二)使能内核 (三)兼容性修改 (四)测试 背景 ...
- 树莓派安装android spi,12.树莓派SPI屏幕模块驱动安装教程
树莓派SPI屏幕需要安装相应的驱动,软件,以及一些配置文件才可正常使用,相对稍许繁琐,之前本人制作的SPI屏幕集成相应制作了一些配置好的系统,但远远不够使用,于是制作了相应的自动化安装脚本,理论上适用 ...
最新文章
- 使用Ansible中的playbook
- 移动端 像素渲染流水线与GPU Hack
- 通过自己定义MVC的Controller的Json转换器解决日期序列化格式问题
- python十一:集合(set)
- Boost Asio总结(9)数据缓冲区class mutable_buffer和const_buffer
- 前端学习(3090):vue+element今日头条管理-参数传递
- av linux,linux下的开源clanav
- iis配置write模块
- R语言中怎么将一个字符串向量合成一个大字符串
- Hadoop权威指南学习笔记一
- 解决eclipse无法启动:Failed to create the Java Virtual Machine
- boost::test
- Axure RP 9.0 软件安装教程
- C#上位机与三菱PLC通讯的实现步骤(图文)
- 《游戏系统设计一》游戏任务系统太复杂,带你一步一步实现
- kettle 完成处理后的字母含义,(I)nput, (O)utput, (R)ead, (W)ritten, (U)pdated, (E)rror
- memory prefix hypo,hecto,hyper out1
- saveFile()方法
- OpenCV 形态学操作应用——提取水平与垂直线
- 第八次网页前端培训(JavaScript)
热门文章
- 机器学习中的数学(八):卡方分布(Chi-squared Distribution) t分布(T Distribution)F分布(T Distribution)
- 注意!这13件事会毁掉你的信用,千万别做!
- 如何将标准地图服务中的eps格式中国地图应用到论文中带审图号的地图制作?(二)
- 前端常用PS技巧总结之将图片上的LOGO(水印)去掉
- [zz]明月虽好by 王大根 from 豆瓣
- 服务器开机日志文件,大芒果启动WOW服务器 提示日志文件找不到怎么办
- 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
- Java中的按拼音排序
- 在Pycharm中,全文搜索、替换,以及单独文件搜索、替换!
- “酷我音乐”借“大数据”名义 恐已窥探并收集用户隐私长达数年