需要修改哪一个配置文件
YuzukiTsuru 发布的帖子
-
回复: D1使用Tina 2.0的base-files导入文件没有运行权限,有没有可以设置的地方或者脚本
@tevet 那样弄太麻烦了,我还是改base-files的makefile好了
-
Tina 基于 OpenWRT 14.07,尝试给OpenWRT 14.07 打了一个patch,来看看Tina改了多少东西
把dl文件夹删了不然patch就太大了。
VSCode打开看看
oom oom
那轻量级的npp呢
patch下载地址:
链接:https://pan.baidu.com/s/1a0tLzEHEPjT0mO6UmaDpDg
提取码:ygz2 -
回复: 运行hello_word遇到GLIBC_2.29 not defined in file libc.so.6改怎么办
@oiouou123 tina源码里的编译器,应该就是那个
Using built-in specs. COLLECT_GCC=./riscv64-unknown-linux-gnu-gcc COLLECT_LTO_WRAPPER=/home/yuzuki/WorkSpace/tina-d1-h/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/../libexec/gcc/riscv64-unknown-linux-gnu/8.1.0/lto-wrapper Target: riscv64-unknown-linux-gnu Configured with: /ldhome/software/toolsbuild/slave/workspace/riscv64_build_linux_x86_64/build/../source/riscv/riscv-gcc/configure --target=riscv64-unknown-linux-gnu --with-mpc=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_linux_x86_64/lib-for-gcc-x86_64-linux/ --with-mpfr=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_linux_x86_64/lib-for-gcc-x86_64-linux/ --with-gmp=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_linux_x86_64/lib-for-gcc-x86_64-linux/ --prefix=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_linux_x86_64/install --with-sysroot=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_linux_x86_64/install/sysroot --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-nls --disable-bootstrap --src=../../source/riscv/riscv-gcc --enable-checking=yes --with-pkgversion='C-SKY RISCV Tools V1.8.4 B20200702' --enable-multilib --with-abi=lp64d --with-arch=rv64gcxthead 'CFLAGS_FOR_TARGET=-O2 -mcmodel=medany' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medany' CC=gcc CXX=g++ Thread model: posix gcc version 8.1.0 (C-SKY RISCV Tools V1.8.4 B20200702)
-
回复: 【开源直播】手把手教你用全志XR32芯片DIY一个自己的开发板(一:电路与PCB绘制)
板子到货啦,调试后发现的问题做出的修改
-
删除UPG使用的上拉电阻电容
-
UART保留CH340N,TX改为电源灯(主要是绿灯太暗了给的电阻小所需电流较大导致UART强上拉)
-
TF卡使用全上拉
-
修改版型使其适合拼版
-
-
回复: 【开源直播】手把手教你用全志XR32芯片DIY一个自己的开发板(一:电路与PCB绘制)
打样焊接
打样
打样的板子做了一些调整,加宽了外圈就不用出半孔费了QuQ
打样打样~~~
Pinout
-
回复: 【开源直播】手把手教你用全志XR32芯片DIY一个自己的开发板(一:电路与PCB绘制)
项目计划
- 一个大概5cm*2cm的小型开发板
- 板载电源灯与点灯必备IO灯
- 板载USB转UART
- 一个复位按键一个下载按键
- TF卡槽
- SPI Flash
- 摄像头CSI的FPC接口
- 板形为通孔+邮票孔外围(差不多是这样↓)
电路设计
原理图设计
封装设计
首先设计XR32F429C2的原理图封装,封装已经上传立创eda,链接:XR32F429C2 LCEDA封装
绘制芯片外围电路
外围电路主要包括三部分
- 电源
- 退耦、滤波电容
- 辅助电路、时钟
首先来电源和电容
查阅芯片手册的
Power Management
章节,得知芯片内置了几路LDO,一路DCDC,只需要给芯片供电5V就可以使用了。再参考一下EVB的电路设计
GPIO就先这样拉出来,不做细分处理。
对于时钟,查看数据手册
Clock
章节,有可以看到XR32F429有两个时钟,一个高速时钟一个低速时钟。其时钟控制图框如下。可以看到低速时钟有两个时钟源,一个内置RC震荡电路,一个外部晶振。因为低速时钟为32.768k正好是2的15次方,其主要是给系统RTC与低功耗模式使用的,对RTC或者对低功无需求可以舍去低速晶振。高速时钟支持24MHz, 26Mhz, 40MHz 或者 52MHz 的晶振。这里就选择24MHz的2016封装的晶振(正好全志的大部分Linux芯片也是24MHz)。
在这里因为是开发板,所以两个时钟都画上。每个晶振时钟脚加一个电容作为起振电容。
最后一个辅助电路,用户按键。程序跑飞了的RESET键,下载程序的UPGRADE键。
首先是RESET键,找了一圈居然没找到EN和RST引脚,查看了文档才发现叫做
CHIP_PWD
下载按键就不好弄了,数据手册没有见到描述的部分,看了一下EVB的电路图,这咋还献祭了PB2和PB3。
于是进行了一下搜索,在Github找到了
XR871_Quick_Start_Guide-CN
这个手册
里面描述了下载的全部过程。
那现在就需要做出一个选择了,PB2和PB3是JTAG的数据口,如果直接拉低了可能会导致JTAG无法使用。便折中了一下,PB3接口通过电阻拉低,如果需要使用JTAG则将电阻移除即可。
电阻选用0603封装方便拆焊
绘制板子的用户IO
计算了一下,一共有31个GPIO+一个RESET需要引出,于是使用两列双18Pin穿孔+邮票孔封装。
先画原理图封装,很简单
再画PCB封装,也很简单,两个焊盘一个长方形一个圆形,制版的时候把边框层放到白线就好了。
然后原理图里面对面放好
然后生成PCB,大概摆放一下元件
渲染一下看看,有内味了
USB转串口用的是人见人爱的CH340N,配上TypeC接口,CH340N没货了也可以用CH343P,不过这里就不用了。原理图把它们两个都画上。
((整了个活,CH340N和CH343P的复用焊盘
TF卡槽,USB,摄像头FPC连接器和其他小东西
大概设计(整活)了一下,这样层叠式设计。
PCB摆放一下位置,开始拉线
其中先先不在原理图中绑定邮票孔IO对应的引脚,先把PCB的线拉出来,再按照线的位置去修改引脚
比如这里,PB5对应H1 16, PB4对应H1 15
就在原理图中把两个引脚确定下来
TF卡槽
这里使用SDIO 1连接TF卡槽 1bit模式,只需要给CMD上拉,SDIO 0因为被CSI占用了所以就不使用了。
当然,TF卡是可以带电拔插的,所以需要加上ESD器件,USB因为需要插上USB才上电所以这里就省略了。
USB
USB当然是TypeC接口了,CC线下拉两个电阻,关于TypeC的接线可以参考这篇文章:Type C 的 CC 到底该怎么C
摄像头FPC
摄像头需要三路供电,分别是1V2,2V8,3V3。这里使用两个LDO作为两路供电。
SPI Flash
没啥好说的,F1C100S板子上抄过来。
其他小东西
给UART加上了指示灯,烧录的时候会闪一闪
加了一颗RGB灯,点灯吃灰一条龙
PCB设计
大概布局了一下下,并且把IO的线,供电,时钟的线连上了
3D渲染看看
飞线消消乐中.........
画一下IO丝印
然后第一版就画完了QuQ
-
【开源直播】手把手教你用全志XR32芯片DIY一个自己的开发板(一:电路与PCB绘制)
XR32
【XR32】:完整型号【XR32F429】
是全志推出MCU芯片,听名字就知道,对标的是某tm/某sp32,可以用来做各自小板子、小车车、小电子设备、实验装置等等等
XR32F429 基于主频最高可达 192MHz 的高性能 ARM Cortex-M4F 32 位 RISC 内核。 Cortex-M4F 内核具有一个浮点单元 (FPU) 单精度,它包含所有 ARM 单精度数据处理指令和数据类型。 它还实现了一个内存保护单元 (MPU),可实现应用程序安全性。 它支持集成的 832KB SRAM 和 2MB 闪存 ROM。 它还包括许多外设,包括 UART、TWI、SPI、I2S、DMIC、PWM、IrDA (T/R)、CSI、SDIO 和辅助 ADC。
The XR32F429 devices are based on the high-performance ARM Cortex-M4F 32-bit RISC core operating at frequency up to 192MHz. The Cortex-M4F core features a Floating Point Unit (FPU) single precision which all ARM single-precision data-processing instructions and data types. It also implements a memory protection unit (MPU) which enables application security. It supports an integrated 832KB SRAM and 2MB Flash ROM. It also includes many peripherals, including UART, TWI, SPI, I2S, DMIC, PWM, IrDA (T/R), CSI, SDIO and auxiliary ADC.
芯片特性
-
集成高性能ARM Cortex-M4F内核,并配备832KB SRAM和16Mbit Flash
-
集成硬件加解密引擎,保障数据传输与存储的安全
-
集成度高,集成UART,SPI,I2C,PWM,ADC,SDIO,IrDA,I2S,DMIC,CSI等丰富的接口
-
平台
- ARM Cortex-M4F内核,最高192MHz运行频率
- 内置832KB SRAM
- 支持低功耗RTC模式
- 集成2Kbit efuse
- 6mm x 6mm 52pin QFN封装
-
加解密引擎
- 支持AES ECB/CBC/CTR,128/192/256位秘钥
- 支持DES/3DES
- 支持MD5/SHA/SHA256/CRC16/CRC32/PRNG
-
外设
- 2路SPI,3路UART,2路I2C,1路SDIO,IrDA
- 8路PWM,8路ADC,GPIO若干
- 1xI2S,1xDMIC,1xCSI
-
电源
- 单电源输入,宽电压范围2.7V-5.5V支持
- 集成200mA 3.3VLDO,可用于外设供电
- 内置DC-DC和LDO供内部电路使用
- 支持低电检测
- 支持系统关机/休眠状态唤醒
-
时钟
- 24MHz XTAL
- 32768低频时钟
-
其他
- 工作温度-40~85℃, 存储温度-40~135℃
- ESD HBM ±4000V,CDM ±800V
楼主目前得到了XR32的全球独家权限,准备基于该芯片做一个开发板。所有软硬件将全部开源,方便后面的同学参考学习。
从0开设DIY一个自己的开发板,并适配代码让它跑起来,应该是每个嵌入式工程师入门的入门之路吧,希望大家通过跟着我们操作走一遍,可以摸清入门的路~
楼主目前普通本科物联网专业大二在读,相信我能完成的内容各位同学们都能完成。芯片框图:
硬件:
本项目将使用立创EDA进行进行原理图设计和PCB layout(因为它免费而且不用下载适合学生朋友使用)
XR32的封装库后续会建好在立创EDA上直接开源,大家可以直接调用
个人立创硬件开源平台主页:https://oshwhub.com/GloomyGhostXR芯片后面会放到全志系的淘宝店上销售,价格人民币一位数。同时也准备放到立创商城,大家下单打板就能直接调立创商城里的货,这样就不用寄来寄去了(和立创商城的人沟通中)。
软件
使用全志官方支持的FreeRTOS系统,适配自己做的开发板,代码全部开源,github/gitee双边同步
github地址:https://github.com/YuzukiHD/XR32SDK
gitee地址:https://gitee.com/GloomyGhost/xr32-sdk芯片资料
XR32 datasheet:XR32F429C2_Datasheet_V1.2.pdf
XR32 User_manual:XR32F429C2_User_Manual_V1.0.pdf硬件参考资料
XR32参考设计原理图.7z
XR32封装库.7z
XR32参考设计原理图AD版本.zip
XR32F429C2 LCEDA封装 -
-
【开源】YuzukiRuler 随身Linux小尺子
YuzukiRuler
YuzukiRuler 随身Linux小尺子,板载UART和OTG,还有一个1.14小屏幕,支持2.4G Wi-Fi网上冲浪
来点图片
软件适配
Linux Kernel 5.4.180 主线内核
Uboot 2020.07
Buildroot rootfs硬件开源地址
https://oshwhub.com/GloomyGhost/yuzukiruler
SDK 相关
SDK下载地址:github.com/YuzukiHD/Buildroot-YuzukiSBC
SDK开发说明:yuzukihd.gloomyghost.com/Buildroot-YuzukiSBC最新固件下载
github.com/YuzukiHD/Buildroot-YuzukiSBC/releases/latest
用户名:root
密码:无
固件默认输出Console,有其他需要请自行修改固件 -
搭建了一个 Tina 的 opkg 仓库,软件包逐渐完善中
凭什么tina要看着debian和Fedora用包管理器安装软件,人家Tina也要嘛,明明是基于OpenWRT有一个现成的opkg了。
先来点图
主页
还可以搜索软件包哦
在Tina里使用
支持列表
- 目前测试版本仅支持 D1-H 与 D1s 芯片,其他芯片支持陆续增加中(咕
使用方法
删除本地库
rm -rf /etc/opkg/distfeeds.conf
修改添加远程库
vi /etc/opkg/customfeeds.conf src/gz snapshots http://xxxx.com
域名可能变动,最新仓库url后续回帖里找一下((
-
使用 LicheeRV 86 Panel 与 Tina BSP 实现 RGB 与 SPI 双屏显示
Tina 提供了2种 SPI TFT 显示屏的驱动方式。第一种是官方推荐的
fbdev
方式,使用Framebuffer implementaion without display hardware of AW
进行 SPI屏幕的驱动。另外一种是使用fbtft
进行 SPI 屏幕驱动。fbdev
方式由于pinctrl
在新内核中调用方式出现修改,所以暂时无法使用。修改难度较大。fbtft
虽然官方wiki表明不建议在 Linux 5.4 中使用,但是其实也是可以使用的,只需要修改一下 GPIO 的注册方式就行。先驱动 SPI 屏幕
这里驱动的屏幕所选择的是 ST7789V SPI
修改 FBTFT 驱动
进入
tina-d1-open/lichee/linux-5.4/drivers/staging/fbtft
找到fbtft-core.c
首先加入将要使用到的头文件
#include <linux/gpio.h> #include <linux/of_gpio.h>
然后找到
static int fbtft_request_one_gpio()
函数,将已经弃用的端口绑定方法改为以下内容static int fbtft_request_one_gpio(struct fbtft_par *par, const char *name, int index, struct gpio_desc **gpiop) { struct device *dev = par->info->device; struct device_node *node = dev->of_node; int gpio, flags, ret = 0; enum of_gpio_flags of_flags; if (of_find_property(node, name, NULL)) { gpio = of_get_named_gpio_flags(node, name, index, &of_flags); if (gpio == -ENOENT) return 0; if (gpio == -EPROBE_DEFER) return gpio; if (gpio < 0) { dev_err(dev, "failed to get '%s' from DT\n", name); return gpio; } flags = (of_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH; ret = devm_gpio_request_one(dev, gpio, flags, dev->driver->name); if (ret) { dev_err(dev, "gpio_request_one('%s'=%d) failed with %d\n", name, gpio, ret); return ret; } *gpiop = gpio_to_desc(gpio); fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' = GPIO%d\n", __func__, name, gpio); } return ret; }
找到
static void fbtft_reset()
函数,将 RST 信号最后拉高static void fbtft_reset(struct fbtft_par *par) { if (!par->gpio.reset) return; fbtft_par_dbg(DEBUG_RESET, par, "%s()\n", __func__); gpiod_set_value_cansleep(par->gpio.reset, 1); msleep(10); gpiod_set_value_cansleep(par->gpio.reset, 0); msleep(200); gpiod_set_value_cansleep(par->gpio.reset, 1); msleep(10); }
找到
static void fbtft_set_addr_win()
函数,添加地址偏移。否则会出现下图部分雪花屏现象。static void fbtft_set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye) { switch(par->info->var.rotate) { case 0: xs+=53;xe+=53;ys+=40;ye+=40; break; case 90: xs+=40;xe+=40;ys+=53;ye+=53; break; case 180: xs+=53;xe+=53;ys+=40;ye+=40; break; case 270: xs+=40;xe+=40;ys+=53;ye+=53; break; default : break; } write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS, (xs >> 8) & 0xFF, xs & 0xFF, (xe >> 8) & 0xFF, xe & 0xFF); write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS, (ys >> 8) & 0xFF, ys & 0xFF, (ye >> 8) & 0xFF, ye & 0xFF); write_reg(par, MIPI_DCS_WRITE_MEMORY_START); }
找到
fb_st7789v.c
,参照STM32的初始化函数对初始化部分进行修改。static int init_display(struct fbtft_par *par) { par->fbtftops.reset(par); mdelay(50); write_reg(par,0x36,0x00); write_reg(par,0x3A,0x05); write_reg(par,0xB2,0x0C,0x0C,0x00,0x33,0x33); write_reg(par,0xB7,0x35); write_reg(par,0xBB,0x19); write_reg(par,0xC0,0x2C); write_reg(par,0xC2,0x01); write_reg(par,0xC3,0x12); write_reg(par,0xC4,0x20); write_reg(par,0xC6,0x0F); write_reg(par,0xD0,0xA4,0xA1); write_reg(par,0xE0,0xD0,0x04,0x0D,0x11,0x13,0x2B,0x3F,0x54,0x4C,0x18,0x0D,0x0B,0x1F,0x23); write_reg(par,0xE1,0xD0,0x04,0x0C,0x11,0x13,0x2C,0x3F,0x44,0x51,0x2F,0x1F,0x1F,0x20,0x23); write_reg(par,0x21); write_reg(par,0x11); mdelay(50); write_reg(par,0x29); mdelay(200); return 0; }
将屏幕大小配置为屏幕实际大小
static struct fbtft_display display = { .regwidth = 8, .width = 135, .height = 240, .gamma_num = 2, .gamma_len = 14, .gamma = DEFAULT_GAMMA, .fbtftops = { .init_display = init_display, .set_var = set_var, .set_gamma = set_gamma, .blank = blank, }, };
设备树修改
首先打开电路图,找到 SPI 屏幕的电路。
根据电路,找到
pio
节点,添加 SPI0 所用引脚,spi0_pins_a
作为数据时钟绑定,spi0_pins_b
作为 CS 的绑定,并上拉。RST,DC,背光在这里不做声明。spi0_pins_a: spi0@0 { pins = "PC2", "PC4"; function = "spi0"; drive-strength = <10>; }; spi0_pins_b: spi0@1 { pins = "PC3"; function = "spi0"; drive-strength = <10>; bias-pull-up; };
然后找到 SPI0 节点,添加屏幕使用的设备树。使用
pinctrl-0
将pio
中定义的 SPI 引脚进行注册。RST,DC,背光在这里进行绑定,并设置其工作电平。&spi0 { clock-frequency = <100000000>; pinctrl-0 = <&spi0_pins_a &spi0_pins_b>; status = "okay"; st7789v@0 { status = "okay"; compatible = "sitronix,st7789v"; reg = <0>; spi-max-frequency = <32000000>; rotate = <90>; rgb; fps = <30>; buswidth = <8>; reset = <&pio PC 6 GPIO_ACTIVE_LOW>; dc = <&pio PC 5 GPIO_ACTIVE_LOW>; led = <&pio PD 18 GPIO_ACTIVE_HIGH>; debug = <1>; }; };
最后,将不需要的屏幕关闭,方便调试
&disp { disp_init_enable = <0>; ...... } &lcd0 { lcd_used = <0>; ...... } &hdmi { hdmi_used = <0>; ...... }
内核配置
进入
kernel_menuconfig
,开启 FBTFT,关闭 RGB,MIPI 所使用的DISP Driver Support(sunxi-disp2)
输出。Device Drivers ---> Graphics support ---> Frame buffer Devices ---> <*> Support for frame buffer devices ---> Video support for sunxi ---> < > DISP Driver Support(sunxi-disp2) [*] Staging drivers ---> <*> Support for small TFT LCD display modules ---> <*> FB driver for the ST7789V LCD Controller
由于上面配置关闭了
DISP Driver Support(sunxi-disp2)
,所用需要在menuconfig
里将内核模块关闭,否则会出现找不到驱动的错误。Kernel modules ---> Video Support ---> < > kmod-sunxi-disp....................................... sunxi-disp support < > kmod-sunxi-g2d......................................... sunxi-g2d support < > kmod-sunxi-hdmi....................................... sunxi-hdmi support < > kmod-sunxi-uvc......................................... sunxi-uvc support
编译,打包,使用
fbviewer
进行测试make -j65535 pack fbviewer Yuzuki.jpg
修改为双屏驱动
修改双屏也很简单,SPI 屏幕调试完成之后,将刚才关闭的各类驱动打开即可。
配置设备树
找到 SPI0 节点,将背光
led
注释掉,查看电路图可知 RGB 屏幕和 SPI 屏幕使用的背光是同一个,这里不需要分开注册。&spi0 { clock-frequency = <100000000>; pinctrl-0 = <&spi0_pins_a &spi0_pins_b>; status = "okay"; st7789v@0 { status = "okay"; compatible = "sitronix,st7789v"; reg = <0>; spi-max-frequency = <32000000>; rotate = <90>; rgb; fps = <30>; buswidth = <8>; reset = <&pio PC 6 GPIO_ACTIVE_LOW>; dc = <&pio PC 5 GPIO_ACTIVE_LOW>; // led = <&pio PD 18 GPIO_ACTIVE_HIGH>; debug = <1>; }; };
把之前关闭的显示输出重新打开
&disp { disp_init_enable = <1>; ...... } &lcd0 { lcd_used = <1>; ...... } &hdmi { hdmi_used = <1>; ...... }
配置内核
进入
kernel_menuconfig
,开启DISP Driver Support(sunxi-disp2)
输出,并选择面板驱动。Device Drivers ---> Graphics support ---> Frame buffer Devices ---> <*> Support for frame buffer devices ---> Video support for sunxi ---> <*> DISP Driver Support(sunxi-disp2) <*> HDMI2.0 Driver Support(sunxi-disp2) HDMI2.0 PHY SELECT. (Allwinner PHY) ---> LCD panels select ---> [*] LCD support ST7701S RGB panel [*] Staging drivers ---> <*> Support for small TFT LCD display modules ---> <*> FB driver for the ST7789V LCD Controller
在
menuconfig
里将内核模块重新打开。Kernel modules ---> Video Support ---> <*> kmod-sunxi-disp....................................... sunxi-disp support <*> kmod-sunxi-g2d......................................... sunxi-g2d support <*> kmod-sunxi-hdmi....................................... sunxi-hdmi support <*> kmod-sunxi-uvc......................................... sunxi-uvc support
编译,打包,测试。这里使用
ffmpeg
进行双屏播放badapple.mp4
附录:部分设备树完整参考(配置双屏后,HDMI禁用了)
&pio { ...前略... spdif_pins_b: spdif_sleep@0 { pins = "PB0"; function = "io_disabled"; drive-strength = <20>; bias-disable; }; spi0_pins_a: spi0@0 { pins = "PC2", "PC4"; /*clk mosi*/ function = "spi0"; drive-strength = <10>; }; spi0_pins_b: spi0@1 { pins = "PC3"; function = "spi0"; drive-strength = <10>; bias-pull-up; // only CS should be pulled up }; spi1_pins_a: spi1@0 { pins = "PD11", "PD12", "PD13","PD14", "PD15"; /*clk mosi miso hold wp*/ function = "spi1"; drive-strength = <10>; }; spi1_pins_b: spi1@1 { pins = "PD10"; function = "spi1"; drive-strength = <10>; bias-pull-up; // only CS should be pulled up }; spi1_pins_c: spi1@2 { pins = "PD10", "PD11", "PD12", "PD13","PD14", "PD15"; function = "gpio_in"; drive-strength = <10>; }; ledc_pins_a: ledc@0 { pins = "PC0"; function = "ledc"; drive-strength = <10>; }; ledc_pins_b: ledc@1 { pins = "PC0"; function = "gpio_in"; }; ...后略... }; &spi0 { clock-frequency = <100000000>; pinctrl-0 = <&spi0_pins_a &spi0_pins_b>; status = "okay"; st7789v@0 { status = "okay"; compatible = "sitronix,st7789v"; reg = <0>; spi-max-frequency = <32000000>; rotate = <90>; rgb; fps = <30>; buswidth = <8>; reset = <&pio PC 6 GPIO_ACTIVE_LOW>; dc = <&pio PC 5 GPIO_ACTIVE_LOW>; // led = <&pio PD 18 GPIO_ACTIVE_HIGH>; debug = <1>; }; }; /*---------------------------------------------------------------------------------- disp init configuration disp_mode (0:screen0<screen0,fb0>) screenx_output_type (0:none; 1:lcd; 2:tv; 3:hdmi;5:vdpo) screenx_output_mode (used for hdmi output, 0:480i 1:576i 2:480p 3:576p 4:720p50) (5:720p60 6:1080i50 7:1080i60 8:1080p24 9:1080p50 10:1080p60) screenx_output_format (for hdmi, 0:RGB 1:yuv444 2:yuv422 3:yuv420) screenx_output_bits (for hdmi, 0:8bit 1:10bit 2:12bit 2:16bit) screenx_output_eotf (for hdmi, 0:reserve 4:SDR 16:HDR10 18:HLG) screenx_output_cs (for hdmi, 0:undefined 257:BT709 260:BT601 263:BT2020) screenx_output_dvi_hdmi (for hdmi, 0:undefined 1:dvi mode 2:hdmi mode) screen0_output_range (for hdmi, 0:default 1:full 2:limited) screen0_output_scan (for hdmi, 0:no data 1:overscan 2:underscan) screen0_output_aspect_ratio (for hdmi, 8-same as original picture 9-4:3 10-16:9 11-14:9) fbx format (4:RGB655 5:RGB565 6:RGB556 7:ARGB1555 8:RGBA5551 9:RGB888 10:ARGB8888 12:ARGB4444) fbx pixel sequence (0:ARGB 1:BGRA 2:ABGR 3:RGBA) fb0_scaler_mode_enable(scaler mode enable, used FE) fbx_width,fbx_height (framebuffer horizontal/vertical pixels, fix to output resolution while equal 0) lcdx_backlight (lcd init backlight,the range:[0,256],default:197 lcdx_yy (lcd init screen bright/contrast/saturation/hue, value:0~100, default:50/50/57/50) lcd0_contrast (LCD contrast, 0~100) lcd0_saturation (LCD saturation, 0~100) lcd0_hue (LCD hue, 0~100) framebuffer software rotation setting: disp_rotation_used: (0:disable; 1:enable,you must set fbX_width to lcd_y, set fbX_height to lcd_x) degreeX: (X:screen index; 0:0 degree; 1:90 degree; 3:270 degree) degreeX_Y: (X:screen index; Y:layer index 0~15; 0:0 degree; 1:90 degree; 3:270 degree) devX_output_type : config output type in bootGUI framework in UBOOT-2018. (0:none; 1:lcd; 2:tv; 4:hdmi;) devX_output_mode : config output resolution(see include/video/sunxi_display2.h) of bootGUI framework in UBOOT-2018 devX_screen_id : config display index of bootGUI framework in UBOOT-2018 devX_do_hpd : whether do hpd detectation or not in UBOOT-2018 chn_cfg_mode : Hardware DE channel allocation config. 0:single display with 6 channel, 1:dual display with 4 channel in main display and 2 channel in second display, 2:dual display with 3 channel in main display and 3 channel in second in display. ----------------------------------------------------------------------------------*/ &disp { disp_init_enable = <1>; disp_mode = <0>; screen0_output_type = <1>; screen0_output_mode = <4>; screen1_output_type = <3>; screen1_output_mode = <10>; screen1_output_format = <0>; screen1_output_bits = <0>; screen1_output_eotf = <4>; screen1_output_cs = <257>; screen1_output_dvi_hdmi = <2>; screen1_output_range = <2>; screen1_output_scan = <0>; screen1_output_aspect_ratio = <8>; dev0_output_type = <1>; dev0_output_mode = <4>; dev0_screen_id = <0>; dev0_do_hpd = <0>; dev1_output_type = <4>; dev1_output_mode = <10>; dev1_screen_id = <1>; dev1_do_hpd = <1>; def_output_dev = <0>; hdmi_mode_check = <1>; fb0_format = <0>; fb0_width = <0>; fb0_height = <0>; fb1_format = <0>; fb1_width = <0>; fb1_height = <0>; chn_cfg_mode = <1>; disp_para_zone = <1>; /*VCC-LCD*/ /* dc1sw-supply = <®_dc1sw>;*/ /*VCC-DSI*/ /* eldo3-supply = <®_eldo3>;*/ /*VCC-PD*/ /* dcdc1-supply = <®_dcdc1>;*/ }; /*---------------------------------------------------------------------------------- ;lcd0 configuration ;lcd_if: 0:hv(sync+de); 1:8080; 2:ttl; 3:lvds; 4:dsi; 5:edp; 6:extend dsi ;lcd_hv_if 0:Parallel RGB; 8:Serial RGB; 10:Dummy RGB; 11: RGB Dummy;12:CCIR656 ;lcd_hv_clk_phase 0:0 degree;1:90 degree;2:180 degree;3:270 degree ;lcd_hv_sync_polarity 0:vs low,hs low; 1:vs high,hslow; 2:vs low,hs high; 3:vs high,hs high ;lcd_hv_syuv_seq 0:YUYV; 1:YVYU; 2:UYVY; 3:VYUY ;lcd_cpu_if 0:18bit/1 cycle parallel(RGB666); 4:16bit/1cycle parallel (RGB565) ; 6:18bit/3 cycle parallel(RGB666); 7:16bit/2cycle parallel (RGB565) ;lcd_cpu_te 0:frame auto trigger; 1:frame triggered by te rising edge; 2:frame triggered by te falling edge; ;lcd_dsi_if 0:video mode; 1: Command mode; 2:video burst mode ;lcd_dsi_te 0:frame auto trigger; 1:frame triggered by te rising edge; 2:frame triggered by te falling edge; ;lcd_x: lcd horizontal resolution ;lcd_y: lcd vertical resolution ;lcd_width: width of lcd in mm ;lcd_height: height of lcd in mm ;lcd_dclk_freq: in MHZ unit ;lcd_pwm_freq: in HZ unit ;lcd_pwm_pol: lcd backlight PWM polarity ;lcd_pwm_max_limit lcd backlight PWM max limit(<=255) ;lcd_hbp: hsync back porch(pixel) + hsync plus width(pixel); ;lcd_ht: hsync total cycle(pixel) ;lcd_vbp: vsync back porch(line) + vysnc plus width(line) ;lcd_vt: vysnc total cycle(line) ;lcd_hspw: hsync plus width(pixel) ;lcd_vspw: vysnc plus width(pixel) ;lcd_lvds_if: 0:single link; 1:dual link ;lcd_lvds_colordepth: 0:8bit; 1:6bit ;lcd_lvds_mode: 0:NS mode; 1:JEIDA mode ;lcd_frm: 0:disable; 1:enable rgb666 dither; 2:enable rgb656 dither ;lcd_io_phase: 0:noraml; 1:intert phase(0~3bit: vsync phase; 4~7bit:hsync phase; ; 8~11bit:dclk phase; 12~15bit:de phase) ;lcd_gamma_en lcd gamma correction enable ;lcd_bright_curve_en lcd bright curve correction enable ;lcd_cmap_en lcd color map function enable ;deu_mode 0:smoll lcd screen; 1:large lcd screen(larger than 10inch) ;lcdgamma4iep: Smart Backlight parameter, lcd gamma vale * 10; ; decrease it while lcd is not bright enough; increase while lcd is too bright ;smart_color 90:normal lcd screen 65:retina lcd screen(9.7inch) ;Pin setting for special function ie.LVDS, RGB data or vsync ; name(donot care) = port:PD12<pin function><pull up or pull down><drive ability><output level> ;Pin setting for gpio: ; lcd_gpio_X = port:PD12<pin function><pull up or pull down><drive ability><output level> ;Pin setting for backlight enable pin ; lcd_bl_en = port:PD12<pin function><pull up or pull down><drive ability><output level> ;fsync setting, pulse to csi ;lcd_fsync_en (0:disable fsync,1:enable) ;lcd_fsync_act_time (active time of fsync, unit:pixel) ;lcd_fsync_dis_time (disactive time of fsync, unit:pixel) ;lcd_fsync_pol (0:positive;1:negative) ;gpio config: <&pio for cpu or &r_pio for cpus, port, port num, pio function, pull up or pull down(default 0), driver level(default 1), data> ;For dual link lvds: use lvds2link_pins_a and lvds2link_pins_b instead ;For rgb24: use rgb24_pins_a and rgb24_pins_b instead ;For lvds1: use lvds1_pins_a and lvds1_pins_b instead ;For lvds0: use lvds0_pins_a and lvds0_pins_b instead ;----------------------------------------------------------------------------------*/ &lcd0 { lcd_used = <1>; lcd_driver_name = "st7701s_rgb"; lcd_if = <0>; lcd_hv_if = <0>; lcd_width = <70>; lcd_height = <72>; lcd_x = <480>; lcd_y = <480>; lcd_dclk_freq = <19>; lcd_hbp = <60>; lcd_ht = <612>; lcd_hspw = <12>; lcd_vbp = <18>; lcd_vt = <520>; lcd_vspw = <4>; lcd_backlight = <50>; lcd_pwm_used = <1>; lcd_pwm_ch = <7>; lcd_pwm_freq = <20000>; lcd_pwm_pol = <1>; lcd_bright_curve_en = <0>; lcd_frm = <1>; lcd_io_phase = <0x0000>; lcd_gamma_en = <0>; lcd_cmap_en = <0>; lcd_hv_clk_phase= <0>; lcd_hv_sync_polarity= <0>; lcd_rb_swap = <0>; lcd_power = "vcc-lcd"; lcd_pin_power = "vcc-pd"; lcd_gpio_0 = <&pio PG 13 GPIO_ACTIVE_HIGH>; lcd_gpio_1 = <&pio PE 14 GPIO_ACTIVE_HIGH>; lcd_gpio_2 = <&pio PE 12 GPIO_ACTIVE_HIGH>; lcd_gpio_3 = <&pio PE 15 GPIO_ACTIVE_HIGH>; pinctrl-0 = <&rgb18_pins_a>; pinctrl-1 = <&rgb18_pins_b>; }; &hdmi { hdmi_used = <0>; hdmi_power_cnt = <0>; hdmi_cts_compatibility = <1>; hdmi_hdcp_enable = <1>; hdmi_hdcp22_enable = <0>; hdmi_cec_support = <1>; hdmi_cec_super_standby = <0>; ddc_en_io_ctrl = <0>; power_io_ctrl = <0>; };
-
使用 WSL2 编译 LicheeRV Tina BSP
下载WSL镜像:链接:https://pan.baidu.com/s/1geVQFcTpkoVgc-HNcHuENw 提取码:di1l
WIndows上准备好WSL环境以及WSL2相关补丁。导入WSL镜像。
wsl --import <Distro> <InstallLocation> <FileName>
例如将Tina开发环境导入到
D:\VirtVM\Tina_build
并命名为TinaBuild
wsl --import TinaBuild D:\VirtVM\Tina_build Tina_WSL2.tar.gz
将镜像转换为WSL2版本。
wsl --set-version TinaBuild 2
进入 Tina 开发环境
cd tina-d1-open source build/envsetup.sh lunch
镜像相关:
用户名: tina 密码: tina
-
回复: 在 Lichee RV 上玩游戏:DOOM
@pojdd 在 在 Lichee RV 上玩游戏:DOOM 中说:
@yuzukitsuru 可以分享一下镜像吗?
UnusolaOS_d1-lichee_rv_86_uart0.zip
86Panel 的 -
在 Lichee RV 上玩游戏:DOOM
移植了一下DOOM到 Lichee RV 上,用SDL管理所以要打开SDL的packages
顺便把DOOM也加入packages了
用Lichee RV Dock玩(视频不知道怎么就反了hhhh
当然怎么能少了86Panel
-
回复: D1 LicheeRV Dock 移植RTL8723DS驱动
@tigger 对,是有2个
可以当热点用,一个STATION模式一个AP模式,如果不想要两个可以修改Makefile加一行
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
-
D1 LicheeRV Dock 移植RTL8723DS驱动
RTL8723DS焊接上去了,现在把驱动程序移植上去。
咱先获取源码:https://github.com/lwfinger/rtl8723ds
下载完成后,把驱动文件复制到
tina-d1-open\lichee\linux-5.4\drivers\net\wireless\rtl8723ds
里,没有rtl8723ds
文件夹记得新建一个。修改
tina-d1-open\lichee\linux-5.4\drivers\net\wireless\Makefile
,加一行obj-$(CONFIG_RTL8723DS) += rtl8723ds/
修改
tina-d1-open\lichee\linux-5.4\drivers\net\wireless\Kconfig
,加一行source "drivers/net/wireless/rtl8723ds/Kconfig"
修改
tina-d1-open\lichee\linux-5.4\drivers\net\wireless\rtl8723ds\os_dep\linux\os_intfs.c
加一行MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
修改
tina-d1-open\lichee\linux-5.4\drivers\net\wireless\rtl8723ds\os_dep\linux\rtw_cfgvendor.c
在每一行.policy = VENDOR_CMD_RAW_DATA,
下面加上.maxattr = 1,
修改
tina-d1-open\target\allwinner\d1-lichee_rv_dock\modules.mk
,增加以下内容:define KernelPackage/net-rtl8723ds SUBMENU:=$(WIRELESS_MENU) TITLE:=RTL8723DS support (staging) DEPENDS:= +r8723ds-firmware +@IPV6 +@USES_REALTEK FILES:=$(LINUX_DIR)/drivers/net/wireless/rtl8723ds/8723ds.ko AUTOLOAD:=$(call AutoProbe,8723ds) endef define KernelPackage/net-rtl8723ds/description Kernel modules for RealTek RTL8723DS support endef $(eval $(call KernelPackage,net-rtl8723ds))
(其中的
d1-lichee_rv_dock
是我的板级配置,请选择自己的板级配置比如d1-nezha
,如下图)
进入内核配置,勾选Realtek 8723D SDIO or SPI WiFi为Module(<M>不是<*>)
make kernel_menuconfig Device Drivers -> Network device support -> Wireless LAN -> <M> Realtek 8723D SDIO or SPI WiFi
进入Tina配置,勾选相关驱动
make menuconfig Firmware -> <*> r8723ds-firmware.............................. RealTek RTL8723DS firmware Kernel modules -> Wireless Drivers -> <*> kmod-net-rtl8723ds........................... RTL8723DS support (staging)
保存,编译,打包
make -j65535 pack
烧录后就能看到了
-
Lichee RV 内存小了?改到2G来玩!
在这之前
这是一个计算条,D1核心配上512MB内存。
运行正常系统已经完全够用了,不过我不是那种正常的人,写的一个小程序经常把内存用完被oom杀了。
++内存
查阅了一下资料(某宝),发现我钱包能承担的2G内存颗粒只有D9STR,也就是镁光MT41K1G16DGA-125:A,全新芯片280左右,但是二手只需要135。Datasheet显示这是一颗双晶DDR3L芯片。
那就麻烦了,如果RV板子没有提供Two Rank,那就没办法驱动这颗芯片。于是查阅了Lichee RV的电路图
好欸,LicheeRV 的CS#,ODT#,CK都是按照TwoRank的接法连接的,所以可以直接替换了!准备材料
- Lichee RV 计算条*1
- 热风枪*1
- 电烙铁*1
- D9STR*1
- 焊接材料若干
- 洗板水+清洁材料
开始魔改
注意,魔改有失败风险,保修肯定是没有了。请确认拥有BGA拆焊能力再进行魔改!
风枪温度360,风速40。拆焊之前记得上点油。焊接BGA差不多了要用镊子轻轻推一下,看看会不会归位,如果可以归位那就焊接完成了。
当然颜值党肯定要把焊油洗干净的QwQ
结果
再跑跑那个程序
。。。。。。。。。。。。我回去改算法了
-
回复: 【开源】YuzukiNezha D1s 核心板 Mini-PICE 核心板
OSHWhub 开源地址:https://oshwhub.com/GloomyGhost/yuzukif133 (PCB&SCH实时更新)
Github 开源地址:https://github.com/YuzukiHD/YuzukiNezha-D1s (版本更新+SDK) -
【开源】YuzukiNezha D1s 核心板 Mini-PICE 核心板
经历了期末考试挂科风险、板子刚寄到学校我就回家了、疫情元器件停止派送等一些列人情世故后,它终于来了:YuzukiNezha D1s
特点
- Mini PCIE版型,引出接口,可以自由搭配以太网,RGB屏、MIPI屏底板。不需要排线连接转接。
- 板载电源树、USB接口、TP排线接口、SPI与TF卡槽。PG11引出一颗LED,没有底板也能愉快点灯。
- 四层板设计、工艺不需要加钱(最好花钱沉个金)、0402优雅阻容。
- 板载WiFi模块,可以焊接各种适配模块。
- LCEDA格式,OSHWHUB与Github开源。协议CERN-OHL-P
来点图
正面图
背面图
三兄弟
目前问题(杀鸽
- TF卡槽买错了还没有验证
- Audio部分被砍了(主要是期末考试没时间画了
- WiFi 模块的配置电阻还没给,只能用特定型号的模块
- 没时间画丝印(((
- AWOL LOGO 反了(((
验证xfel
关于TF卡槽
以为一模一样
然后背刺
-
回复: D1s 小麻雀如何修改屏参??
修改屏幕时钟 board.dts 里的 lcd_dclk_freq = <xx>;
不过SDK好像有问题,修改了设备树dclk却不用