当前位置:网站首页>3線spi屏幕驅動方式
3線spi屏幕驅動方式
2022-06-27 00:49:00 【NULL_1969】
前言
最近研究了一下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 transaction
t.length=9; //Command is 8 bits
t.tx_buffer=&data; //The data is the cmd itself
ret=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 transaction
t.length=8; //Command is 8 bits
t.tx_buffer=&data; //The data is the cmd itself
ret=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;
紅色放到第一個字節,綠色放到第二個字節,藍色放到低三個字節,且都是高比特對齊。低比特空置。轉換後屏幕即可正常顯示。
边栏推荐
- 统计无向图中无法互相到达点对数[经典建邻接表+DFS统计 -> 并查集优化][并查集手册/写的详细]
- Other service registration and discovery
- 根据文件名批量生成文件夹
- 基于SSMP的宠物医院管理系统
- Sword finger offer 10- ii Frog jumping on steps
- 解决STC8G1K08程序不能运行的问题和端口配置
- Is there anyone who doesn't know the three cores of concurrent programming?
- Flink 实战问题(七):No Watermark(Watermarks are only available EventTime is used)
- CEC-I 中华学习机使用说明与问答
- ESP32-SOLO开发教程,解决CONFIG_FREERTOS_UNICORE问题
猜你喜欢

MATLAB data type - character type
![[UVM actual battle== > episode_3] ~ assertion, sequence, property](/img/78/7ce3a9a4e933a58f90478be53e6e61.png)
[UVM actual battle== > episode_3] ~ assertion, sequence, property

Mindspire, a domestic framework, cooperates with Shanshui nature conservation center to find and protect the treasure life in the "China water tower"

1+1<2 ?! HESIC论文解读

Implementation of ARP module in LwIP

Kubeadm create kubernetes cluster

ESP32-SOLO开发教程,解决CONFIG_FREERTOS_UNICORE问题

Moher College -x-forwarded-for injection vulnerability practice

Amway! How to provide high-quality issue? That's what Xueba wrote!

Understanding of "the eigenvectors corresponding to different eigenvalues cannot be orthogonalized"
随机推荐
Amway! How to provide high-quality issue? That's what Xueba wrote!
统一结果集的封装
光谱共焦如何测量玻璃基板厚度
Kubeadm create kubernetes cluster
Xiaobai looks at MySQL -- installing MySQL in Windows Environment
redis详细教程
05 | 規範設計(下):commit 信息風格迥异、難以閱讀,如何規範?
ESP32-SOLO开发教程,解决CONFIG_FREERTOS_UNICORE问题
How to control the quality of HD slip ring in the production process
2022健康博览会,山东养生保健展会,产后健康、睡眠健康展
大赛报名 | AI+科学计算重点赛事之一——中国开源科学软件创意大赛,角逐十万奖金!
find_circ详细使用指南
Redis detailed tutorial
高清滑环生产过程当中的质量如何把控
记录一次换行符引起的bug
Lwip之ARP模块实现
【leetcode】275. H index II
Freescale 单片机概述
目前哪个证券公司炒股开户是最好最安全的?
Serial port debugging tool mobaxtermdownload