@chengwei_peng 好的,感谢!
IAMLIUBO 发布的帖子
-
回复: 第二次调试MIPI屏幕,套路居然又不太一样?
@lovexulu
我也不是很清楚每一个参数改大或者改小会实际影响到显示的哪部分,等有时间还是要好好研究下,还是比较喜欢MIPI接口的,速度快,管脚少(其实别的就会个SPI ) -
开源!教你自制最精致的Pi!
是什么
M5Pi是我最近自制并开源的嵌入式Linux开发板,基于全志科技的F1C200s芯片,板载MPU6050姿态传感器,拥有一个320x240分辨率,2寸大小的全贴合电容触摸显示屏,一个1W的小喇叭可以用来播放声音,Wi-Fi用的是ESP8089,最重要的是有一个精美的外壳,这也是为什么我称它为最精致的“Pi”的原因,项目完全开源,PCB使用的开源软件KiCAD绘制,部分3D模型使用的开源软件FreeCAD绘制,系统使用的比较流行的buildroot制作,还用LVGL写了个简单的Launcher(还没完全写完)。为什么做
其实接触嵌入式Linux已经蛮久了,从最开始的树莓派,到后来NanoPi、香橙派、荔枝派等等,基本上也是都有玩过,还在B站录制过几集纯萌新入门视频,不过平常工作也不是主要做Linux相关的,所以理解的和讲的都很浅薄,真正让自己想要从零开始做一个属于自己的“Pi”,还是去年看到稚晖做的小电脑,当时觉得非常不错,自己也想去做一个,不过后面实际尝试了下,难度系数还是颇高的,所以当时用ESP32-S2做了个单片机版的小电视玩了玩,不过这个想法从未消失。做了哪些尝试
第二次想做,应该是在去年的十一月份左右,因为当时M5Core2玩了蛮久了,觉得这个尺寸,这个外壳,还有触摸的屏幕简直是太棒了,刚好我近水楼台先得月,手头也有外壳也有显示屏,所以当时又想去尝试一下,还特地选择了全志的H5,然后各种逛论坛,找资料,下载资料,真正开始要画PCB的时候,就觉得还是差点儿事了,因为H5没有内置DDR,我还想加一个eMMC,这部分属于高速PCB范畴了,挺难整的,只是简单打了一版布局的PCB,看了看主要元器件就放弃了,因为受制于外壳的尺寸,正面空间还是蛮小的,放背面我还不确定跟屏幕会不会有干涉,以及发热会不会影响屏幕等,就又咕掉了。背面还有两颗DDR,还没layout就觉得难整了
不过也没有完全咕掉,我还是成功曲线救国,做了一版试了试,不过是用的友善之臂的NanoPi NEO Air核心板,然后画了个扩展版,成功试制了一版,虽然曲线救国,尺寸也不太合适等等众多小问题,但是效果还是非常棒的!跑的是Armbian,驱动屏幕的时候也是翻车了很久,怎么搞都没法点亮,最后发现问题是FPC座子虚焊了… 当时差点儿想拍死自己。
正面看还是蛮不错的,但是看看背面就有点惨不忍睹了…
怎么做的
用NanoPi搞完后,就懒惰了(其实是菜),想用性能高点的CPU,PCB搞不定,PCB能搞定的,性能又不高,陷入了很长时间的CPU选型阶段,总体思想就是选内置DDR的,性能还要高点的,其实刚开始M5Pi没有准备用F1C200s,当时是看上了SSD202,因为刚好我司在做一个项目(Unit V2),刚好也了解一点,但是这个片子的资料需要签NDA,那我后期开源肯定会受到影响,所以还不如选择一款大家用的多,虽然官方也没公开release过任何资料的片子,最后的焦点就放在了F1C和V3s上,虽然V3s性能要比F1C高,但是价格还是要贵一丢丢,而且第一次做,还是找个便宜点的吧,于是就这样定了下来,四月底就正式开始搞了,内置DDR的片子画起来,要简单很多,基本上只要电源没问题,晶振没问题,就可以正常跑起来了…(省略几千字,开发记录可以在坑网看到,链接在文章最后)PCB第一版就可以正常运行,只不过触摸跟LED都画反了,别的没什么大碍,然后软件开发也就挺顺利的,因为aodzip大佬已经做了很多适配了,所以就简单改改设备树之类的,就平平无奇的运行起来了,不如上一次因为焊接问题,结果搞了好几天软件有意思(ahhhh),有点凡尔赛了,其实从开始做,到正常运行还是花了蛮久的时间的,基本都是周末搞,PCB其实也打了好几版,主要是布局好,为了看结构需要打板测试。开发过程中最崩溃的莫过于焊接了,说多了都是泪,焊接太费事了…
收获了什么
M5Pi做了很久,做的还是非常开心的,这种感觉只有自己亲自去做,然后一点点调试,调试一个功能就行一个功能的感觉妙不可言~ 完整的做一个小项目还是比较爽的,建议大家也可以去尝试下,B站很多同学私信我是怎么学习,怎么开发的,我觉得还是多动手,多实践是最好的方法。M5Pi还没有完全开发完成,不过我已经开始着手准备下一个版本了!大感谢
做M5Pi的过程中也收到了很多人的帮助,首先感谢哇酷网(原坑网)的各位坛友,然后是我的BOSS,哈哈,免费提供了我几套外壳(遗憾的是显示屏仓库缺货),还有实验室可以让我在周末瞎搞,再然后是全志的Kirin,还送了我一个哪吒D1开发板,最后就是将各种问题记录并分享出来的网友们!最后,项目是开源的,可以在我的Github仓库找到。
相关链接
https://github.com/imliubo/M5Pi
https://www.bilibili.com/video/BV1RV411W7eH
https://whycan.com/viewtopic.php?id=6402&action=onlyshowauthor本文作者: IAMLIUBO @IAMLIUBO
发表时间: Fri Aug 13 2021 12:49:59 GMT+0800
本文链接: https://blogs.oopswow.com/2021/08/13/How-to-make-a-M5Pi/ -
回复: 第二次调试MIPI屏幕,套路居然又不太一样?
我找到原因了...
商家给我的规格书对不起来!!!
经我实际测试这俩管脚绝对是标反了!!!
经过上面 @lovexulu 大佬提醒后,我又尝试了好几次,那几个参数修改了很多次,一点出画面的感觉都没有,我就有点不明白了,我反复确认了好几遍焊接没问题(之前吃过这个亏...),突发奇想把这俩管脚反一下试试,结果就真有反应了
我是真没想到会是这个原因。。。。
好在我这画转接板的时候预留了这俩跳线位置,还算机智,哈哈明天找供应商算账去。
调整了几个参数后,现在显示一切正常啊,真好啊
-
第二次调试MIPI屏幕,套路居然又不太一样?
三个月之前有调试过一块MIPI接口的小屏幕,最近又买了一款新的MIPI接口的屏幕,本以为会像上次一样顺顺利利的,结果....
废话不多说,这次买的屏幕长这样:
基本参数:
是2通道的MIPI接口,驱动IC是ST7701s,2寸,分辨率480*360。
管脚:
转接板:
数据手册:
ST7701S_SPEC_+V1.1.pdf初始化代码:
/* VFP=VBP=6=VS=6 HFP=HBP=6=HS=220 pll_clock=155; */ WriteComm (0xFF); WriteData (0x77); WriteData (0x01); WriteData (0x00); WriteData (0x00); WriteData (0x13); WriteComm (0xEF); WriteData (0x08); WriteComm (0xFF); WriteData (0x77); WriteData (0x01); WriteData (0x00); WriteData (0x00); WriteData (0x10); WriteComm (0xC0); WriteData (0x2C); WriteData (0x00); WriteComm (0xC1); WriteData (0x08); WriteData (0x02); WriteComm (0xC2); WriteData (0x37); WriteData (0x05); WriteComm (0xCC); WriteData (0x10); ..... // 稍微有点多.... // 下面是我整理过的 {0xFF, 5, {0x77, 0x01, 0x00, 0x00, 0x13} }, {0xEF, 1, {0x08}}, {0xFF, 5, {0x77, 0x01, 0x00, 0x00, 0x10}}, {0xC0, 2, {0x2C, 0x00}}, // SCNL = (0x2c + 1) * 8 = 360 {0xC1, 2, {0x08, 0x02}}, // VFB=0x08 VBF=0x02 {0xC2, 2, {0x37, 0x05}}, // PCLK= 512 + (0x05 * 16) = 592 {0xCC, 1, {0x10}}, {0xB0, 16, {0x04, 0x0E, 0x17, 0x0B, 0x0F, 0x06, 0x08, 0x08, 0x08, 0x24, 0x04, 0x11, 0x0F, 0x2C, 0x33, 0x13}}, {0xB1, 16, {0x0C, 0x16, 0x1D, 0x0E, 0x11, 0x06, 0x08, 0x08, 0x08, 0x24, 0x05, 0x13, 0x11, 0x2D, 0x33, 0x1F}}, {0xFF, 5, {0x77, 0x01, 0x00, 0x00, 0x11}}, {0xB0, 1, {0x54}}, {0xB1, 1, {0x76}}, {0xB2, 1, {0x87}}, {0xB3, 1, {0x80}}, {0xB5, 1, {0x4B}}, {0xB7, 1, {0x85}}, {0xB8, 1, {0x21}}, {0xC1, 1, {0x78}}, {0xC2, 1, {0x78}}, {0xD0, 1, {0x88}}, {REGFLAG_DELAY, REGFLAG_DELAY, { 20 } }, {0xE0, 3, {0x00, 0x00, 0x02}}, {0xE1, 11, {0x02, 0x00, 0x04, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x33, 0x33}}, {0xE2, 12, {0x11, 0x11, 0x33, 0x33, 0x6E, 0x00, 0x70, 0x00, 0x6D, 0x00, 0x6F, 0x00}}, {0xE3, 4, {0x00, 0x00, 0x11, 0x11}}, {0xE4, 2, {0x44, 0x44}}, {0xE5, 16, {0x03, 0x6F, 0x00, 0xFF, 0x05, 0x71, 0x00, 0xFF, 0x07, 0x73, 0x00, 0xFF, 0x09, 0x6D, 0x00, 0xFF}}, {0xE6, 4, {0x00, 0x00, 0x11, 0x11}}, {0xE7, 2, {0x44, 0x44}}, {0xE8, 16, {0x02, 0x6E, 0x00, 0xFF, 0x04, 0x70, 0x00, 0xFF, 0x06, 0x72, 0x00, 0xFF, 0x08, 0x6C, 0x00, 0xFF}}, {0xEB, 7, {0x00, 0x01, 0x4E, 0x4E, 0xEE, 0x44, 0x00}}, {0xED, 16, {0x4F, 0x01, 0x23, 0x56, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x65, 0x32, 0x10, 0xF4}}, {0xEF, 6, {0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F}}, {0xFF, 5, {0x77, 0x01, 0x00, 0x00, 0x00}}, {0x11, 0, {0x00}}, {REGFLAG_DELAY, REGFLAG_DELAY, { 120 } }, {0x36, 0, {0x00}}, {0x35, 0, {0x00}}, {0x29, 0, {0x00}}, { REGFLAG_END_OF_TABLE, REGFLAG_END_OF_TABLE, {} }
现在有个疑问是下面的这几个参数,手册中只给了几个范围:
然后卖家给的初始化代码开头的几行注释,跟代码中实际设置的貌似也不一致....
卖家给的:VFP=VBP=6=VS=6 HFP=HBP=6=HS=220 pll_clock=155;
初始化代码计算的:
{0xFF, 5, {0x77, 0x01, 0x00, 0x00, 0x10}}, {0xC0, 2, {0x2C, 0x00}}, // SCNL = (0x2c + 1) * 8 = 360 {0xC1, 2, {0x08, 0x02}}, // VFB=0x08 VBF=0x02 {0xC2, 2, {0x37, 0x05}}, // PCLK= 512 + (0x05 * 16) = 592
HFP和HBP没看到有相关的命令设置...
现在的主要问题是下面这几个参数,我尝试了用各种方式计算,貌似都不对,
lcd_hbp = <>; lcd_ht = <>; lcd_hspw = <>; lcd_vbp = <>; lcd_vt = <>; lcd_vspw = <>; lcd_dsi_if = <0>; lcd_dsi_lane = <2>;
有大佬帮忙看一下吗 (我这里有两个屏幕和两个转接板,有想调的,可以联系我 )
-
golang开发哪吒D1?
众所周知golang是门开发语言,不知道的可以去Google一下,没错就是这家公司主导的一门开发语言,传送门。
我这里只是简单测试一下,发现可以正常运行,编译和运行都还比较简单,代码如下:
package main import ( "time" "fmt" "log" "math/rand" "github.com/Kaey/framebuffer" ) func randInt(min int , max int) int { return min + rand.Intn(max-min) } func main() { fmt.Println("Hello Nezha!This is from golang!") fb, err := framebuffer.Init("/dev/fb0") if err != nil { log.Fatalln(err) } defer fb.Close() fb.Clear(255, 255, 255, 255) time.Sleep(1e9) for x := 0; x < 240; x++ { for y := 0; y < 320; y++ { fb.WritePixel(x, y, randInt(0, 255), randInt(0, 255), randInt(0, 255), 255) } } time.Sleep(1e9) fb.Clear(0, 0, 0, 255) fb.Close() fmt.Scanln() }
上面这些代码主要完成了两件事,一是打印了一句话到终端,二是操作了一下我的MIPI小屏幕,写起来还算简单,语法跟C也有点类似吧。
编译:
GOARCH=riscv64 go build main.go
上传:
adb push main /
运行:
./main #哪吒终端内
几乎不需要太复杂的操作,只需要编译的时候指定一下架构就好了,那么现在支持哪些架构呢?
这里有找到一个链接:
运行效果如下:
-
回复: MCU 上纯软件实现 OpenGL
尝试原作者的工程,在M5Stack Fire上跑一下试试:
颜色好像不太对,有一点需要注意点的是
这里的宽高要对应起来,不然输出的图像会错位,感觉没正常运行是的,别的好像也没有了,这是基于Arduino的工程,TFT_eSPI兼容很多LCD 驱动,还是蛮方便的,传一下完整工程吧,有时间俺也在哪吒上试试。
M5Fire-OpenGL.zip哦,对了,原作者的Arduino被我改成PIO工程了,PIO更好用点?
-
使用OpenCV实时显示USB摄像头画面到屏幕上
前置工作:
在Ubuntu中交叉编译Opencv 4.5.1 运行于Tina Linux中(整合帖)
借助OpenCV实时显示摄像头画面,需要先参考上面的帖子编译好OpenCV。
剩下的工作就很简单了,代码是从stackoverflow借鉴(copy)的,交叉编译下就可以运行了:fbwrite_video.cpp
/** * @file fbwrite_video.cpp * Displays OpenCV video on framebuffer. * Compile with * g++ -o fbwrite_video -lopencv_core -lopencv_highgui -lopencv_imgproc fbwrite_video.cpp * * Contains code from https://stackoverflow.com/questions/4722301/writing-to-frame-buffer */ #include <iostream> // for std::cerr #include <opencv2/opencv.hpp> // for cv::cvtColor #include <fstream> // for ofstream // this is C :/ #include <stdint.h> // for uint32_t #include <sys/ioctl.h> // for ioctl #include <linux/fb.h> // for fb_ #include <fcntl.h> // for O_RDWR struct framebuffer_info { uint32_t bits_per_pixel; uint32_t xres_virtual; }; struct framebuffer_info get_framebuffer_info(const char *framebuffer_device_path) { struct framebuffer_info info; struct fb_var_screeninfo screen_info; int fd = -1; fd = open(framebuffer_device_path, O_RDWR); if (fd >= 0) { if (!ioctl(fd, FBIOGET_VSCREENINFO, &screen_info)) { info.xres_virtual = screen_info.xres_virtual; info.bits_per_pixel = screen_info.bits_per_pixel; } } return info; }; // C ends here int main(int, char **) { const int frame_width = 240; const int frame_height = 320; const int frame_rate = 10; framebuffer_info fb_info = get_framebuffer_info("/dev/fb0"); cv::VideoCapture cap(0); if (!cap.isOpened()) { std::cerr << "Could not open video device." << std::endl; return 1; } else { std::cout << "Successfully opened video device." << std::endl; cap.set(cv::CAP_PROP_FRAME_WIDTH, frame_width); cap.set(cv::CAP_PROP_FRAME_HEIGHT, frame_height); cap.set(cv::CAP_PROP_FPS, frame_rate); std::ofstream ofs("/dev/fb0"); cv::Mat frame; cv::Mat rotation_fream; while (true) { cap >> frame; if (frame.depth() != CV_8U) { std::cerr << "Not 8 bits per pixel and channel." << std::endl; } else if (frame.channels() != 3) { std::cerr << "Not 3 channels." << std::endl; } else { // 3 Channels (assumed BGR), 8 Bit per Pixel and Channel cv::transpose(frame, rotation_fream); cv::flip(rotation_fream, frame, 0); int framebuffer_width = fb_info.xres_virtual; int framebuffer_depth = fb_info.bits_per_pixel; cv::Size2f frame_size = frame.size(); cv::Mat framebuffer_compat; switch (framebuffer_depth) { case 16: cv::cvtColor(frame, framebuffer_compat, cv::COLOR_BGR2BGR565); for (int y = 0; y < frame_size.height ; y++) { ofs.seekp(y * framebuffer_width * 2); ofs.write(reinterpret_cast<char *>(framebuffer_compat.ptr(y)), frame_size.width * 2); } break; case 32: { std::vector<cv::Mat> split_bgr; cv::split(frame, split_bgr); split_bgr.push_back(cv::Mat(frame_size, CV_8UC1, cv::Scalar(255))); cv::merge(split_bgr, framebuffer_compat); for (int y = 0; y < frame_size.height ; y++) { ofs.seekp(y * framebuffer_width * 4); ofs.write(reinterpret_cast<char *>(framebuffer_compat.ptr(y)), frame_size.width * 4); } } break; default: std::cerr << "Unsupported depth of framebuffer." << std::endl; } } } } }
这里分辨率是适配我的小屏幕的,如果用别的屏幕可以修改代码中的分辨率。
CMakeLists.txt
cmake_minimum_required(VERSION 2.8) project( fbwrite_video ) SET(CROSS_COMPILE 1) set(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_BUILD_TYPE "Release") set(CMAKE_C_COMPILER "/path/to/tina-d1-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gcc") set(CMAKE_CXX_COMPILER "/path/to/tina-d1-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-g++") find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) add_executable(opencvTest fbwrite_video.cpp) target_link_libraries(opencvTest "/path/to//risc-v/install/lib/libopencv_world.so.4.5.2")
效果:
俺的B站本站播放:
这里只是简单测试下,大家也可以跑点真正的CV代码,套路都差不多。
-
回复: 第一次调MIPI接口的显示屏,都是什么套路?
疑问:
kernel 配置了DISP2 Framebuffer rotation support> Device Drivers > Graphics support > Frame buffer Devices > Video support for sunxi
编译报错:
全局搜索,找个这两个宏定义,直接替换成对应的数值,可以编译通过:
然后在board.dts中disp节点有旋转选项,按照注释中的说明开启旋转:
按照注释中增加
然后卡在kernel启动:
boot阶段是正常的,logo也有显示,但是无法正常启动kernel,日志级别已经调到最高,没有任何输出。
不过degree角度改成0,也就是不旋转,是可以正常启动,如下:
问:怎么可以让屏幕旋转
-
回复: 第一次调MIPI接口的显示屏,都是什么套路?
更新:
有屏幕的地方就有烂苹果
adb push视频到开发板,使用tplayerdemo播放就可以。
问题是屏幕方向怎么旋转?之前用SPI接口的显示屏可以让显示屏硬件旋转,但是这个屏手册中貌似没找到这个命令
-
回复: 第一次调MIPI接口的显示屏,都是什么套路?
更新:
PCB 工程已放在github: https://github.com/imliubo/kicad-projects
JD9852驱动:
jd9852.tarbrandy文件夹下的放到这个路径下:
tina-d1-open/lichee/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/
kernel文件下的放到这个路径:
tina-d1-open/lichee/linux-5.4/drivers/video/fbdev/sunxi/disp2/disp/lcd/
为什么是两份?因为我看uboot跟kernel的panels.h不太一样,两份驱动还是有些不太一样的。
然后可能还需要修改目录下的makefile跟Kconfig跟panels.c。
话说 tina-sdk 接受用户 contribute 不 -
回复: 第一次调MIPI接口的显示屏,都是什么套路?
更新:
在晕哥指导后,反复查看数据手册和D1_Linux_LCD_开发指南终于出图像了显示貌似还有点问题,GAMA的问题?还需要再调整优化下,不过终于出来了,太感动了。
下面是修改的后DTS LCD节点:
lcd_x = <240>; lcd_y = <320>; lcd_width = <30>; lcd_height = <40>; lcd_dclk_freq = <7>; lcd_pwm_used = <1>; lcd_pwm_ch = <2>; lcd_pwm_freq = <1000>; lcd_pwm_pol = <0>; lcd_pwm_max_limit = <255>; lcd_hbp = <20>; lcd_ht = <304>; /**/ lcd_hspw = <4>; /**/ lcd_vbp = <6>; lcd_vt = <336>; /**/ lcd_vspw = <2>; /**/ lcd_dsi_if = <0>; lcd_dsi_lane = <1>;
不过有点好奇的是,为什么这里的参数会影响到启动?会直接卡死在boot阶段?
等我整理下,把驱动跟PCB工程再分享上来,哈哈哈,开心。
-
回复: 第一次调MIPI接口的显示屏,都是什么套路?
新进展:
修改设备树 &lcd0 节点后,初始化失败:
设备树修改部分:
驱动修改部分:
只修改驱动没有初始化失败,屏幕会一闪一闪(黑色),修改设备树后uboot起不来了,卡在第一张图那里。
-
回复: 第一次调MIPI接口的显示屏,都是什么套路?
@tigger
我感觉应该是也是只在uboot初始化一次,因为启用了BOOT GUI,要是没启用这个应该是在kernel阶段初始化,还不是很熟悉 -
第一次调MIPI接口的显示屏,都是什么套路?
https://bbs.aw-ol.com/topic/263/请问这个树莓派mipi-dsi-显示屏是不是用-接口芯片转的?_=1631153400148
https://bbs.aw-ol.com/topic/311/使用d1驱动树莓派dsi屏幕?_=1631153400151
看两位大佬将树莓派的DSI显示屏调通了,于是乎也想试试,某宝找了一款很小的MIPI接口的显示屏,分辨率240*32(不要问我为啥找这么小的屏,因为我喜欢小巧的<其实是在准备M5Pi2>)。
外观:
管脚图:
也学上面两位大佬,画了个转接板:
原理图:
PCB:
然后就不知道从哪入手了--.
先尝试了下芒果大佬打包的镜像,虽然知道肯定不会亮,主要是自己编译个有点麻烦:
感觉花屏是不是表示转接板没问题?还是?
思路:
先讲下自己的思路,SDK中是支持TFT08006这款屏幕的,也就是店铺里卖的那款屏幕,然后驱动代码也都有,然后上面两位大佬使用的树莓派的屏是有块小芯片,负责初始化屏幕的,所以不需要再次初始化,只需要调整下设备树中lcd节点的参数就可以了,然后我买的这款屏幕是需要初始化的,然后商家也给了份初始化代码和数据手册,是不是仿照TFT08006的驱动修改下就可以了?
初始化代码:
D200N9376V0 MIPI .txt
数据手册:
JD9852_User_Guide_Preliminary_V0.00_20181228.pdf驱动IC是JD9852(京东方?)
SSD_Number(0x04); SSD_CMD(0xDF); //Password SSD_PAR(0x98); SSD_PAR(0x51); SSD_PAR(0xE9)
初始化代码这里有些疑问:
SSD_CMD => sunxi_lcd_cpu_write_index ? SSD_PAR => sunxi_lcd_cpu_write_data? SSD_Number ?????
CMD跟PAR大概知道替换成什么,这个SSD_Number是啥意思?
驱动修改思路:
查看SDK跟TFT08006有关的应该是这两处源码,brandy目录下的应该是boot阶段用的,初始化是在这里?linux-5.4目录下的应该是kernel启动后用的,还需要初始化一次吗?
lichee/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/tft08006.c lichee/linux-5.4/drivers/video/fbdev/sunxi/disp2/disp/lcd/tft08006.c
上面是我大概的思路(可能不对,因为没接触过MIPI这种玩意,有没有大佬指教下?
-
回复: D1编译时约到这个问题怎么解决呢,好像是libgpg-error-1.27里边的问题
好像跟我之前编译R329 Tina报的错误差不多
```bash source build/envsetup.sh lunch r329_evb5-tina make -j1 V=s # ./out/r329-evb5/compile_dir/target/libgpg-error-1.27 patch -p1 < ~/CodingBug/Linux/allwinner/R329/SDK/R329-Tina-Linux/libgpg-error-1.36-gawk5-support.patch # github # patching file lang/cl/mkerrcodes.awk # patching file src/Makefile.am # Hunk #1 succeeded at 266 (offset -27 lines). # patching file src/mkerrcodes.awk # patching file src/mkerrcodes1.awk # patching file src/mkerrcodes2.awk # patching file src/mkerrnos.awk # patching file src/mkstrtable.awk
我修改了下面路径下的文件,SDK太占空间,让我给删除了,没法打patch了,手动改下试试?改完后,单线程编译。
/out/r329-evb5/compile_dir/target/libgpg-error-1.27/src/strerror-sym.cconst char * gpg_strerror_sym (gpg_error_t err) { gpg_err_code_t code = gpg_err_code (err); if (code & GPG_ERR_SYSTEM_ERROR) { int idx; code &= ~GPG_ERR_SYSTEM_ERROR; idx = msgidxof(code); if (idx >= 0) return msgstr[idx]; else return NULL; } if (msgidxof (code) == msgidxof (GPG_ERR_CODE_DIM)) return NULL; return msgstr + msgidx[msgidxof (code)]; }
-
哪吒D1-年轻人的第一块RISC-V开发板开箱
前言不搭后语
上周一收到了我的哪吒D1开发板,这是一款RISC-V架构的开发板,也是基于全志科技首款RISC-V指令集的芯片,集成了阿里平头哥64位C906核心,支持RVV,1GHz主频,可支持Linux、RTOS等系统。没想到全志在线社区的Kirin要亲自送过来,还顺便约了个椰子鸡。上周没来得及仔细把玩一下,刚好周末来个开箱记录下。
Out of the box!
包装非常简约,就用了很常见的这种纸盒,上面印着全志在线四个大字和logo。
打开包装盒分为左右两个分区,左侧是开发板,还装在了一个非常精致的小盒子里,右侧是一些开发板配套的线材和充电头。
将全部内容取出来,可以看到配件还是蛮丰富的,有两根A2C的USB线,一根串口线,一个充电头,还有一些小螺丝,充分保证了上手就可以用。
接下来我们将重点放在装有开发板的这个精致小盒子上,正面也是比较简洁,印有哪吒的字样,还有AWOL全志在线社区的logo,值得注意点是还有一句slogan:
<center>不负所爱 自创奇迹</center>
再来看一下包装盒的底部,清晰度印着开发板的布局图,总体来看跟树莓派B系列的开发板是接近的,这样可以兼容一下树莓派的外设等等。
包装盒的侧边印着管脚图,这样使用起来就很方便了,不用每次都去看文档查找了,从管脚图可以看出大部分是跟树莓派兼容的,可能少部分管脚的功能不一样,但是电源管脚的排列是一致的,也可能是管脚不够用了,有三个管脚是NC(No Connection)空着的。
打开包装盒就可以看到开发板本体了,黑色哑光PCB板,略显高端,开发板用黑丝海绵包裹着。
将开发板取出来,先看一下正面,做工还是非常不错的,看丝印是21年第17周投板,看来还是热乎的!
然后看一下背面,背面大的元器件不是很多,只有一个SD卡座、Flash和一颗海力士的DDR3,根据丝印来看单颗256M,正面还有一颗,所以一共是512M,也就是拿到的是内测版本。
那么来看一下主要参数:主控:全志D1 C906 RISC-V 1GHz
DRAM:DDR3 512M/1GB/2GB (内测版/公开版/定制版)
存储:板载256MB spi-nand,支持USB外接U盘及SD卡拓展存储
网络:支持千兆以太网(RTL8211F),支持2.4G WiFi及蓝牙(XR829无线模组),板载天线
显示:支持MIPI-DSI+TP屏幕接口,支持HDMI输出,支持SPI屏幕
音频:麦克风子板接口 * 1,3.5mm耳机接口 * 1(CTIA)
按键:fel按键 * 1,LRADC OK按键 * 1
灯:电源指示灯 * 1,三色LED * 1
DEBUG:支持uart串口调试,支持ADB USB调试
USB:USB HOST * 1, USB OTG * 1,支持USB2.0
PIN:40pins插针阵列,使用PCF8574 GPIO拓展芯片外拓GPIO
电源输入:Type-C USB 5V-2A
PMIC:分立器件
板身大小:长85mm宽56mm厚1.7mm
PCB板层:6层板Power on!
看完了板子长啥样,当然要上电运行一下了!出厂Flash中带有固件,所以是可以直接上电运行的,但是出厂固件应该是默认从MIPI显示屏输出的,也可以切换到HDMI输出,但是我这也没有显示器,所以我们这里就先从串口看一下就好了。
从配件包里,取出串口线,按照白色接TX,绿色接RX,黑色接GND的线序,将串口线接到右上角的DEBUG接口,然后再取出电源和USB线给开发板供电,接HDMI旁边的TYPE-C,然后打开串口应该就能看到启动日志了,启动完成后不会出现登录提示,我们只需按一下回车即可,然后就会看到下面的开机提示了。
内置的固件是基于全志官方维护的Tina Linux,现在D1的SDK已经全部释放了,所以个人玩家再也不用担心拿不到官方的SDK了!!!今天先简单体验下,改天刷个Debian固件再尝试下!
后语非要讲几句
不知道大家第一次接入嵌入式Linux是用的什么开发板和哪家的片子,但是我第一块开发板是友善之臂的NanoPi NEO Air,使用的是全志的H3 CPU,板子非常小巧也很精致,但是个人是拿不到官方的SDK包的,包括友善之臂也没有开放出来,不过全志的板子却在开源创客圈非常火,比如armbian支持的很多SBC都是使用的全志的CPU,当然可能性价比也占一部分原因,但是以后可能会有很大改观,现在在全志在线官网已经可以不用NDA就可以直接下载到两款芯片的SDK了,而且现在全志还官方搭建了开发者论坛,让使用和开发全志CPU的开发者有了可以同官方交流的平台。
不负所爱 自创奇迹 不会辜负开发者的厚爱,大家同社区创造了奇迹,全志在线也会竭尽全力帮助每一位开发者!(Kirin讲的,大概好像是这样了,难道说我给忘了?)
真结束
再来几张图片欣赏下,图片都是用手机拍的,成像有点渣,大家见谅!
那么问题来了,相关文档要去哪里获取呢?这个大家不要担心,因为包装盒上已经印刷了!
全志在线开发者社区和D1的文档都可以扫码直达,为了大家更方便,我也贴一下链接:
全志开发者社区
D1开发板相关文档