荔枝派Licheepi nano裸机移植ZLG_GUI和3D旋转立方体
一:前言
以前申请到了荔枝派zero,在发了两个开箱贴后就放在一边吃灰了。后来又购买了荔枝派nano,刷了几个教程中的系统之后又放到一边吃灰了。虽然有屯板子的习惯,却没有使用板子的能力。
后来,经过断断续续的摸索和群里面的新手教程,终于搭建好了Licheepi Nano的交叉编译环境,自己GCC了一个hellowworld传输到了开发板并运行了起来。可是......对,于是又继续吃灰。
再后来,在大神 @晕哥 的 填坑网 (https://debugdump.com/index.html)看到了 另一个大神@达克罗德 的几篇帖子 ,竟是生生的写出了Licheepi nano的裸机代码!此代码包含了GPIO、timer、定时器、I2C、SPI等基本操作,最关键的是,它直接支持了对屏幕的操作,并剥离出了显示驱动,非常方便使用。 于是怀着敬畏的心情,将大神放出的源代码下载了下来,并经过一番摸索实现了裸机的操作和程序的下载。在此基础上,移植了ZLG_GUI和3D旋转立方体的演示程序,由于我以前移植过很多遍,所以很方便就移植好了。大神的源地址:F1C100S裸奔framebuffer+PWM+GPIO驱动
为了总结使用过程和方便比我还小点的小白们,特写了此篇文章,从编译环境的搭建到程序的修改和下载运行等的全教程。
然后,还是要感谢填坑网,感谢达克罗德大神,也感谢荔枝派的创造者@泽畔无材 和其他创造者和贡献者,他们的工作和贡献让世界变得更加美好(好大的概括)。本教程中的代码除个人创造部分,全部来源于网络,移植于网络,最终,也将免费贡献于网络(如果有侵权行为,请告诉我,我会尽快删除)。但是,辛苦不能白费。所以,如果你有幸看到了本文,并且使用了本文内容或转载了本文,请注明出处和保留作者,然后你就可以大方的使用了。谢谢。
好了,正文开始。
二:简介
Licheepi Nano 是荔枝派推出的一款超高性价比的跨界开发板,支持linux、RTT、裸机等开发环境。
淘宝网:Licheepi Nano
荔枝派社区:http://bbs.lichee.pro/
其他资料在 荔枝派社区 中基本都能找到地址。
当然,你也可以在填坑网看大神的填坑历程:https://debugdump.com/t_1623.html
注意:当ubuntu中打开win传过去的文件中存在乱码时,请在win环境下用记事本打开 .c 或.h文件,点击文件->另存为,将下方的 编码 选择为UTF-8 的格式,点击保存并选择是进行覆盖保存,再传入ubuntu就不会乱码了。
三:开始
最基本的要求是:一个带LCD屏的荔枝派,一根USB数据线,一台电脑。选配:TTL串口转接线。
本文使用VMware+ubuntu16.04的环境。
另外,本帖已经与百度达成深度合作,任何本文未提到但你又不懂的都可以去请教他,绝对知无不言。
1:下载代码和编译器
在F1C100S裸奔framebuffer+PWM+GPIO驱动 帖中下载 minimal_f1c100s_framebuffer.zip 和后来更新的一个.c文件。当然,这个帖子中还有其他方面的改动,可以详细看看。
然后,同样是此帖子,下载大神提供的编译器:http://pan.baidu.com/s/1dDtssIt ,或是后面有坑友提供的连接:
https://releases.linaro.org/components/toolchain/binaries/5.3-2016.05/arm-eabi/
选择与电脑相匹配的下载。我的是64位的,就下载了后面那个链接的。
至于周立功的GUIZLG_GUI和3D显示相关的代码,可以在我的另一篇博客园的文章中找到并下载下来,我很早以前就移植并发在网上了(怀念当年在学校中啃3D显示代码的时光......),或是下载最后的完整代码。
将两个压缩包和编译器通过 VMware的 共享文件夹 都放入到ubuntu环境下,或是直接在ubuntu环境中下载。
2:环境搭建
在荔枝派的开源交流群(826307240)中有一篇《基于荔枝派Nano的Linux新手学习笔记》,将它打开,一步一步的操作。当然,如果只是想实现本帖内容的话,只需要按上面实现:虚拟机的搭建、sunxi-tool的安装 这两个教程就可以了。而且它里面的交叉编译链在编译自己的.c文件时不管用,生成的文件下载到开发板不能运行,需要重新安装:
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
然后使用arm-linux-gnueabi-gcc xx.c -o xx 进行编译,将刚编译完的文件复制到共享文件夹,串口软件(如SecureCRT或新手文档中提到的软件)连接后输入 lrz 命令进行文件传输。在开发板的串口中输入chmod 777 xx(刚传进来的可执行文件) 来进行赋权限,然后就可 ./xx 执行了。当然,这个需要TF卡刷群文件中 Nano_pub_V2/image 文件夹下的 .dd镜像。至于TF的烧写方法在荔枝派社区有。好了,这些都是题外话。以后再写一个linux的教程,会详细提到这些。
sunxi-tool 工具的安装 摘录如下:
1)用git clone -b f1c100s-spiflash https://github.com/Icenowy/sunxi-tools.git命令下载,用cd sunxi-tools命令切换到sunxi-tools文件目录
2)用sudo apt-get install libusb-1.0-0-dev命令安装libusb,用sudo su命令切换root 用户,用apt-get install zlib1g-dev命令安装zlib1g
3)用make && sudo make install命令适配 Nano 的下载工具,通过命令 sudo sunxi-fel ver 来确认有无成功进入fel模式
4)报ERROR: Allwinner USB FEL device not found!,重新烧录或重进fel模式,先拉低SPI flash的CS引脚1,再将MicoUSB与电脑连接,在Windows下运行 zadig-2.3.exe,点击 Options -> List All Devices,选择 WinUSB (v6.1.7600.16385),点击 【Install WCID Driver】安装驱动(教程https://debugdump.com/t_993.html)
5)右击我的电脑选择管理->服务和应用程序->服务,在弹出的对话框找到VMware USB Arbitration Service 右击选择启动设置为自动启动,在虚拟机中的可移动设备中选择连接该板(教程https://blog.csdn.net/u013064187/article/details/41894021)
6)用sudo sunxi-fel ver命令测试成功进入fel模式,断开SPI flash的CS引脚1与GND的连接,用cd u-boot命令切换到u-boot文件目录,用sudo su命令切换root 用户,用sunxi-fel -p spiflash-write 0 ./u-boot-sunxi-with-spl.bin命令下载程序
7)断电连接LCD和串口E0、E1,上电查看LCD显示,打开Xshell 5软件选择连接->SERIAL,设置波特率115200,连接后发送bdinfo,查看接收信息
”
3:编译测试
将三个文件夹分别解压到合适的目录下。我的放在Download文件夹下。然后将fb-fc100s.c复制替换到minimal_f1c100s_framebuffer\minimal_f1c100s\driver 文件夹下。至于为什么,你仔细看一遍帖子就知道了。
将解压的编译器 gcc-linaro-5.3.1-2016.05-x86_64_arm-eabi 放到/opt文件夹下(不放也可以,但后边的路径自己要改一下)。然后你有两种选择,一是参考《基于荔枝派Nano的Linux新手学习笔记》中安装交叉编译链 的步骤,将其中的编译链替换成自己刚刚解压的这个,其他照做。或是使用临时的方法,每次使用前都要执行一次的(我用的就是这个方法):
终端中输入 sudo su ,然后输入密码进入root模式,然后输入 export PATH=$PATH:/opt/gcc-linaro-5.3.1-2016.05-x86_64_arm-eabi/bin (注意替换为自己下载的编译链的名字和放置的实际地址),既将编译链临时加入到路径中。关闭终端后再开启需要重新输入。
终端中cd 到minimal_f1c100s_framebuffer\minimal_f1c100s 文件夹下,然后输入 make ,回车开始编译。当提示什么错误时,你需要再看看交叉编译环境的搭建部分。
无误后,会提示 bootloader size =1800等, 并且当前文件夹目录下多出一个build文件夹。cd build 到build文件夹下,按照新手学习笔记中的方式进行程序下载:
先将flash的1脚拉低,然后插入usb供电,进入fel下载模式,以后每次下载程序都要这样。此时VMware的 虚拟机->可移动设备 中会多出 onda WINusb Generic Device 的选项,点击连接。然后断开flash的拉低。
输入 sunxi-fel -p spiflash-write 0 ./firmware.bin 进行下载。成功后断电重新供电,可以看到屏幕亮了。说明测试成功。
4:移植ZLG_GUI
ZLG_GUI是周立功公司提供的一套适用于单片机液晶屏的点阵式GUI,功能丰富,硬件要求低,移植及其简单。
将ZLG_GUI文件夹复制到minimal_f1c100s 文件夹下。
首先,要进行规范性修改。将下面所有的.h文件和.c文件的.H .C统一改写成小写的。另外,在.c文件中将包含的 #include<xxx.h>中统一改写成和文件名大小写一致的内容,否则编译报错。
对于这个GUI,只要实现 lcmdrv.c中的几个基本的初始化、画点、清屏三个函数就够了。可以直接在此处修改,也可以新建一个Mycommon.c和Mycommon.h来实现。代码如下:
1 #include <stdint.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <malloc.h>
5 #include <dma.h>
6 #include <framebuffer.h>
7
8 #include <types.h>
9 #include <common.h>
10
11
12 framebuffer_t fb_f1c100s;
13 render_t* render;
14
15 /*初始化屏幕*/
16 void Screen_Init(void){
17 fb_f1c100s_init(&fb_f1c100s);
18 render = fb_f1c100s_create(&fb_f1c100s);
19 }
20 /*画点函数*/
21 void Set_Point(int x,int y,uint32_t color){
22 ((uint32_t*)render->pixels)[x+y*800] = color;
23 }
24 void Fill_Screen(uint32_t color){ //屏幕填充函数
25 for (int i = 0; i < render->pixlen/4;i++)
26 {
27 ((uint32_t*)render->pixels)[i] =color;
28 }
29 }
30 /*点色获取*/
31 uint32_t Get_Point(int x ,int y){
32 return ((uint32_t*)render->pixels)[x+y*800];
33 }
34 /*将缓冲buf刷到屏幕上显示*/
35 void Show_Screen(void){
36 fb_f1c100s_present(&fb_f1c100s, render);
37 }
38 void Screen_Setbl(void){//背光
39 fb_f1c100s_setbl(&fb_f1c100s, 100);
40 }
都是原来main.c中的函数。
-----------------------------------------2019-10-26 补充-------------------------------------------------
上面的 800是指屏幕的宽度为800(用的屏幕的分辨率为800x480的),若是该屏幕分辨率可以更改此值。也可以自行提取为宏定义(在挖坑网中看到有人这么建议的)。
----------------------------------------------------------------------------------------------------------------
在lcmdrv.c中包含进Mycommon.h,并将上面的代码分别移植到lcmdrv.c下对应的函数下。
main.c中加入 #include <config.h>,这个是调用ZLG_GUI唯一需要包含的头文件。
main函数中注释掉不必要的函数,在while 前加入新移植的初始化函数,加入屏幕填充函数,划线函数,显示函数:
GUI_Initialize();
GUI_FillSCR(0x00FFFFFFU);
GUI_Line(0,0,800,480,0xF000FF00);
GUI_Exec();
Screen_Setbl();
r然后编辑Makefile文件:在SRC_C部分加入
SRC_C +=\
ZLG_GUI/ConvertColor.c \
ZLG_GUI/font5_7.c \
ZLG_GUI/FONT8_8.c \
ZLG_GUI/FONT24_32.c \
ZLG_GUI/GUI_BASIC.c \
ZLG_GUI/GUI_StockC.c \
ZLG_GUI/lcmdrv.c \
ZLG_GUI/loadbit.c \
ZLG_GUI/menu.c \
#ZLG_GUI/spline.c \ #此处有 math.h 中函数找不到的报错,先注释掉,后面进行解决
ZLG_GUI/windows.c \
INCDIRS下面加入: INCDIRS += -I3Ddisplay -Ilib
保存。然后终端输入 cd .. 回到minimal_f1c100s文件夹,make 开始编译。若还有错误,请按照提示进行解决。无误后,cd build ,并再次拉低flash进行下载。重新上电后可以看到一条斜线,说明移植ZLG_GUI 成功。
5:移植3D立方体程序
我以前花时间整理好了,移植起来也很快,实现了画点函数基本上就能直接用了。所以包含进 config.h就可以了。同时要修改Makefile,将.c文件和.和文件夹都写进去。但是编译后会发现,cos等函数找不到。所以在 Makefile 文件中的 -lgcc 后面加上 -lm来链接静态库。可是此时又蹦出来很多的错误。一番搜索下,意思是裸机没有除法造成的(当然,本来来的函数中就有个除法,既然能用,说明是别的问题)。自从与百度达成深度合作后,事情方便了很多,于是一番搜索加实验。反正各种处理后的结果是,没处理好。好吧,此路不通。只好换个方法。
自己建一个Mymath.c,从网上找到纯c编写的三角函数等的实现方法,复制,去掉空白字符(可能会有此类的报错,只要一个一个删除掉上面的空白处就好了),将需要math库的地方加进头文件。编译。成功!以后再慢慢的修改实现标准math库的移植。
好了,main函数中加入3D显示程序,立方体就旋转起来了。(额......由于gif图片的压缩,看起来变得好难看......其实实际显示还是很不错的。)
四:最后
大神的裸机开发包还包含了其他操作,而且貌似大神都移植好了NES,不过没放出源码,以后我得自己移植。可悲的是,人家都能写出来,咱都不会用......此处只做抛转,希望板子不要再吃灰了。
我想画一个一荔枝派Nano为基础的掌机,或是一个拓展中心,左右能插掌机键盘,下面能插全键盘或数字键盘,就是一个拓展中心的那种。然后开发能够以linux、RTT、裸机等开发,或是本身为带python的linux或是拓展屏幕的Micropython,能够插上全键盘后直接脱机写程序的(类似C.H.I.P)。外壳都是3D打印。这么一想,人生苦短,要学的东西还真多啊!
好了,全部代码如下:https://files.cnblogs.com/files/zhinianzhizhan/minimal_f1c100s_framebuffer.rar
---------------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------------------------------------
后来大神@晕哥 下载体验了本demo,说有整数类型定义错误,不过我前面编译时没发现。所以若是有同学也出现这个问题并且不会解决的话,可以下载他编译过的试试:https://files.cnblogs.com/files/zhinianzhizhan/minimal_f1c100s_fb_zlggui.rar 。在此感谢 @晕哥 的修改。
我会再补一些3D方面的显示,并且尽量使用之前实现了的函数。如果有感兴趣的,可以私信我,我们一起探讨。
--------------------------------------2019-10-26补充-----------------------------------------------------------------------
我后来用Python实现了 文字旋转时钟 ,其实就是套用的这个C语言版本的旋转立方体的代码。等我有空了(额.....没准......)再移植为C语言的再跑一跑。
作者:执念执战
QQ:572314251
微信:聊技术还是用QQ吧
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------2020-4-30补充--------------------------------------------------------------------------------------------------------
好几个人问我要过文中那个文档了。这个是群里面不知谁写的,当年的群貌似已经解散了。。。。。反正群里没那个东西了。
这个不是我写得到,我也找不到是谁写的了。若有原作者可以联系我我备注上。
---------------------------------------------------------------------------------------------------------------------------------------------------------------
本文水平有限,内容很多词语由于知识水平问题不严谨或很离谱,但主要作为记录作用,能理解就好了,希望以后的自己和路过的大神对必要的错误提出批评与指点,对可笑的错误不要嘲笑,指出来我会改正的。 -------------随梦,随心,随愿,执念执战,执战苍天!
荔枝派Licheepi nano裸机移植ZLG_GUI和3D旋转立方体的更多相关文章
- ZLG_GUI和3D显示的移植
最近学习NRF51822,想在OLED上移植个强大的GUI ,本来想学习emWIN的,甚至想直接学习自带GUI的嵌入式操作系统RTThread,但是......哎,太懒了.....现在觉得ZLG_GU ...
- 为嵌入式全志V3s荔枝派板卡添加USB MT7601U(小米随身WIFI)驱动
折腾了了一天终于scan出环境热点了,感觉本来挺简单的事情,网上教程一大把还费了一天的劲,很丧.不过网上教程虽多,但是还还是有些不同之处的,现在特意总结一下 全志V3s荔枝派板卡 添加该驱动的过程. ...
- 树莓派和荔枝派,局域网socket 通信
在虚拟机上面实现了socket 之间的通信之后,突发奇想,想要实现树莓派和 荔枝派zero之间的通信. 1.直接将虚拟机下面的程序复制过来,重新编译并且运行.发现是没有办法进行通信的.客户端一直报错: ...
- 嵌入式全志V3s荔枝派板卡移植 aircrack-ng
我使用的是aircrack-ng-1.1.tar.gz这个版本的包. 编辑common.mak,在27行COMMON_FLAGS = 下加入嵌入式开发的环境 -I 和 -L : COMMON_CFLA ...
- 为嵌入式mplayer移植添加ALSA音频驱动(全志V3s荔枝派zero)
首先准备mplayer和alsa_lib,我的是bulidroot添加后编译自动下载的,版本分别是alsa-lib-1.1.4.1和mplayer-1.3.0. 首先编译alsa_lib: ./con ...
- 荔枝派nano例子
买回来,先短接flash芯片的14脚,然后上电,再断开14脚,开始怎么折腾都不行,最后发现是android线的问题,换成jlink ob送的android线就能找到设备了,真崩溃 lsusb,应该能看 ...
- 荔枝派zero从焊接到跑起linux
步骤 焊flash芯片(如果大于16M,需要改烧录工具的源码) 焊引脚,为了串口看数据 焊接flash芯片,需要注意1号脚的位置,flash芯片在开发板背面,1号脚位置是靠近麦克风的那边 以下为编译相 ...
- 【安富莱】【RL-TCPnet网络教程】第7章 RL-TCPnet网络协议栈移植(裸机)
第7章 RL-TCPnet网络协议栈移植(裸机) 本章教程为大家讲解RL-TCPnet网络协议栈的裸机移植方式,学习了上个章节讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文 ...
- 小白自制Linux开发板 二. u-boot移植
上一篇:小白自制Linux开发板 一. 瞎抄原理图与乱画PCB 中我们做了一个小型而没用的开发板,用的是Licheepi Nano的镜像,那从本篇开始我们开始自己构建它的灵魂吧. 我们都知道,PC在 ...
- 【linux项目】lichee nano linux烧写
目录 前言 参考: 安装交叉编译链 搭建 SPI FLASH 烧录环境 让芯片进入烧写模式 sunxi 烧写命令 u-boot 裁剪 拉取 u-boot 源码 配置 u-boot 检查 flash 驱 ...
随机推荐
- Redis缓存中的数据和数据库不一致
首先关于两者数据的一致性包含有两种情况: (1)缓存中有数据时,那数据库中的数据要和缓存中的数据相同: (2)缓存中没有数据时,数据库中的数据必须是最新的. 如果不符合以上两种情况,就属于缓存和数据库 ...
- 如何查看navicat已连接用户的密码
1:从注册表中查看加密后的密码. 1.1:windows键+r,输入 regedit 1.2:在注册表中找到 \HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\navic ...
- laravel视图响应
1.输出json $data = [ 'id' => 1, 'name' => 'jack', ]; return response()->json($data); 2.重定向 // ...
- 嵌入式开发er的C语言能力自测(面试)题---top 16
准备面试刷到的,链接里是原文和答案: (a-c-test-the-0x10-best-questions-for-would-be-embedded-programmers) 这里我先只给出问题,可以 ...
- RayLink远程控制软件:叮~你收到一份年度关键词报告
叮~~~ 今天是12月31日,2022年的最后一天.今天过后,明天就是2023年啦!R君提前恭祝大家新年快乐,温情满满的跨年之际,RayLink感恩2022遇见大家,2023还请大家多多关照~ 202 ...
- string 字符串模块操作
1. 常用方法 2.字符串常量 3.字符串模板Template 通过string.Template可以为Python定制字符串的替换标准,下面是具体列子: >>>from strin ...
- Android studio学习第一期
下载工具 Android studio 参考博客https://blog.csdn.net/weixin_45406151/article/details/114531103 汉化完成 并创建了虚拟手 ...
- 基于Linux的ssh协议配置sftp
sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装 1. 创建sftp组 创建完成之后使用cat /etc/group命令组的信息 ...
- 使用jquery+layui 做一个输入搜索下拉 类似lay-search
效 果: 因为需要做一个搜索出现下拉然后点击 自动填装input 内容的 东西. 一开始使用lay-search 的控件去弄. 但是无法控制里面的内容.所以用了一些笨方法去弄 废话不说了, html ...
- 记录一次echarts 中bar 定时跳跃并显示内容
查看echarts api ----- https://www.echartsjs.com/zh/api.html#echarts 搜索 1.dispatchAction 执行的关键 2.hi ...