spi+rgb树莓派 spi 液晶屏屏的spi可以外置吗

还没有帐号? 赶紧
用户版块帖子
发布一个emWin外置GB2312或者XBF字体到SPI 或者NOR的完整方案
在线时间20779小时
铜币18454威望2666贡献值0银元0
本帖被 eric2013 执行取消加亮操作()
说明:0. GB2312编码和Unicode编码的XBF字体的配置是一样。1. 支持12点阵,16点阵,24点阵和32点阵的汉字显示。2. 支持12点阵,16点阵,24点阵和32点阵的ASCII半角和全角字符。3. 提供字体放在spi flash和nor flash两种方法,不使用文件系统,实际测试放在spi flash显示速度较快。4. 使用文件系统时,将字库放到SD等外部存储器中的方法在我们的60期emWin教程里面已经有了,就不再重新制作了。5. NOR FLASH中的字库通过JLINK进行下载,SPI FLASH中的字库通过SD进行复制。=======================================================================GB2312编码宋体显示效果:=1200) window.open('/attachment/Fid_25/25_58_a2a07db0c09fc0b.png?8');" style="max-width:1200" onload="if(is_ie6&&this.offsetWidth>1200)this.width=1200;" >Unicode编码的XBF字体=1200) window.open('/attachment/Fid_25/25_58_118e0.png?8');" style="max-width:1200" onload="if(is_ie6&&this.offsetWidth>1200)this.width=1200;" >=======================================================================GB2312编码宋体外置到SPI FLASH显示速度测试:工程下载:第71期:外置字库到NOR FLASH(GB2312字库)/s/1c0lOSpi第71期:外置字库到SPI FLASH(GB2312字库)/s/1sjsPRrB第71期:外置字库到SPI FLASH(XBF格式字体)/s/1kTEGRhP
努力做的更好,专注,追求卓越&&Fighting!!!
在线时间576小时
铜币354威望5贡献值0银元0
支持,多谢
在线时间522小时
铜币564威望95贡献值0银元0
在线时间125小时
铜币180威望12贡献值0银元0
这个gb2313 字体做法,在emwin手册上没有看到啊。。。貌似是借用了ucgui中方法,是这样吗???和xbf模式比较,两者运行速度有何区别
在线时间20779小时
铜币18454威望2666贡献值0银元0
回 myxiaonia 的帖子
:这个gb2313 字体做法,在emwin手册上没有看到啊。。。貌似是借用了ucgui中方法,是这样吗???和xbf模式比较,两者运行速度有何区别 ( 12:56) 是的。比xbf字体显示要快。
努力做的更好,专注,追求卓越&&Fighting!!!
在线时间19小时
铜币14威望0贡献值0银元0
果然精华,谢谢分享~
在线时间54小时
铜币89威望5贡献值0银元0
好东西一定要顶起来
在线时间400小时
铜币71威望0贡献值0银元0
正需要&&非常感谢
访问内容超出本站范围,不能确定是否安全
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
您目前还是游客,请
&回复后跳转到最后一页
Powered by & Copyright Time now is:07-11 03:24 &
版权所有 Gzip enabled
Total 0.093919(s) query 5,29195人阅读
&&& 树莓派官方支持av及HDMI输出,板子上预留了一个csi接口的液晶显示屏,但是一直没有相应的模组出现。在很多应用场合我们需要一些小型的液晶屏显示一些基本的信息,所以小屏驱动很是必要。
&&& 在github上有一个开源工程:notro/fbtft,完整的实现了framebuffer驱动,让树莓派完美支持tft液晶,下面对移植过程进行一个简单说明
一、官网地址
工程首页:/notro
fbtft源码:/notro/fbtft
编译好的固件(基于3.12.25+):/notro/rpi-firmware
使用说明(wiki):/notro/fbtft/wiki
二、使用编译好的固件(3.12.25+)
环境:树莓派
/notro/rpi-firmware
1、打开SPI
树莓派默认spi是关掉的,我们需要打开
sudo vi /etc/modprobe.d/raspi-blacklist.conf
把下面这句话前面的#号删掉
blacklist spi-bcm2708
1)以模块的形式编译进内核(需要手动或脚本加载模块)3.12.25+(试验成功)
sudo REPO_URI=/notro/rpi-firmware rpi-update
2)直接编译进内核(笔者没有试验)
sudo REPO_URI=/notro/rpi-firmware BRANCH=builtin rpi-update
3)以模块的形式编译进内核(需要手动或脚本加载模块,最新版本,笔者试过启动不起来,不知道哪出问题)
sudo REPO_URI=/notro/rpi-firmware BRANCH=latest rpi-update
4)直接下载压缩包,手动安装(适合树莓派不能联网的时候)
http://tronnes.org/downloads/-wheezy-raspbian--fbtft-master-firmware.zip
1)手动加载模块:
sudo modprobe fbtft_device name=adafruit22
&&& name后面的名字,要跟相应的液晶驱动芯片移植
&&& 笔者使用的液晶芯片为:fb_ra8875,所以这里写的是:er_tftm050_2
&&& 其它芯片请查阅:/notro/fbtft/blob/master/fbtft_device.c 文件
正常会提示以下信息
fbtft_device:& SPI devices registered:
&& fbtft_device:&&&&& spidev spi0.0 500kHz 8 bits mode=0x00
&& fbtft_device:&&&&& spidev spi0.1 500kHz 8 bits mode=0x00
&& fbtft_device:& 'fb' Platform devices registered:
&& fbtft_device:&&&&& bcm2708_fb id=-1 pdata? no
&& fbtft_device: Deleting spi0.0
&& fbtft_device:& GPIOS used by 'adafruit22':
&& fbtft_device:&&& 'reset' = GPIO25
&& fbtft_device:&&& 'led' = GPIO23
&& fbtft_device:& SPI devices registered:
&& fbtft_device:&&&&& spidev spi0.1 500kHz 8 bits mode=0x00
&& fbtft_device:&&&&& fb_hx8340bn spi0.0 32000kHz 8 bits mode=0x00
&& graphics fb1: fb_hx8340bn frame buffer, 176x220, 75 KiB video memory, 16 KiB buffer memory, fps=20, spi0.0 at 32 MHz
在/dev/目录下出现: /dev/fb1设备
2)自动加载模块
sudo vi& /etc/modules
加入以下语句,既可以在启动时自动加载模块
spi-bcm2708
fbtft_device name=er_tftm050_2&
speed= fps=25 verbose=0
红色部分根据实际情况调整,可能出现花屏现象
4、使用(官方给出的方法,笔者测试不成功)
1)手动启动x11和控制台到新的液晶屏
X Windows显示在fb1上:
$FRAMEBUFFER=/dev/fb1 startx
Console显示在fb1上: &
$con2fbmap 1 1
2)自动登陆x11
sudo vi /etc/inittab
&&& #1:2345:respawn:/sbin/getty --noclear 38400 tty1
&&& 1:2345:respawn:/bin/login -f pi tty1 &/dev/tty1 &/dev/tty1 2&&1
sudo vi /etc/rc.local
&&& su -l pi -c &env FRAMEBUFFER=/dev/fb1 startx &&
5、使用(笔者使用这个测试通过)
1)将fb0上的内容直接拷贝到fb1上,fb0和fb1同步
/notro/fbtft/wiki/Framebuffer-use#framebuffer-mirroring
$git clone /tasanakorn/rpi-fbcp
$cd rpi-fbcp/
$mkdir build
$cd build/
$sudo install fbcp /usr/local/bin/fbcp
启动:fbcp &
关闭fbcp:killall fbcp
2)启动时使用fb1
$sudo apt-get install xserver-xorg-video-fbdev
$sudo vi /usr/share/X11/xorg.conf.d/99-fbdev.conf
加入以下语句:
Section &Device& &
& Identifier &myfb&
& Driver &fbdev&
& Option &fbdev& &/dev/fb1&
EndSection
启动:startx
apt-get -y install fbi
fbi -d /dev/fb1 -T 1 -noverbose -a test.jpg
三、由内核及源码编译
1、下载、编译内核源码:
2、下载、编译fbtft源码
$cd linux(进入下载好的内核源码目录)
$cd drivers/video
$git clone /notro/fbtft.git(下载fbtft源码,也可以在别的地方下载好,拷贝过来)
&& 修改内核源码的Kconfig及Makefine
& Add to drivers/video/Kconfig:&& source &drivers/video/fbtft/Kconfig&
& Add to drivers/video/Makefile:& obj-y += fbtft/
$make menuconfig(在配置界面加入所选用液晶的驱动支持)
Device Drivers
Graphics support
&M& Support for small TFT LCD display modules
FB driver for the HX8353D LCD Controller
FB driver for the ILI9320 LCD Controller
FB driver for the ILI9325 LCD Controller
FB driver for the ILI9340 LCD Controller
FB driver for the ILI9341 LCD Controller
FB driver for the ILI9481 LCD Controller
FB driver for the ILI9486 LCD Controller
FB driver for the PCD8544 LCD Controller
FB driver for the RA8875 LCD Controller
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:984685次
积分:6391
积分:6391
排名:第3595名
原创:99篇
转载:21篇
评论:198条
(3)(7)(5)(5)(7)(1)(3)(1)(1)(2)(1)(12)(9)(48)(1)(4)(10)博客访问: 182995
博文数量: 29
博客积分: 1933
博客等级: 上尉
技术积分: 877
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
LCD与CPU的接线分控制线和数据线,控制线一般基于SPI协议,我们初始化LCD的寄存器就是通过这个,在主芯片的输出格式固定的前提之下,调LCD
也就是剩下始化寄存器而已,一般LCD移植,我们就是要关心这部分;数据线就是用来传送像素数据到LCD,这部分一般不需要我们来控制了,只要接线没问
题,一般就是OK的。&& 我一直不解既然这部分是定死的代码,为何不有IC厂商做成firmware,这样岂不能省出控制线部分,有位老兄这样解释:
我们可以从另一个角度来看,初始化寄存器的数值充其量也就十几B,远远达不到1KB。如果仅仅为这几十B的数据而添加一个存储设备,无形中增加了成本。所以很多LCD在使用之前都需要初始化其寄存器。呵呵,技术上讲不通的,都是因为COST& DOWN。
下面针对ILI9481DS的driver ic 讲解一下控制部分也就是SPI部分,下面是ili9481ds SPEC 的Serial Interface时序图:
&从上图可以提取以下信息:
1)SCL的上升沿LCD 读取数据,下降沿SDA上的电平变化
2)传输单位为9bit,其中第一个bit 用来区分下面的8bit是command还是data, 第一个bit为0则是cmd,为1这是data
于是代码如下,分发命令和数据两个函数:
发命令的函数
static&void&ILI9481DS_spi_write_cmd_byte(u8&val)&&{&&&&&&&&&&int&i;&&&&&&&&&&&&&&&&&&&&gpio_set_value(spi_cs,&0);&&&&&&&&&&&&&gpio_set_value(spi_sclk,&0);&&&&&&&&&&&&&&&&&&&span&style="color:#ff6666;"&gpio_set_value(spi_sdi,&0);&&&&&&&&&&&&&&&&&&&udelay(1);&&&&&&&&&&gpio_set_value(spi_sclk,&1);&&&&&&&&&&udelay(1);&&&&&&&&&&&&&&for&(i&=&0;&i&&&8;&i++)&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&gpio_set_value(spi_sclk,&0);&&&&&&&&&&&&&&if&(val&&&bit_shift[i])&&&&&&&&&&&&&&&&&&&gpio_set_value(spi_sdi,&1);&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&gpio_set_value(spi_sdi,&0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&udelay(1);&&&&&&&&&&&&&&gpio_set_value(spi_sclk,&1);&&&&&&&&&&&&&&udelay(1);&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&if&(gpio_get_value(spi_sdi))&{&&&&&&&&&&&&&&&&&&&&&&&&gpio_set_value(spi_sdi,&0);&&&&&&&&&&}&&&&&&&&&&&&&&&&&gpio_set_value(spi_cs,&1);&&&&}&&
发数据的函数
static&void&ILI9481DS_spi_write_data_byte(u8&val)&&{&&&&&&&&&&int&i;&&&&&&&&&&&&&&&&&&&&gpio_set_value(spi_cs,&0);&&&&&&&&&&&&&gpio_set_value(spi_sclk,&0);&&&&&&&&&&&&&&&&&&&span&style="color:#ff6666;"&gpio_set_value(spi_sdi,&1);&&&&&&&&&&&&&&&&&&&&&udelay(1);&&&&&&&&&&gpio_set_value(spi_sclk,&1);&&&&&&&&&&udelay(1);&&&&&&&&&&&&&&for&(i&=&0;&i&&&8;&i++)&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&gpio_set_value(spi_sclk,&0);&&&&&&&&&&&&&&if&(val&&&bit_shift[i])&&&&&&&&&&&&&&&&&&&gpio_set_value(spi_sdi,&1);&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&gpio_set_value(spi_sdi,&0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&udelay(1);&&&&&&&&&&&&&&gpio_set_value(spi_sclk,&1);&&&&&&&&&&&&&&udelay(1);&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&if&(gpio_get_value(spi_sdi))&{&&&&&&&&&&&&&&&&&&&&&&&&gpio_set_value(spi_sdi,&0);&&&&&&&&&&}&&&&&&&&&&&&&&&&&gpio_set_value(spi_cs,&1);&&&&}&&
两个函数的区别仅仅是红色标识部分!
补充一点,关于通过SPI写入lcd的数据,什么是cmd什么是data,可以看一下这个帖子
阅读(8199) | 评论(0) | 转发(3) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 三星rgb真4k液晶屏 的文章

 

随机推荐