@wmd340221 好像开,但是gitee的仓库链接挂掉了
Posts made by q1215200171
-
玄铁杯RISC-V大赛『二等奖』沙漠树种移植车
项目演示
项目以电能为主要能源,电池及调压模块组合实现对设备各处模块的稳定供电,摄像头模块、红外探测模块、超声波模块将信号传递给D1-H哪吒控制板,控制板将收到的现场信号传递给外置终端交互模块,人员通过外置终端交互模块将指令传递给D1-H哪吒开发板,开发板将指令进行编译并将控制信号传递给其他模块,控制其他驱动模块完成动作,以完成对车体、机械臂、水泵、摄像头云台与水泵云台的动作控制。
主要技术特点
本设备应用D1-H 哪吒作为主控芯片,并通过外置终端进行远程遥控,精度高。摄像头与wifi模块对移植现场进行实时同步情景传输,通过HC-SR04测距回传,可以在终端实时显示小车与障碍物的距离,方便控制,转移时可通过红外探头实时红外追踪,可精准的检测人的位置,实现红外追踪方便车体转移。采用履带式底盘适应沙漠地形,终端可实时操控机械臂抓取树种,控制水炮装置实现可控制的灌溉,同时也可以进行后期维护工作如:喷白漆。实现了树种移植、维护场景的实时、准确的转播。设备采用电能作为主要能源,减少对不可再生能源的使用,同时在沙漠中可通过光伏板发电获取电能。
主要创新点
(1)使用D1-H哪吒作为主控芯片,采用外置终端来进行远程遥控,实现了高精度,较低成本的控制。
(2)利用红外探头进行红外追踪可精准的检测人的位置,实现了回收设备时的快速转移。减少了人工参与的程度。超声波测距技术的利用可以使设备在移动的过程中减少操作难度。
(3)摄像头与wifi模块配合对移植现场进行实时同步情景传输,超声波模块精确测距的反馈保障人工判断的准确性。
(4)可调式国标喷头与舵机相啮合的设计,便于喷头快速更换和实现一定角度内可调、定量的灌溉,通过舵机旋转的底盘更保障了旋转操控的精准度。
参赛团队
山东华宇工学院“鑫悦队”
-
玄铁杯RISC-V大赛『一等奖』分布式能源智慧管理和M2M交易系统
项目演示
本项目应用物联网和区块链技术,基于 RISC-V 架构的 D1-H Dock Pro 设计开发了一套分布式能源智慧管理小型示范系统,在该系统上实现了能源生产和消费数据的实时监测,以及 M2M 自主交易。未来可以扩展更多的联网方式如 4G、5G、NBIoT 等,便于适应多样化部署环境的需求。
系统实施过程中,分布式风光储一体小型电站通过风力和太阳光生产清洁能源,并存储在储能电池中,产生的能源数据通过专用网关传输至物联网后台;当有电器负载需要充电时,打开智能开关并计量充电量,将充电数据上传至物联网后台;利用 IOTA 区块链和充电数据等信息,在能源生产端(电站) 和消费端(智能开关与负载)之间进行能源交易结算。
- 电站实物图
- 网关和智能开关实物图
- 后台管理网页
PART01 分布式小型电站系统
- 搭建电站系统
风光互补发电监测系统由风光互补充电控制器、风力发电机、太阳能电池板、储能电池、逆变器、RS458-WiFi 网关构成。电站利用太阳能和风能发电,并将电能存储在储能电池中,可以为交流和直流负载供电。
- D1-H Dock Pro网关
为了实现对电站的智能监测,项目使用 D1-H Dock Pro 开发板设计开发一款专用网关,实时采集电池控制器、气象环境传感器等其它传感器的数据,并通过无线通信方式(WiFi)以 HTTP 协议或 MQTT协议将传感器数据上传至物联网后台。
智能硬件终端(分布式风光储一体小型电站、智能开关)产生的数据和控制信号通过 WiFi 上 传 至 物 联 网 和 区 块 链 后 台 系 统 。后 台 系 统 构 主 要 包括 MQTT Broker、REST API 服务、Web 服务和区块链服务。
PART02 智能开关系统
智能开关用于能源消费端,实现对能源消费者(电器负载)的供电控制、电能消费数据的采集和传输等功能。该智能开关基于 D1-H Dock Pro 开发板进行设计开发,通过开发板的 I/O 口控制继电器、UART 接收电能计量模块的数据。设计一个扩展电路板与开发板配合使用,扩展电路板集成电能计量模块、继电器等。本文设计的智慧开关的功能主要是控制电器开关与计量电器用电参数以及环境参数并上传到云端服务器。
PART03 M2M交易系统
- IOTA Client的搭建
基于 IOTA 的开源 Rust 项目 iota.rs 的 Production 版,使用Docker 在境外服务器上搭建 IOTAClient 以连接 Hornet 节点,从而连接 IOTA 网络的开发版 Devnet。当机器人发送充电请求时,通过 IOTAClient 连接 Hornet 节点,实现身份验证、账户余额查询、M2M 交易等功能。
- Web交易系统
用户登录 Web 界面,能源生产者(电站)将传感器数据通过MQTT 消息发布给网页,网页进行实时可视化显示。消费者向网页发布请求充电的 MQTT 消息,网页收到消息后,通过 IOTAClient 连接 Hornet 以获取消费者的账户余额,当账户余额足够时,网页发布 MQTT 消息,使智能开关打开,智能开关每隔一段时间将用电量返回给网页,网页通过 IOTAClient 连接 Hornet 进行定时交易。消费者通过 MQTT 消息向网页发布停止充电的信息,网页关闭智能开关,并保存此消费者的交易记录,包括交易双方、交易金额、交易电量及交易时间等,供用户查询历史数据。
PART04 参赛团队
华东师范大学“萌新队”
指导老师:左少华、吴幸
成员:龚丹妮、万海缘、李丽莹 -
【FAQ】全志系列芯片如何把flash擦成空片?
1.主题
如何把flash擦成空片2.问题背景
产品:all
硬件:all
软件:uboot+pc端烧录工具(PhoenixSuit/PhoenixUsbPro/awflash命令行工具)
其他:无3.问题描述
有的时候想把flash擦成空片或者只格式化普通分区如user data分区,但是又不想重新烧录固件,如何只进行擦除而不升级固件?4.解决办法
(1)把附件spec_tool_只擦除flash不烧录固件的插件.fex,重命名为spec_tool.fex放到烧录工具目录下。
(2)PhoenixSuit:选择机器对应的固件。选择工具界面上保留数据升级:勾选该按钮,则升级前不进行格式化,private,secure storage、user data、mbr分区保留,其他擦除;选择分区擦除升级:勾选该按钮,则升级前只格式化普通分区,private,secure storage分区保留,其他擦除(注意会擦除mbr然后重新烧录mbr);选择全盘擦除升级:勾选该按钮,则升级前格式化全盘,包括SN等数据整块flash全部擦除执行完后flash变成空片,然后执行烧录。
(3)PhoenixUsbpro:不勾选工具上的全盘擦除,是否擦除取决于sysconfig.fex的eraseflag字段;勾选工具上的全盘擦除,整块flash全部擦除。
(4)awflash:命令行烧录工具,加上参数-e表示全盘擦除,不带-e参数是否擦除取决于sysconfig.fex的eraseflag字段。注:全盘擦除需要是uboot2018及以上的uboot版本,如果需要恢复成正常烧录固件请把spec_tool.fex文件删除然后重启工具即可。擦成空片后的flash如果打开了工具会执行跳fel动作。如果操作不成功,请查看串口打印erase_flag的值是否对应正确。
-
【FAQ】全志F133(D1s)芯片 如何在Tina下进行显示旋转?
问题背景
目前显示多基于横屏的情况设计布局, UI, 图片, 视频等显示. 而常用到的MIPI屏大多都是竖屏, 为避免重新调整布局, 显示提供了竖屏旋转成横屏的显示方式, 节省客户开发时间.
显示旋转有硬件G2D旋转方式, 软件算法旋转方式, 可根据自己的方案屏情况, 测试对比两种方式选择使用, 主要评估内存占用, 时间效率, 旋转效果.
显示驱动旋转framebuffer配置
1.由于此前公版默认在modules.mk屏蔽了屏旋转相关配置, 如果你的版本是禁用旋转的, 需要把相关配置去掉.
路径:target/allwinner/f133-common/modules.mk
屏蔽以下3个相关选项:
CONFIG_SUNXI_DISP2_FB_DISABLE_ROTATE CONFIG_SUNXI_DISP2_FB_ROTATION_SUPPORT CONFIG_SUNXI_DISP2_FB_HW_ROTATION_SUPPORT
修改后的代码如下:
..... $(eval $(call KernelPackage,net-rtl8821cs)) define KernelPackage/sunxi-disp SUBMENU:=$(VIDEO_MENU) TITLE:=sunxi-disp support KCONFIG:=\ CONFIG_DISP2_SUNXI=m \ #CONFIG_SUNXI_DISP2_FB_DISABLE_ROTATE=y \ #CONFIG_SUNXI_DISP2_FB_ROTATION_SUPPORT=n \ #CONFIG_SUNXI_DISP2_FB_HW_ROTATION_SUPPORT=y \ CONFIG_DISP2_SUNXI_BOOT_COLORBAR=n \ CONFIG_DISP2_SUNXI_DEBUG=y \ CONFIG_DISP2_SUNXI_COMPOSER=n \ CONFIG_DISP2_SUNXI_SUPPORT_SMBL=y \ .....
2.硬件旋转需要确保G2D驱动已经使能
make kernel_menuconfig Device Drivers ---> <*> SUNXI G2D Driver [*] sunxi g2d mixer module [*] sunxi g2d rotate module
3.打开显示驱动旋转支持
make kernel_menuconfig Device Drivers ---> Graphics support ---> Frame buffer Devices ---> Video support for sunxi ---> DISP2 Framebuffer rotation support (Disable rotation) ---> ( ) Disable rotation ( ) Software rotation support (不要选这个,方案未支持) (X) Hardware(G2D) rotation support (选择G2D旋转)
4.dts配置
board.dts 和 uboot-board.dts同步修改.
&disp{ ..... disp_rotation_used = <1>;/* 使能旋转功能 */ degree0 = <3>; /* X:screen index; 0:0 degree; 1:90 degree; 3:270 degree */ fb0_width = <1280>;/*fb 的长宽交换*/ fb0_height = <800>; ..... };
5.旋转后framebuffer编程是需要注意,旋转后的buffer不会直接显示到屏幕上, 需要在应用刷屏的地方调用FBIOPAN_DISPLAY接口.同步旋转后的buffer到LCD上.
以修改公版旋转的GUI刷屏示例:
路径:
package/gui/littlevgl-6/lv_drivers/display/fbdev.c
void fbdev_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_p){ .... lv_disp_flush_ready(drv); ioctl(fbfd, FBIOPAN_DISPLAY, &vinfo); /*函数最后,在刷屏函数后面,调用 FBIOPAN_DISPLAY 接口*/ }
软件旋转LVGL UI配置
公版上lvgl-6上做了UI旋转算法, 软件交换打点位置达成旋转. 该做法纯软件, 不需要改动其他配置, 在原来未旋转的基础上,修改LV_UI_ROTATE_DIRECTION宏即可.
路径:lv_conf.h
/* UI rotation: * - 0: no rotate * - 1: 90° * - 2: 180° * - 3: 270° */ #define LV_UI_ROTATE_DIRECTION 0
视频旋转配置
视频旋转有 解码器旋转 和 G2D旋转 两种方式.
1.编码器旋转(VE),使用TPlayerSetRotate接口,注意该接口不支持LBC模式, 不支持H265视频旋转.具体请参考<Tina Linux 多媒体解码>文档.
函数原型: int TPlayerSetRotate(TPlayer* p,TplayerVideoRotateTyperotateDegree); 功能 设置视频旋转的角度 参数 p: 通过 TPlayerCreate 函数创建的 TPlayer 指针; rotateDegree: 视频旋转的角度 返回值 成功返回 0,失败返回-1。 调用说明 这个函数需要在 TPlayerSetDataSource() 函数之前调用
2.G2D旋转:
方式一:(1)TPlayerSetG2dRotate()接口使用G2D做旋转。该接口在TPlayerCreate()之后调用。
方式二:(2)直接在在配置文件中配置默认旋转,文件路径:
package/allwinner/tina_multimedia/tplayer/configs/f133_linux_cedarx.conf
48 #use g2d module to rotate the video. notice:F133/R528 49 g2d_rotate_flag = 1 50 g2d_rotate_degree = 1
图片旋转
待支持.
-
【FAQ】全志H616芯片 以太网模块初始化失败如何解决?
1.【问题现象】
执行
ifconfig -a/ifconfig eth0/ifconfig eth0 up
命令,找不到eth0设备,有如下类似打印:root@TinaLinux:/# ifconfig -a lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:6480 errors:0 dropped:0 overruns:0 frame:0 TX packets:6480 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:505440 (493.5 KiB) TX bytes:505440 (493.5 KiB) root@TinaLinux:/# root@TinaLinux:/# ifconfig eth0 ifconfig: eth0: error fetching interface information: Device not found root@TinaLinux:/# root@TinaLinux:/# ifconfig eth0 up ifconfig: SIOCGIFFLAGS: No such device
2.【问题分析】
以太网模块配置未生效或存在GPIO冲突
3.【排查步骤】
-
步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;
-
步骤2:若内核启动log显示probe失败,常见原因是GPIO资源冲突导致,有如下类似打印:
sun50iw10p1-pinctrl pio: pin PH0 already requested by twi0; cannot claim for gmac0 sun50iw10p1-pinctrl pio: pin-224 (gmac0) status -22 sun50iw10p1-pinctrl pio: could not request pin 224 (PH0) from group PH0 on device pio sunxi-gmac gmac0: Error applying setting, reverse things back sunxi-gmac: probe of gmac0 failed with error -22
- 步骤3:若内核启动log无gmac相关打印,则需要确认以太网配置是否生效。
4.【解决办法】
4.1 GPIO冲突
(1) 首先,结合内核启动log定位与哪个模块存在GPIO冲突,有如下类似打印:sun50iw10p1-pinctrl pio: pin PH0 already requested by twi0; cannot claim for gmac0
(2) 然后,确认该模块GPIO配置是否有误或者是否可以关闭该模块。
4.2 以太网配置未生效
(1) 首先,确认内核menuconfig以太网模块配置是否打开,路径及截图如下:menuconfig -> Device Drivers -> Network device support -> Ethernet driver support
(2) 然后,确认board.dts/sys_config.fex中GMAC模块是否打开,board.dts配置示例如下:
gmac0: eth@05020000{ phy-mode = "rgmii"; use_ephy25m = <1>; tx-delay = <7>; rx-delay = <0>; status = "okay"; };
注:
-
status = “okay"代表打开该模块,status = “disabled"代表关闭该模块;
-
确保PHY与GMAC之间物理接口与软件配置相匹配,对于RGMII接口phy-mode配置为"rgmii”,RMII接口phy-mode配置为"rmii”;
use_ephy25m=1代表PHY使用SOC内部EPHY_25M时钟,use_ephy25m=0或者不配置该参数,代表PHY不使用SOC内部EPHY_25M时钟,
需外挂25M晶振为PHY提供时钟;
-
-
(送开发板~)看!是芒果派,他好像在玩一种很新的开发板
小巧的板型,精致的设计,芒果派 - MangoPi,坚持“艺术品”PCB设计,目前全系开发板皆选用全志方案
(文末有芒果派准备的福利哦)
MangoPi - Nezha MQ
芒果派-哪吒MQ(MangoPi-Nezha MQ)是芒果派(MangoPi)针对全志D1s设计的小型RISCV-Linux原型板,一体化极简设计,可以应用于屏显类AIoT产品。D1s芯片DSI接口的强大功能,赋予了哪吒MQ点屏神器的头衔,板载WiFi以及双Type-C的接口也显示出哪吒MQ紧跟潮流的设计理念,独立BOOT按键、超高集成度......都是哪吒MQ虽小,五脏俱全的最佳佐证。
MangoPi - MQ R
MQ-R是将MQ/MQ-Dual与较早时期的Mango Pi R3混合后的产物,在保证极简设计的同时,让开发板更适合量产开发。这款开发板提供了Arm核的T113以及RISC-V核的D1s两个版本,T113版本内置128MB DDR,D1s版本则内置64MB DDR,开发者可根据实际开发需求选择不同版本的开发板使用。
MangoPi - MQ Pro
芒果派MQ Pro延续了芒果派开发板一贯小而美的作风,板子虽小,但却具备了所有重要的功能,MQ Pro以全志D1-H为主控,内置最高1G DDR,板载WiFi/BT/,并提提供了多种常用的外设接口,完整的功能也使得开发板可以很好地运行Tina/Debian之类的嵌入式软件系统。
MangoPi - MQ Quad
MQ-Quad与MQ-Pro具有极其相似的外形设计,他们都有着与RaspberrPi Zero W拥有一样的外形尺寸,两者之间不同的是,MQ-Pro的主控是全志D1-H,而MQ-Quad则是选用全志H616作为主控。芒果派 MQ-Quad 配备 1GB RAM、一个 mini HDMI 输出、两个 USB Type-C 端口、WiFI和蓝牙连接、TF卡槽,以及常用的外设接口, 开发板同时适配了Tina Linux(OpenWrt)、Ubuntu 和 Android 等系统。
MangoPi - MCore
MCore H616是基于全志H616设计的超迷你模组,大小与普通的SD卡不相上下,板子虽然设计得小,但也板载了1GB内存和AXP313电源管理芯片。MCore四周设计了邮票孔的连接方式,方便开发者直接进行手焊,以满足开发者DIY各种小电视/Linux/Android盒子的需求。
MangoPi - Coming soon
继MCore-H616核心板之后,芒果派即将推出新的R818核心板。R818更侧重于本地显示和CSI,可直接驱动 DSI/LVDS/RGB 这种接口的屏幕,其他资源和H616相当,但R818是达到工规级的芯片。另外芯片本体更小,所以这次将R818+EMMC+LPDDR4+PMU(带锂电池管理)整体做到了3x3cm的大小。并且预留屏蔽罩安装接口。系统方面除了本身提供的Android10以外,还有Tina-Linux,芒果派会在开发板发布时搭配上Tina,ArmBian,Android三套系统。
为回馈开发者对芒果派长期的喜爱与支持,芒果派准备了全系列开发板作为礼物送给大家。
- 一等奖:芒果派MQ-Pro * 2
- 二等奖:芒果派MQ-Quad * 2
- 三等奖:芒果派MQ-R * 1
- 四等奖:芒果派MQ系列开发板全家桶 * 1
开奖时间 2022/11/24 10:00
参与方式:点击下方文章公众号文章链接,关注全志在线微信公众号,发送消息“真的好想要芒果派呀”,参与抽奖
-
Reply: f133 tina4.0 sdk,发现一个很奇怪的现象,大佬们知道的帮忙解答一下,非常感谢
@wyljkl 这个文件似乎有点问题,log可以直接复制上来的
-
Reply: 【FAQ】全志D1芯片 如何移植 rtl8821cu wifi 驱动到 Linux-5.4内核?
@wyljkl 出现编译错误时解决方案如下:
diff --git a/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c b/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c index c4b515763ac8..466a3b27f521 100644 --- a/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c +++ b/drivers/net/wireless/rtl8821cu/os_dep/linux/os_intfs.c @@ -28,6 +28,8 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Realtek Wireless Lan Driver"); MODULE_AUTHOR("Realtek Semiconductor Corp."); MODULE_VERSION(DRIVERVERSION); +MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
出现运行错误时解决方案为遍历驱动里所有使用 wiphy_vendor_command 结构体并修改如下:
diff --git a/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c b/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c index 6bac27d37766..09e24dcc9480 100644 --- a/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c +++ b/drivers/net/wireless/rtl8821cu/os_dep/linux/rtw_cfgvendor.c @@ -1756,6 +1756,11 @@ static const struct wiphy_vendor_command rtw_vendor_cmds[] = { }, .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, .doit = rtw_cfgvendor_gscan_get_capabilities +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)) + , + .policy = VENDOR_CMD_RAW_DATA, + .maxattr = 1 +#endif },
-
开发板也有亲兄弟?疑似芒果派MQ-Pro复刻版曝光
大家还记得那块,被RISC-V官方点赞过的开发板吗?
今天我们,再来介绍一下这块开发板不好意思,搞错了
是介绍另一块和它长得很像的开发板
芒果派 MQ-Quad(H616)(我愿称之为兄弟开发板)
MQ-Quad与MQ-Pro具有极其相似的外形设计,他们都有着与RaspberrPi Zero W拥有一样的外形尺寸,这这这真的不是一家人嘛?两者之间不同的是,MQ-Pro的主控是全志D1-H,而MQ-Quad则是选用全志H616作为主控。
芒果派 MQ-Quad 配备 1GB RAM、一个 mini HDMI 输出、两个 USB Type-C 端口、WiFI和蓝牙连接、TF卡槽,以及一个40Pin可与树莓派兼容的 GPIO 接头和一个带 USB 的20Pin FPC连接器、以太网和更多用于扩展的 GPIO接口。除开发板本身之外,芒果派也为MQ-Quad设计了一款全铝散热壳,在使用这款散热壳时,并不会影响到任何端口或GPIO 接头的使用。
你以为这一家只有两兄弟吗?其实他们还有个“涉世未深”的弟弟——MCore H616。
MCore H616是基于全志H616设计的超迷你模组,大小甚至比不上普通的SD卡,板子虽小,但也板载了1GB内存和AXP313电源管理芯片。MCore四周设计了邮票孔的连接方式,方便开发者直接进行手焊,以满足开发者DIY各种小电视/Linux/Android盒子的需求。
两块H616的开发板在芒果派淘宝店有售,同时芒果派为开发板提供了Tina Linux和Debian的镜像文件,以及相关的原理图和关于H616的一些文件资料,有需要的开发者可以到芒果派官方网站了解更多开发板信息和获取开发板资料。
-
Ubuntu官方又支持了一款仅有硬币大小的RISC-V SBC
Ubuntu发行商Canonical近日宣布将再支持一款基于RISC-V芯片设计的SBC——来自Sipeed的LicheeRV。
LicheeRV是基于全志D1-H芯片(阿里平头哥C906 RISC-V CPU)设计的SBC,值得一提的是,这款SBC核心板只是比普通硬币大一点,比普通的手表和Airpods耳机仓都要小。也就是说,未来我们甚至有可能把一台RISC-V架构的个人电脑戴在手上或者塞进耳朵里。
LicheeRV板载 512MB DDR3内存,使用两组M.2B-KEY 67 Pin金手指引出所有IO,并提供了OTG USB调试口和UART调试串口,更可选配SPI LCD作为初级显示设备,开发者可以无需搭配底板单独使用该核心模块进行基础RISC-V系统开发。
点击链接了解更多LicheeRV详细参数:https://bbs.aw-ol.com/topic/633/
目前已有开发者在LicheeRV上成功启动Ubuntu镜像,开发者可以直接到Ubuntu官方网站获取镜像文件及安装指南。
下载链接:https://ubuntu.com/download/risc-v- 在LicheeRV成功启动Ubuntu
- 在LicheeRV成功启动Ubuntu
-
树莓派价格暴涨买不起?他们自己做了一块,价格只要四分之一
众所周知,树莓派诞生之初时的设计有四大要点
- 一个可编程的硬件(功能很强)√
- 足够有趣,能吸引年轻人(可玩性确实高)√
- 能反复扔进书包,不怕挤坏(质量杠杠滴)√
还有最后一条
- 大多数家庭能买得起
好吧 我承认,看到这条我犹豫了
树莓派的价格一年多来直线起飞,树莓派曾经让“大多数家庭都买得起”的时代一去不复返了。
必趣科技就是其中一个“受害者”。
必趣科技是深圳的一家做打印机的厂商,早年的打印机上多半使用树莓派作为控制主板,控制打印头、机械臂啥的。但是树莓派价格暴涨,令其不得不寻找新的替代方案。
“这么贵我们为什么不自己做呢?还能自己拿来卖~”
“好像是一个发财的好机会,就差一个工程师实现了”
这说起来就巧了,作为一家走在时代风口浪尖上的科技公司,必趣科技不止有一个工程师,还有一支完善的软硬件工程师团队。
于是乎,一块和树莓派CM4长得差不多,但是价格只要1/4的DIY板子——BIGTREETECH CB1就做出来了。
这板子,不能说毫不相干,只能说一模一样……
CB1是遵循树莓派CM4的外形尺寸以及资源配置的全志H616四核 Arm Cortex-A53 SBC。很快,这块板子就被国外的极客们发现并广泛使用了起来。知名电子爱好者网站CNX也对这块板子进行了报道。
- CNX-Software报道页面
BIGTREETECH CB1 配备 1GB RAM、HDMI 输出接口、2.4GHz WiFi 和100Mbps以太网。对比来看,CB1 比 CM4 具有更好的多媒体能力。CB1支持 4Kp60 H.265/H.264 视频解码和 1080p60 H.264 视频编码,而 CM4 只能处理 4Kp60 H.265 和 1080p60 H.264 视频解码和 1080p30 H.264 视频编码。不足的地方是,CB1的模块上缺少 CSI 和 DSI 接口以及只提供一个HDMI视频输出接口,而Raspberry Pi CM4 模块提供CSI和DSI接口并兼具两个HDMI视频输出接口。
- CB1 & CM4参数对比
BIGTREETECH CB1 规格:
- SoC – Allwinner H616 四核 Cortex-A53 @ 1.5GHz
- 带 Mali-G31 MP2 GPU,支持 OpenGL 3.2、Vulkan 1.1、OpenGL 2.0 API
- 内存 – 1GB DDR3L SDRAM
- 视频编码– 最高4K@60fps的HDMI 2.0 端口
- 视频解码 – H.264最高1080p@60fps
- 视频解码 – H.265最高4Kp60/4Kp30硬解
- 网络 – 百兆以太网 / WiFi
- BTB连接器,与树莓派CM4上的连接器兼容
- 尺寸 – 55x40x4.7mm
CB1设计了与树莓派CM4相同的BTB座子,方便用于与底板PI4B的连接。CB1配置的40-pin GPIO接口,兼容树莓派生态,PI4B底板预留5V风扇接口、千兆以太网接口、CSI,DSI接口、MicroSD插槽以及4个USB接口等可拓展功能接口。
当PI4B搭配CB1使用时,性能将接近树莓派3B,并且兼容很多树莓派4的配件。当然,PI4B板框与接口大小与树莓派4B和CM4的连接无异,所以你也可以将树莓派CM4接到PI4B上,以达到与树莓派4B一样的使用效果。
虽然两者性能相仿,但CB1与CM4两者的价格却天差地别。与动辄¥600+才能买到的CM4相比,CB1的价格就十分美丽了,核心板CB1单板仅需¥138,加上与底板的套装也不过¥228。将近四倍的差价,配置却不相上下,解码方面甚至更强一些,有了CB1,还要什么自行车?
不输CM4的优异性能以及实惠的价格,搭配上树莓派硬件兼容画龙点睛般的设计,不少已经上手CB1的工程师也对这块板子发出了称赞。其中提及最多的优点就是与其他号称树莓派替代品相比,CB1对系统的适配有着充分的支持。
- 部分海外论坛评论
来源:CNX-Software
BIGTREETECH为CB1提供Debian Linux,其他操作系统也在开发中,操作系统镜像和 Linux 内核源代码可以在 GitHub 上找到:
Github:https://github.com/bigtreetech/CB1
目前,必趣科技的官方淘宝店已经上线了这块板子,售价138元。
-
【FAQ】全志V853芯片 Tina SDK LCD小分辨率DCLK设置问题
1.主题
Tina SDK LCD小分辨率DCLK设置2.问题背景
产品:带显示屏的产品
硬件:V系列 + DE
软件:Tina SDK
其他:使用小分辨的LCD显示频,根据LCD的时序算出的DLCK小于48MHz3.具体表现
可以看到希望设置的dlck为10MHz,但lck real dclk为18MHz,导致后续的帧率显示异常[ 0.186329] disp 0, clk: pll(40000000),clk(40000000),dclk(10000000) dsi_rate(10000000) [ 0.186329] clk real:pll(72000000),clk(72000000),dclk(18000000) dsi_rate(18000000)
查看信息:
root@(none):/sys/devices/virtual/disp/disp/attr# cat sys screen 0: de_rate 300000000 hz, ref_fps:50 mgr0: 272x480 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] dmabuf: cache[0] cache max[0] umap skip[0] overflow[0] lcd output backlight(255) fps:90.9 272x 480 err:0 skip:170 irq:22509 vsync:0 vsync_skip:0 BUF enable ch[0] lyr[0] z[2] prem[N] a[pixel 128] fmt[ 77] fb[ 272, 480; 136, 240; 0, 0] crop[ 0, 0, 272, 480] frame[ 0, 0, 272, 480] addr[ 2e0000, 2d0000, 0] flags[0x 0] trd[0,0] BUF enable ch[2] lyr[0] z[16] prem[N] a[pixel 150] fmt[ 0] fb[ 272, 480; 272, 480; 272, 480] crop[ 0, 0, 272, 480] frame[ 0, 0, 272, 480] addr[ 17f800, 0, 0] flags[0x
4.问题分析
当LCD使用小分辨率时,根据LCD需要的时序参数,计算出来的dlck一般会小于48MHz,或者更小,此时客户计算出来的dclk会很小,可能会整除不了24,然后直接设置了dclk,比如设置lcd_dclk_freq = <10>;驱动底层默认的分频系数为4分频,所以理论计算值得到的pll值为40MHz,而真实的LCD的PLL是由24MHz倍频得到,而40MHz,并不是24的倍数,所以此时PLL的频率会向上取,此处计算出来的是72MHz,然后4分频得到的真实的dlck是18MHz,从而使得LCD出现异常。5.根本原因
小分辨率dts中设置了不能整除24MHz的频率。6.解决办法
对于小分辨的的LCD设置DCLK的时候,计算出来的dclk的理论值尽量按照以下的频率值的设置:
48MHz 24MHz 12MHz 8MHz 6MHz 4MHz当设置条件1的dclk时,显示的帧率或者显示还是异常,则就按照计算出来的理论值来设置即可,比如计算出来的dclk的值为10MHz,
则dts中lcd_dclk_freq = <10>;,然后根据启动log来调整分频系数,如下:
[ 0.186329] disp 0, clk: pll(40000000),clk(40000000),dclk(10000000) dsi_rate(10000000) [ 0.186329] clk real:pll(72000000),clk(72000000),dclk(18000000) dsi_rate(18000000)
从打印可以看到此时的分频系统是4分频:pll/dclk=4,所以想得到接近10MHz的频率此时可以把分频系数改成6或者8, 72/6=12, 72/8=9。
修改分频系数
3.1 kernel(drivers/video/fbdev/sunxi/disp2/disp/de/lowlevel_v2x/disp_al.c) static struct lcd_clk_info clk_tbl[] = { {LCD_IF_HV, 6, 1, 1, 0}, /* CPU接口 / {LCD_IF_CPU, 12, 1, 1, 0}, / LVDS接口 / {LCD_IF_LVDS, 7, 1, 1, 0}, #if defined(DSI_VERSION_40) {LCD_IF_DSI, 4, 1, 4, 148500000}, #else / mipi接口 / {LCD_IF_DSI, 4, 1, 4, 0}, / 改成8分频 {LCD_IF_DSI, 8, 1, 8, 0}*/ #endif /endif DSI_VERSION_40/ {LCD_IF_VDPO, 4, 1, 1, 0}, }; 3.2 uboot(drivers/video/sunxi/disp2/disp/de/lowlevel_v2x/disp_al.c) static struct lcd_clk_info clk_tbl[] = { {LCD_IF_HV, 6, 1, 1, 0}, {LCD_IF_CPU, 12, 1, 1, 0}, {LCD_IF_LVDS, 7, 1, 1, 0}, #if defined(DSI_VERSION_40) {LCD_IF_DSI, 4, 1, 4, 150000000}, #else {LCD_IF_DSI, 8, 1, 8, 0}, #endif /*endif DSI_VERSION_40 */ };
-
【大赛报名】V853芯片免费体验!华秋电子X全志在线开源硬件设计大赛
由华秋电子联手全志在线发起的硬件工程师线上设计大赛来啦!报名免费申请V853芯片+PCB打板、贴片等服务项目赞助,还有官方荣誉证书,专家团队指导等众多福利,等你来挑战!
☆ 大赛赛程
报名时间:2022年10月11日-11月9日
主办单位:电子发烧友、硬声App
合作单位:华秋电子、全志在线☆ 大赛内容
本次大赛以全志V853、V851s系列为主控芯片(免费申请提供),参赛者需基于两种芯片中的一种设计项目,并按时提交相关设计文档。通过评选成功入围的设计作品,主办方将根据作品打分情况,提供相应项目的开发费用赞助。申请V851s芯片的参赛者,请在报名参赛计划中备注,相关资料和文档将在大赛活动群里单独提供。
◆ 全志V853系列芯片产品,免费申请试用
◆ 项目赞助,入围者提供免费pcb打板等服务
◆ 华秋电子+全志官方专家团队联合指导
◆ 颁发大赛荣誉证书,为个人履历加分
◆ 电子发烧友、硬声app等多方渠道推广宣传☆ 活动奖项
- 参赛选手:面向企业、创客团队,工程师等人士,不限个人或团体形式参赛。
- 报名方式:在线提交项目主题、基本设计思路、主要解决的问题以及创新点即可报名参赛,具体方案不限,报名审核通过后工作人员将联系您。
- 作品相关:
1)参赛作品必须基于全志V853、V851s系列主控产品设计项目(主控芯片和部分周边材料免费提供,具体在大赛活动群通知)。
2)报名审核通过后,参赛者需在规定时间内提交作品设计文档(设计框架说明、pcb原理图、bom清单等),以便评委评审。
3)设计作品统一提交至社区全志科技小组,单个作品最少产出3篇帖子+1个视频(视频发布至硬声app)。 - 赞助支持:
1)评分最高的前3名,可享受1次免费pcb打板+smt贴片服务。
2)其他入围作品,可享受1次免费pcb打板服务。
3)以上赞助均以优惠券形式发放,且仅限通过华秋渠道进行使用。
☆ 报名方式
1)扫码加入大赛活动群报名
2)点击下方大赛地址报名
报名入口 → https://www.elecfans.com/project/contest/2022awol/☆ 作品评审
- 所有设计作品由全志和华秋双方专家进行打分,按分数由高到低进行评选。
- 作品评审规则:
◆ 作品介绍(30分):项目方案陈述逻辑清晰,内容全面详细。
◆ 创新性(30分):作品设计思路新颖、视角独特、有一定的实用价值。
◆ 实用性(20分):作品面对的对象明确、有市场前景。
◆ 技术性(20分):实现方案明确、具有一定的技术含量。
☆ 全志V853芯片
全志V853 是一颗面向智能视觉领域推出的新一代高性能、低功耗的处理器SOC,芯片采用三核异构设计,同时搭配了全志自研的新一代视觉处理引擎和疾风系统,最高算力可达1T的NPU助力V853可广泛用于智能门锁、智能考勤门禁、网络摄像头、行车记录仪、智能台灯等智能化升级相关行业。- 【资料】V853&&V851 硬件参考设计: https://bbs.aw-ol.com/topic/2111/
-
Reply: 【资料汇总】V853资料汇总
@lyscut V853/V853S PINOUT https://bbs.aw-ol.com/topic/2111/
-
全志XR806 Freertos+XRMCU+ADC采样频率偏低
1.主题
Freertos+XRMCU+ADC采样频率偏低
2.问题背景
硬件:XRMCU
软件:freertos + ADC3.问题描述
3.1复现步骤
使用SDK自带的example/adc。
修改adc_callback,adc_callback为中断回调,该函数的调用频率和ADC的频率一致,在该函数里面加一个IO口翻转。
编译并烧录。
用示波器或逻辑分析仪,检查IO口翻转频率和ADC_FEQ是否一致。
3.2具体表现
通过逻辑分析仪检查,实际ADC采样频率只有ADC_FEQ设置的1000分之一。4.问题分析
读取ADC的所有相关寄存器,发现ADC使用的并不是默认时钟,而是低速时钟。高速时钟大约是40M,低速时钟是32K,大约相差1000倍,和测试结果相符。
5.根本原因
ADC的时钟选择已经在ROM化代码HAL_ADC_Init中写死,如下所示:
__rom_xip_text HAL_Status HAL_ADC_Init(ADC_InitParam *initParam) { …… HAL_CCM_GPADC_SetMClock(CCM_APB_PERIPH_CLK_SRC_LFCLK, CCM_PERIPH_CLK_DIV_N_1, CCM_PERIPH_CLK_DIV_M_1); …… }
即使外部再怎么修改修改时钟也不会生效。
6.解决办法
默认使用低速时钟的原因时,可以让ADC在低功耗模式时,依旧可以运行,而且ADC频率过高时,容易因为频繁进出中断导致程序卡死。
如果希望设置成高速时钟,需要把src/rom/rom_bin/src/driver/chip/hal_adc.c
部分的代码去ROM,如果设置的频率偏高,请使用burst模式。 -
全志XR806 Freertos + XRMCU +ADC采样数值不准
1.主题
Freertos + XRMCU +ADC采样数值不准
2.问题背景
硬件:XRMCU
软件:freertos + MCU3.问题描述
3.1复现步骤
使用SDK的example/adc,编译生成固件并烧录。
指定ADC引脚连接某一电压值。
接串口调试助手,自动打印采样到的电压。3.2具体表现
测试发现adc采集出来的电压与实际电压不符合,大多数情况下会低于实际电压,就算连接超出了最大采集电压2.5V,如2.8V的电压,显示采集到的最大电压也是只有大约2.47v。4.问题分析
考虑是滤波算法的问题。
实测从原始数据读出来的数据也不会达到理论的最大数值4095,所以并不是滤波算法的原因。
改变ADC的参考源,从内部bg修改成
VDD_IO.
#if (__CONFIG_CHIP_ARCH_VER == 2) initParam.vref_mode = ADC_VREF_MODE_2; #endif
通过调整VDD_IO的电压,测量电压可以去到2.5V。
5.根本原因
XRMCU内部参考电压是1.25V,出厂时通过该电压去调整VDD_EXT达到3.3V,在调节过程中,3.3V校准后可能导致1.25V有些微的偏差,导致ADC的参考电源也回有细微的偏差。
6.解决办法
如果ADC精度要求非常高,可以使用VDD_IO作为参考电压,由用户进行校准,但这时候VDDIO不能再和VDD_EXT直接相连。
内部ADC偏差一般在30mv以内,而且是固定差值,可以使用GPADC的0x18寄存器可以去校准,方法如下:
比如1.8V输入,GPADC采样值2928,对应1787 mV,此时0x18寄存器读出来是0x811
预期值为2949,那么就把0x811-(2949-2928)=0x7FC写入0x18寄存器,这时候读出来的值就校准好了
-
基于D1哪吒的 自动寻路小车-附源码
本文内容为【玄铁杯第二届RISC-V应用创新大赛】作业
作者:智航追迹队
原文链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.429d180fr0b8Om&id=4094245965412765696一、项目背景
随着我国人工智能技术的进一步发展,自动驾驶汽车吸引了越来越多的目光,巡线是其行走控制方法之一,人们对智能循迹小车适应各种复杂路况的性能、安全平稳性等的要求越来越高,所以我们小组想要做一个智能寻路+避障小车。
##二、Demo的整体框架
三、具体实施方案
①首先,根据哪吒开发板的原理框图了解开发板的工作原理,不同类型的引脚能实行怎样的功能,怎么使各引脚工作起来。
②在电脑上安装Ubuntu环境,进行编译环境配置,源码下载,编译和烧写。
③成功尝试了使用哪吒开发板运行的第一个HelloWorld程序和USB拍照程序。
④上网购买智能小车的所有部件:1个亚克力双层智能小车套件;2个L298N电机驱动模块;三种类型的杜邦线各一排;1个四路红外探测循迹光电传感器模块;4节5号电池。
⑤安装、连接、测试小车的行走功能。
⑥编写代码,调节红外探测的灵敏度使小车能够较为准确的感知周围环境并且运行测试成功。
⑦调试代码,完善小车的功能。
四、软件、硬件介绍
-
软件: Oracle VM VirtualBox Ubuntu 14.04虚拟机系统、全志USB烧录驱动、AllwinnertechPhoeniSuitRelease工具。
-
硬件:哪吒开发板、USB数据传输、USB供电、海康威视摄像机、组装好的智能小车。
五、作品源码
#include<stdio.h> #include<stdlib.h> #include<fcntl.h> #include <unistd.h> #define EXPORT_GPIO1 "echo 2027 > /sys/class/gpio/export" #define EXPORT_GPIO2 "echo 2020 > /sys/class/gpio/export" #define EXPORT_GPIO3 "echo 2021 > /sys/class/gpio/export" #define EXPORT_GPIO4 "echo 2022 > /sys/class/gpio/export" #define UEXPORT_GPIO1 "echo 2027 > /sys/class/gpio/unexport" #define UEXPORT_GPIO2 "echo 2020 > /sys/class/gpio/unexport" #define UEXPORT_GPIO3 "echo 2021 > /sys/class/gpio/unexport" #define UEXPORT_GPIO4 "echo 2022 > /sys/class/gpio/unexport" #define GPIO1_OUTPUT "echo out > /sys/class/gpio/gpio2027/direction" #define GPIO2_OUTPUT "echo out > /sys/class/gpio/gpio2020/direction" #define GPIO3_OUTPUT "echo out > /sys/class/gpio/gpio2021/direction" #define GPIO4_OUTPUT "echo out > /sys/class/gpio/gpio2022/direction" #define LOWGPIO1 "echo 0 > /sys/class/gpio/gpio2027/value" #define LOWGPIO2 "echo 0 > /sys/class/gpio/gpio2020/value" #define LOWGPIO3 "echo 0 > /sys/class/gpio/gpio2021/value" #define LOWGPIO4 "echo 0 > /sys/class/gpio/gpio2022/value" #define HIGHGPIO1 "echo 1 > /sys/class/gpio/gpio2027/value" #define HIGHGPIO2 "echo 1 > /sys/class/gpio/gpio2020/value" #define HIGHGPIO3 "echo 1 > /sys/class/gpio/gpio2021/value" #define HIGHGPIO4 "echo 1 > /sys/class/gpio/gpio2022/value" //红外 #define EXPORT_HW1 "echo 2023 > /sys/class/gpio/export" #define EXPORT_HW2 "echo 2024 > /sys/class/gpio/export" #define EXPORT_HW3 "echo 2025 > /sys/class/gpio/export" #define EXPORT_HW4 "echo 2026 > /sys/class/gpio/export" #define HW1_INPUT "echo in > /sys/class/gpio/gpio2023/direction" #define HW2_INPUT "echo in > /sys/class/gpio/gpio2024/direction" #define HW3_INPUT "echo in > /sys/class/gpio/gpio2025/direction" #define HW4_INPUT "echo in > /sys/class/gpio/gpio2026/direction" #define UNEXPORT_HW1 "echo 2023 > /sys/class/gpio/unexport" #define UNEXPORT_HW2 "echo 2024 > /sys/class/gpio/unexport" #define UNEXPORT_HW3 "echo 2025 > /sys/class/gpio/unexport" #define UNEXPORT_HW4 "echo 2026 > /sys/class/gpio/unexport" #define run 1 #define left 3 #define right 4 #define back 2 #define stop 5 void INIT() { system(EXPORT_GPIO1); system(EXPORT_GPIO2); system(EXPORT_GPIO3); system(EXPORT_GPIO4); system(EXPORT_HW1); system(EXPORT_HW2); system(EXPORT_HW3); system(EXPORT_HW4); system(GPIO1_OUTPUT); system(GPIO2_OUTPUT); system(GPIO3_OUTPUT); system(GPIO4_OUTPUT); system(HW1_INPUT); system(HW2_INPUT); system(HW3_INPUT); system(HW4_INPUT); //printf("1\n"); } void RUN() { system(LOWGPIO1);//0 system(HIGHGPIO2);//1 system(HIGHGPIO3);//1 system(LOWGPIO4);//0 // printf("2\n"); } void STOP() { system(LOWGPIO1); system(LOWGPIO2); system(LOWGPIO3); system(LOWGPIO4); //printf("3\n"); } void LEFT() { system(LOWGPIO1);//0 system(HIGHGPIO2);//1 system(HIGHGPIO3);//1 system(HIGHGPIO4);//1 } void RIGHT() { system(HIGHGPIO1);//1 system(HIGHGPIO2);//1 system(HIGHGPIO3);//1 system(LOWGPIO4);//0 } void BACK() { system(HIGHGPIO1);//1 system(LOWGPIO2);//0 system(LOWGPIO3);//0 system(HIGHGPIO4);//1 } void MOTORRUN(int cmd) { switch(cmd) { case 1: RUN(); break; case 2: BACK(); break; case 3: LEFT(); break; case 4: RIGHT(); break; case 5: STOP(); break; } } int GETHW(int gpio) { char path[64]; char value_str[3]; int fd; snprintf(path, sizeof(path), "/sys/class/gpio/gpio%d/value", gpio); fd = open(path, O_RDONLY); if (fd < 0) { perror("Failed to open gpio value for reading!"); return -1; } if (read(fd, value_str, 3) < 0) { perror("Failed to read value!"); return -1; } close(fd); return (atoi(value_str)); } void TRACE() { int l1=GETHW(2023); int l2=GETHW(2024); int r1=GETHW(2025); int r2=GETHW(2026); //printf("%d,%d,%d,%d",l1,l2,r1,r2); if(l1&&l2&&r1&&r2){ MOTORRUN(run); printf("直走\n"); } else if(l1+l2<r1+r2){ printf("右转\n"); //MOTORRUN(back); sleep(0.5); MOTORRUN(right); } else if(l1+l2>r1+r2){ // MOTORRUN(back); printf("左转\n"); sleep(0.5); MOTORRUN(left); } else if(!r1&&!r2&&!l1&&!l2){ printf("停止\n"); MOTORRUN(stop); } } int main(void) { INIT(); while(1) { TRACE(); // printf("2022"); // sleep(1); // RUN(); sleep(0.5); // STOP(); }return 0; }
六、视频演示
-
-
【创龙全国产T3核心板】赋能工业领域新发展
在工业5.0时代浪潮持续推进并具备确定性的时代背景下,工业领域创新升级的需求日益增长,为满足各种工业环境下的应用需求,面向工业领域,创龙科技推出了基于全志T3处理器的元器件全国产化工业级核心板——SOM-TLT3以及SOM-TLT3-B。
创龙T3核心板有邮票孔(SOM-TLT3)和工业级B2B连接器(SOM-TLT3-B)两种版本,供开发者根据开发需要自行选择,不同版本的核心板仅在尺寸与引脚数上有较小差异。
在硬件资源方面,两款核心板也并无二致,SOM-TLT3核心板采用了100%国产元器件方案,板上搭载的DDR、eMMC、晶振、电源等均采用国产芯片,实现了国产化的全替代,值得一提的是,连接器也实现了国产化的替代。
核心板在与底板连接时通过邮票孔或B2B连接器连接底板方式引出CSI、TVIN、MIPI DSI、TVOUT、RGB DISPLAY、LVDS DISPLAY、GMAC、EMAC、USB、SATA、SDIO、UART、TSC、SPI、TWI等接口,支持双屏异显、最高可达1080P@45fps H.264视频硬件编解码,
两款核心板均采用全志T3芯片为主控,T3采用四核Cortex-A7架构,集成了Mali400MP2 GPU,高性能,低功耗,T3不仅具有稳定可靠的工业级产品性能,更是达到了车规级的使用要求,搭配上丰富的音视频接口资源,使其适用于车载电子、电力行业、医疗电子、工业控制 、物联网 、智能终端等领域。
与此同时,核心板也经过了专业的PCB Layout和高低温(-40℃~+85℃)测试验证以及不少于3000次的启动测试,核心板在各项测试中核心板表现稳定,可基本满足各种工业应用环境。
创龙科技将为开发者提供大量开发板的开发资料,资料包括开发板引脚定义、开发板原理图、开发板PCB、芯片Datasheet等内容,为开发者缩短硬件设计周期。开发者使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。
-
第一视角体验搭载全志T507-H的开发板MYD-YT507H开发板
如今车规级芯片市场潜力巨大,需求旺盛,芯片都在逐渐走向国产化。本文要介绍的主角是MYD-YT507H开发板,该开发板是米尔科技结合全志国产工业级平台CPU——全志T507-H芯片研制的CPU模组,全志T507-H可广泛用于电力物联网、汽车电子、商业显示、工业控制、医疗器械、智能终端等领域。接下来就让我带大家一起开箱看看吧。
拿到开发板后,可以看到在板卡包装箱的侧面标签上,有相应板卡型号生产批号等信息。接下来打开箱子,看到的是产品的包装清单,清单内容如下:
核心板中的主芯片是国产的全志T507-H处理器,T507-H集成了四核Cortex-A53的CPU和G31MP2的GPU,拥有十分强大的图像处理功能以及多路视频输入和输出的接口,这一特点也在MYC-YT507H开发板上得以体现。T507-H还支持4K@60fps H.265解码,4K@25fps H.264编码,以及绝大部分当前比较流行的视频及图片的解码格式。此次开箱的板卡搭载的是2G的LPDDR4以及8GB的eMMC。
在出厂的时候米尔科技已经为大家烧制好比较完善的Full镜像功能,方便大家拿到板卡后可以快速上手。如果想烧录Ubuntu或其他支持的Linux系统也可以到米尔官方提供的下载链接去下载完善的资料包,里面除了有Full core Ubuntu镜像完善的开发板资料,还有工程师开发笔记以及SDK工具包等等。米尔官网地址如下:
中文官网:www.myir-tech.com
英文官网:www.myirtech.com最后给大家演示一下拿到开发板的快速上电步骤:
1、用Type-C数据线的USB端连接电脑,Type-C端连接MYD-YT507H开发板的Debug调试接口;
2、选择合适的电源线连接电源适配器与MYD-YT507H开发板的DC电源接口,通电,将拨码开关拨到eMMC启动;
3、然后在电脑终端上,选择合适的电脑端口,波特率这里可选择115200,然后拨动我们的电源拨码开关,就可以看到我们正在上电了。
-
【FAQ】全志V853芯片 如何动态打开蓝牙kernel部分的log?
1.主题
如何动态打开蓝牙kernel部分的log2.问题背景
产品:扫描笔等Tina产品
硬件:V853 + XR829
软件:Tina linux4.9目的是为了分析问题,抓取kerne里面/net/bluetooth/、driver/bluetooth/目录下的BT_DBG打印。
3.解决办法
- 环境配置
menuconfig选上CONFIG_DEBUG_FS、CONFIG_DYNAMIC_DEBUG
- 小机端
1. echo 8 > /proc/sys/kernel/printk 调整printk打印等级为7以上 2. cat /sys/kernel/debug/dynamic_debug/control | grep bluetooth 查看目前能控制的打印 3. echo 'file hci_core.c +p' > /sys/kernel/debug/dynamic_debug/control 指将hci_core.c文件的打印打开 4. echo 'file hci_core.c -p' > /sys/kernel/debug/dynamic_debug/control 指将hci_core.c文件的打印关闭 5. echo "file net/bluetooth/rfcomm/core.c line 1603 +p" > /sys/kernel/debug/dynamic_debug/control 指将文件net/bluetooth/rfcomm/core.c的第1603行的打印打开 6. echo 'module $mod_name +p' > /sys/kernel/debug/dynaminc_debug/control 指将某个模块的打印打开。
按照上面的方法配置好后,打开蓝牙调试就可以了,默认会输出到终端上或dmesg方式查看。
-
【FAQ】全志 F系列/R系列/V系列 RTOS平台cache操作接口介绍
1.主题
全志 F系列/R系列/V系列 RTOS平台cache操作接口介绍
2.问题背景
全志F系列/R系列/V系列所采用的RTOS,提供了一些关于 Cache 操作的接口,用于当不同 master 在内存上读写传递时使用,以下是 Cache 操作接口的使用介绍。
-
hal_dcache_clean
函数原型:void hal_dcache_clean(unsigned long addr, int len);
函数作用:将[addr, addr + len]地址在 dcache 上对应的数据刷回内存,其在dcache 上数据依旧有效。
使用场景:提供数据给外设时,需要将停留在 dcache 上的数据写回内存,以让外设可以直接访问内存获取该笔数据(外设访问不会经过 dcache)。 -
hal_dcache_invalidate
函数原型:void hal_dcache_invalidate(unsigned long addr, int len);
函数作用:将[addr, addr + len]地址在 dcache 上对应的数据无效。
使用场景:外设修改数据后,CPU需要将 dcache 上的数据无效,以让CPU可以获取到经过外设修改后的数据。 -
hal_dcache_clean_all
函数原型:void hal_dcache_clean_all(void);
函数作用:将所有的dcache 数据全部刷回。
使用场景:较少使用,一般在动态关闭Dcache 的场景下去使用。 -
hal_dcache_invalidate_all
函数原型:void hal_dcache_invalidate_all(void);
函数作用:将所有的dcache 数据全部无效。
使用场景:除了使能 dcache 的场景外,绝对不允许使用。 -
hal_icache_invalidate
函数原型:void hal_icache_invalidate(unsigned long addr, int len);
函数作用:将[addr, addr + len]地址在 icache 上对应的数据无效。
使用场景:自修改代码指令时,需要无效icache。 -
hal_icache_invalidate_all
函数原型:void hal_icache_invalidate_all(void);
函数作用:将所有的dcache 数据全部无效。
使用场景:自修改代码指令时,需要无效icache。
-
-
RISC-V峰会一周年,全志做了这些事
2021年全志正式发布第一颗RISC-V芯片,并在2021年第一届RISC-V中国峰会上备受关注。如今,恰逢第二届RISC-V峰会。这一年里,我们RISC-V架构的SoC已经在消费、车载和工业等多个领域大规模量产出货。这一年里,我们还做了哪些事情呢?让我们回过头来看一看。
一、生态拓展
系统支持
开放BSP,融入OS建立完善开发生态
ciw$vk8Q%$6Sobi6ERgtR!hB
https://www.cnx-software.com/smart-login/
D1系列以“开放BSP,融入OS”为核心,建立起了丰富的开发生态,目前开发板已经成功适配了全志自研Tina Linux、Ubuntu、RT-Thread Smart、Debian、Fedora、AliOS Things......等数款系统,全志也将携手各厂商、社区、工程师、开源创客等业内伙伴,在开源软硬件适配方向持续深耕,完善开发生态,为开发者提供多元化的选择。相关阅读:https://bbs.aw-ol.com/topic/1965/
基金会官方点赞
RISC-V国际基金会CEO:Yes!
RISC-V国际基金会CEO Calista Redmond 女士转发基于D1系列芯片做的开发板,并配以简短有力的配文,她说:“Yes!”
相关阅读:https://bbs.aw-ol.com/topic/1334/
二、走进高校
同济大学产学研共建课程
D1-H走进同济大学,助力人才培养创新发展
全志与同济大学电子与信息工程学院共同开设了基于RISC-V架构芯片的产学研共建课程。课程不仅向同学们介绍了最新最前沿的芯片、半导体、智能感知、人工智能等产业和技术的相关细节,还开设了相关课程设计项目。后续还将辅导同学基于相关芯片进行毕业设计。
挪威科技大学操系统课程
挪威科技大学,用D1-H哪吒开设操作系统课程
通过RVI全球学术开发板项目,全志哪吒开发板已经进入全球多个国家的多所高校,挪威科技大学的Michael Engel教授就在操作系统的课程中介绍并使用了哪吒D1-H,并在课件中详细展示了如何在哪吒上玩转MIT的xv6 OS。D1-H芯片、开发板在国际上也受到了极大的关注,尤其在教育领域,OS课程,编程,体系架构等课程中都出现了使用哪吒开发板进行教学的案例。
相关阅读:https://bbs.aw-ol.com/topic/544/
免费嵌入式课程
从环境搭建,到教学课程的全栈开源
国内嵌入式软件教育教父韦东山老师团队已针对此D1系列芯片及开发板配套了完整的嵌入式课程,并通过百问网官网、B站等渠道免费开放课程。课程内容包括环境搭建、设备驱动、应用开发、系统开发等多个方面,课程延续了韦老师团队教学方面一贯的优秀质量,实现真正的普惠教育,实现从指令集-开发板-教学课程的全栈开源。
相关阅读:https://bbs.aw-ol.com/topic/1246/
课程试验箱
携手华清远见,推出高校实验室嵌入式实验箱
单板已不能满足日益增长教学的需求,华清远见携手全志推出了整套实验箱并部署于各大高校实验室,D1-H的使用极大地提升国内高校嵌入式教育的国产化程度,让课程和实验都在自主可控的科研环境下进行,未来全志将继续积极助力高校科研和教育行业,促进产学研合作。
相关阅读:https://bbs.aw-ol.com/topic/1162/
三、创客伙伴们
芒果派-哪吒MQ
D1-H哪吒MQ,麻雀虽小五脏俱全
芒果派-哪吒MQ(MangoPi-Nezha MQ)是芒果派(MangoPi)针对全志D1s设计的小型RISCV-Linux原型板,一体化极简设计,可以应用于屏显类AIoT产品。得益于D1s芯片、DSI接口的强大功能加持,也是赋予了麻雀点屏神器的头衔,板载WiFi以及双Type-C的接口也显示出紧跟潮流的设计理念,紧跟潮流的同时也保留了芒果派一贯的优良传统,独立BOOT按键、超高集成度......都是麻雀虽小,五脏俱全的最佳佐证。
相关阅读:https://bbs.aw-ol.com/topic/793/
Sipeed哪吒计算条
为智能家居提供,高性价比的RISC-V算力
D1-H哪吒计算条(D1-H Nezha Compute Modul)是矽速科技(Sipeed)基于全志D1-H芯片定制的AIoT计算模块,通过插卡式模块化的设计将全志D1-H芯片的优秀RISC-V算力和丰富的功能赋能到底板/设备上。可以应用于模块化AIoT产品开发生产。D1-H哪吒计算条将以普及型价格推广RISC-V生态,目标是让RISC-V开发不再困难。
相关阅读:https://bbs.aw-ol.com/topic/633/
便携计算机
基于全志D1-H芯片,首台64位RISC-V便携式计算机上市
在实际应用方面,基于D1-H生态开发板的第一款RISC-V便携式计算机也已经正式上市。该产品由技术开放社区Clockwork公司推出,也是全球首台64位RISC-V便携式计算机。
这款RISC-V便携式计算机一经推出便受到了RISC-V International CEO Calista Redmond 女士的青睐,“RISC-V生态快速发展,并可为开发者提供低成本且便捷易用的64 bit的RV终端。”
相关阅读:https://bbs.aw-ol.com/topic/1223/
开源创客DIY
大二学生DIY RISC-V开发板,获阿里批量采购订单
全志在线开发者社区吸引了一众优秀开发者聚集于此,其中一位00后开源创客基于全志D1s芯片设计并制作了一款RISC-V开发板,目前该开发板已经获得了阿里等多家知名科技公司的批量采购订单,将会被用于嵌入式系统的研究和IoT产品的研发。
相关阅读:https://bbs.aw-ol.com/topic/370/
四、生态活动
应用创新大赛
D1-H系列产品助力,“玄铁杯”第二届,RISC-V应用创新大赛火热进行
由芯片开放社区(OCC)主办的“玄铁杯”第二届RISC-V应用创新大赛已有1300+开发者基于全志D1-H哪吒和Sipeed Lichee D1-H DocK Pro两款开发板提交了300+份创意方案,方案从Linux和RTOS两种类型的操作系统出发,衍生出工业机器人、视觉及可穿戴设备、社区养老以及车载设备等时下最火热的赛道方案,赛事火爆程度可见一斑。相关阅读:https://bbs.aw-ol.com/topic/1493/
云栖大会
全志与世界共享,RISC-V探索之硕果
全志在“RISC-V创新应用论坛”中以“RISC-V芯片架构与应用”为主题进行了分享,会上详细介绍了全志的RISC-V产品化探索之路,同时也以“RISC-V探索之路,AIoT时代势如破竹”为题,着重介绍了全志推出的RISC-V芯片及开发板——全志D1-H以及D1-H哪吒开发板。
关于未来发展,RISC-V的特点十分匹配时代需求,进步快速明显,机遇与挑战同在,未来任重道远,全志会持续专注智能终端,结交和凝聚生态伙伴,联合创新力量,用芯、用应用、用实践,助力RISC-V的产业化发展! -
Reply: 第二届RISC-V中国峰会议程公布
下午两点全志科技线上分享地址:
B站:https://live.bilibili.com/10339607
电子发烧友:https://t.elecfans.com/live/2096.html -
Ubuntu官方发布适配全志D1-H哪吒开发板的镜像
Ubuntu发行商Canonical近日官方发布了适配全志D1-H哪吒开发板的Ubuntu镜像,旨在为开发者提供稳定的底层框架,让开发者可以专注于核心应用程序的开发。
官方原文:https://canonical.com/blog/canonical-enables-ubuntu-on-allwinners-nezha-risc-v-boards
开发者可以直接到Ubuntu官方网站获取镜像文件及安装指南。
下载链接:https://ubuntu.com/download/risc-v
此次发布的镜像是Ubuntu Severt 22.04.1版本,该版本的移植适配工作由 Canonical、阿里平头哥以及全志共同完成。
D1-H哪吒运行Ubuntu ServerUbuntu是最受欢迎的开源操作系统之一,其稳定且可靠的特性吸引大部分开发者选用其作为开发时的首选OS。RISC-V架构在近些年的时间里飞速发展,从低端微控制器到高端服务器级处理器皆可发现用RISC-V架构进行部署的应用。开源软件搭配上开源硬件,让免费且可扩展软硬件的自由度迈上新的台阶。
D1-H哪吒开发板距发布至今已有超过一年的时间,全志以“开放BSP,融入OS”为核心,建立起了丰富的Linux开发生态,目前开发板已经成功适配了全志自研Tina Linux、Ubuntu、RT-Thread Smart、Debian、Fedora......等数款系统,全志也将携手各厂商、社区、工程师、开源创客等业内伙伴,在开源软硬件适配方向持续深耕,完善开发生态,为开发者提供多元化的选择。
-
【FAQ】全志V853芯片 烧录spinor烧录器固件方法
1.主题
v85x/v83x 烧录spinor烧录器固件方法
2.问题背景
产品:spinor 烧录
硬件:v83x / v85x-
什么是spinor烧录器固件?
烧录器固件就是就是在spinor flash上从地址start(0x00) ~ end 的二进制数据文件。 -
哪些场景会使用烧录器固件?
①工厂会使用烧录器工具多一点,在贴片前,使用烧录器固件批量给多个spinor烧录固件。烧录完成后再贴片;
②开发的同学有些也喜欢烧录自己制作的烧录器固件,而非使用全志Tina SDK 编译出来的固件。 -
如何制作烧录器固件?
①从一个已经烧录好的机器读取flash的全部二进制数据出来,形成一个烧录器固件;
②只要按照划分好各个分区的起始点,把需要pack后的分区文件按偏移拼接起来。如:
|boot0|boot_package|mbr|boot|rootfs|env|…
- 如何使用工具烧录spinor “烧录器固件” ?
请看下面的解决方法:
3.解决办法
-
如果制作好了烧录器固件: factory_flash.bin 16M烧录到16M 的spinor 里面。
-
插入usb到pc,板子进入efex 模式,进入efex 方式有:
①系统下输入reboot efex (进入后,打印会输出CCCC)
②在uboot输入 efex (进入后,打印会输出CCCC)
③按住2,上电开机 (进入后,打印会输出CCCC)
④短路flash,让flash读取失败 (进入后,打印会输出CCCC) -
下载附件工具sunxi-tester.exe(附件上) ,Pc(windows)上烧录工厂flash固件:
sunxi-tester-v853-0704.zip
- 使用帮助
Usage: D:\我的文档\桌面\sunxi-tester.exe [options] command arguments… [command…] -h, --help Print this usage summary and exit -v, --verbose Verbose logging -p, --progress “write” transfers show a progress bar -l, --list Enumerate all (USB) FEL devices and exit spiflash-read addr length file Write SPI flash contents into file spiflash-write addr file Store file contents into SPI flash
注意: 此工具sunxi-tester.exe 只能操作spinor flash 前面16M空间。 超过16M无法进行读写。
-
-
【FAQ】全志V853芯片 适配双目GC2053的操作步骤
1.主题
Tina V85x 平台适配双目GC2053的操作步骤
2.问题背景
Tina V85x 平台支持多目sensor场景。Tina V85x SDK默认配置一般都是单目sensor,比如SDK V1.0默认是单目GC2053。为方便用户适配双目或多目sensor,下面以V853 perf1方案+双目GC2053为例,介绍适配的操作步骤。
3.解决办法
一、双目GC2053适配
适配双目GC2053主要修改以下几处:1、dts设备树
文件:device/config/chips/v853/configs/perf1/board.dts
修改:- (1)修改csi/isp频率
为节省带宽,可将csi/isp频率由原来默认的300MHz降至200MHz。
vind0:vind@0 { - vind0_clk = <300000000>; + vind0_clk = <200000000>; status = "okay";
- (2)修改成离线模式
因双目场景下,ISP需分时复用,故只能支持离线模式,即work_mode改成1(离线)。
tdm0:tdm@0 { - work_mode = <0>; + work_mode = <1>; }; isp00:isp@0 { - work_mode = <0>; + work_mode = <1>; }; scaler00:scaler@0 { - work_mode = <0>; + work_mode = <1>; }; scaler10:scaler@4 { - work_mode = <0>; + work_mode = <1>; }; scaler20:scaler@8 { - work_mode = <0>; + work_mode = <1>; }; scaler30:scaler@12 { - work_mode = <0>; + work_mode = <1>; };
- (3)修改sensor配置
sensor0默认是gc2053,无需修改。但是需要修改sensor1的配置为gc2053。修改后,sensor0和sensor1的配置如下:
sensor0:sensor@0 { device_type = "sensor0"; sensor0_mname = "gc2053_mipi"; sensor0_twi_cci_id = <1>; sensor0_twi_addr = <0x6e>; sensor0_mclk_id = <0>; sensor0_pos = "rear"; sensor0_isp_used = <1>; sensor0_fmt = <1>; sensor0_stby_mode = <0>; sensor0_vflip = <0>; sensor0_hflip = <0>; sensor0_iovdd-supply = <®_aldo2>; sensor0_iovdd_vol = <1800000>; sensor0_avdd-supply = <®_bldo2>; sensor0_avdd_vol = <2800000>; sensor0_dvdd-supply = <®_dldo2>; sensor0_dvdd_vol = <1200000>; sensor0_power_en = <>; sensor0_reset = <&pio PA 18 1 0 1 0>; sensor0_pwdn = <&pio PA 19 1 0 1 0>; sensor0_sm_hs = <>; sensor0_sm_vs = <>; flash_handle = <&flash0>; act_handle = <&actuator0>; status = "okay"; }; sensor1:sensor@1 { device_type = "sensor1"; sensor1_mname = "gc2053_mipi_2"; sensor1_twi_cci_id = <0>; sensor1_twi_addr = <0x7e>; sensor1_mclk_id = <1>; sensor1_pos = "front"; sensor1_isp_used = <1>; sensor1_fmt = <1>; sensor1_stby_mode = <0>; sensor1_vflip = <0>; sensor1_hflip = <0>; sensor1_iovdd-supply = <®_aldo2>; sensor1_iovdd_vol = <1800000>; sensor1_avdd-supply = <®_bldo2>; sensor1_avdd_vol = <2800000>; sensor1_dvdd-supply = <®_dldo2>; sensor1_dvdd_vol = <1200000>; sensor1_power_en = <>; sensor1_reset = <&pio PA 20 1 0 1 0>; sensor1_pwdn = <&pio PA 21 1 0 1 0>; sensor1_sm_hs = <>; sensor1_sm_vs = <>; flash_handle = <>; act_handle = <>; status = "okay"; };
- (4)修改各video节点的配置
双目GC2053场景下,可支持的video节点分别为:
sensor0:video 0/4/8/12
sensor1:video 1/5/9/13
故只需修改以上8个video节点的配置即可。修改后的配置如下:
vinc00:vinc@0 { vinc0_csi_sel = <0>; vinc0_mipi_sel = <0>; vinc0_isp_sel = <0>; vinc0_isp_tx_ch = <0>; vinc0_tdm_rx_sel = <0>; vinc0_rear_sensor_sel = <0>; vinc0_front_sensor_sel = <0>; vinc0_sensor_list = <0>; work_mode = <0x1>; status = "okay"; }; vinc01:vinc@1 { vinc1_csi_sel = <1>; vinc1_mipi_sel = <1>; vinc1_isp_sel = <1>; vinc1_isp_tx_ch = <0>; vinc1_tdm_rx_sel = <1>; vinc1_rear_sensor_sel = <1>; vinc1_front_sensor_sel = <1>; vinc1_sensor_list = <0>; status = "okay"; }; vinc10:vinc@4 { vinc4_csi_sel = <0>; vinc4_mipi_sel = <0>; vinc4_isp_sel = <0>; vinc4_isp_tx_ch = <0>; vinc4_tdm_rx_sel = <0>; vinc4_rear_sensor_sel = <0>; vinc4_front_sensor_sel = <0>; vinc4_sensor_list = <0>; work_mode = <0x1>; status = "okay"; }; vinc11:vinc@5 { vinc5_csi_sel = <1>; vinc5_mipi_sel = <1>; vinc5_isp_sel = <1>; vinc5_isp_tx_ch = <0>; vinc5_tdm_rx_sel = <1>; vinc5_rear_sensor_sel = <1>; vinc5_front_sensor_sel = <1>; vinc5_sensor_list = <0>; status = "okay"; }; vinc20:vinc@8 { vinc8_csi_sel = <0>; vinc8_mipi_sel = <0x0>; vinc8_isp_sel = <0>; vinc8_isp_tx_ch = <0>; vinc8_tdm_rx_sel = <0>; vinc8_rear_sensor_sel = <0>; vinc8_front_sensor_sel = <0>; vinc8_sensor_list = <0>; work_mode = <0x1>; status = "okay"; }; vinc21:vinc@9 { vinc9_csi_sel = <0>; vinc9_mipi_sel = <0x0>; vinc9_isp_sel = <0>; vinc9_isp_tx_ch = <0>; vinc9_tdm_rx_sel = <0>; vinc9_rear_sensor_sel = <0>; vinc9_front_sensor_sel = <0>; vinc9_sensor_list = <0>; work_mode = <0x1>; status = "okay"; }; vinc30:vinc@12 { vinc12_csi_sel = <0>; vinc12_mipi_sel = <0x0>; vinc12_isp_sel = <0>; vinc12_isp_tx_ch = <0>; vinc12_tdm_rx_sel = <0>; vinc12_rear_sensor_sel = <0>; vinc12_front_sensor_sel = <0>; vinc12_sensor_list = <0>; work_mode = <0x1>; status = "okay"; }; vinc31:vinc@13 { vinc13_csi_sel = <1>; vinc13_mipi_sel = <1>; vinc13_isp_sel = <1>; vinc13_isp_tx_ch = <0>; vinc13_tdm_rx_sel = <1>; vinc13_rear_sensor_sel = <1>; vinc13_front_sensor_sel = <1>; vinc13_sensor_list = <0>; status = "okay"; };
2、内核配置
双mipi sensor场景下,ISP分时复用,需要使用TDM,故需打开TDM。
文件:device/config/chips/v853/configs/perf1/linux/config-4.9
修改:打开TDM配置CONFIG_SUPPORT_ISP_TDM=y CONFIG_TDM_LBC_EN=y
3、mpp middleware
首先,确保mpp配置中选中了gc2053 sensor。检查方法:
make menuconfig,依次进入配置项:Allwinner ---> eyesee-mpp ---> [*] select sensor [*] use sensor gc2053
然后,在ISP效果文件中,为第二个sensor添加效果文件配置。
位置:external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libisp/isp_cfg/isp_ini_parse.c
修改:将原来的两组gc2053_mipi配置分别拷贝一份,然后修改名字为gc2053_mipi_2即可,其他参数不用修改。struct isp_cfg_array cfg_arr[] = { ... #ifdef SENSOR_GC2053 {"gc2053_mipi", "gc2053_mipi_isp600_20220511_164617_vlc4_day", 1920, 1088, 20, 0, 0, &gc2053_mipi_v853_isp_cfg}, {"gc2053_mipi", "gc2053_mipi_isp600_20220415_144837_ir", 1920, 1088, 20, 0, 1, &gc2053_mipi_ir_isp_cfg}, {"gc2053_mipi_2", "gc2053_mipi_isp600_20220511_164617_vlc4_day", 1920, 1088, 20, 0, 0, &gc2053_mipi_v853_isp_cfg}, {"gc2053_mipi_2", "gc2053_mipi_isp600_20220415_144837_ir", 1920, 1088, 20, 0, 1, &gc2053_mipi_ir_isp_cfg}, #endif ... }
按以上步骤修改完成后,需重新编译mpp和固件,命令如下:
cleanmpp && mkmpp && mp
二、双目GC2053验证
支持验证双目GC2053的mpp sample有:
sample_rtsp(支持双目采集+编码+RTSP)、sample_smartIPC_demo(支持双目采集+编码+RTSP+人形检测)、sample_smartPreview_demo(支持双目采集+预览)
如果不需要RTSP功能,注释掉代码中的宏 #define SUPPORT_RTSP_TEST 即可。 - (1)修改csi/isp频率
-
第二届RISC-V中国峰会议程公布
第二届 RISC-V中国峰会将于2022年8月24日至26日举办,持续三天,峰会将分成两个线上分会场同时进行。
本届峰会将会包含产业界最新技术及产品发布、学术界前沿成果展示等,共收录技术报告、成果展示、短演讲80余个。
全志科技产品研发中心总经理黄少锐也将以“RISC-V音视频计算芯片的应用与探索”为题,在8月24日周三的下午,于分会场A进行线上主题演讲,欢迎感兴趣的朋友前来交流探讨。
以下为峰会的完整议程时间表:
-
Reply: 【资源汇总】V853开发板成果汇报
案例分享 ——《RTSP推流demo》
指路链接:https://bbs.aw-ol.com/topic/1705/
准备做一个RTSP推流demo,懂的都懂。
我不懂,只能移植现成的。 LIVE555 探索一波!基本思路:客户端连接 -> 调用v4l2 获取摄像头yuv->H264编码器->喂流
-
Reply: 【资源汇总】V853开发板成果汇报
案例分享 ——《LVGL NES 模拟器》
指路链接:https://v853.docs.aw-ol.com/gui/lvgl_nes/
lv_nes 是一个使用触摸屏游玩 NES 游戏的演示包。采用了最简单最基础的 NES 模拟器实现方式,运行较为卡顿,不过也更容易理解 lvgl 系统的相关操作实现。
-
Reply: 【资源汇总】V853开发板成果汇报
案例分享 ——《QT编译测试》
指路链接:https://bbs.aw-ol.com/topic/1836/
记录一下自己交叉编译QT的过程,目前来说再体验了初次编译镜像之后,编译这个QT还是算比较快捷的,因为该有的库都安装完成了。
-
Reply: 【资源汇总】V853开发板成果汇报
案例分享 ——《火影忍者结印手势识别器——人人都是copy ninja》
指路链接:https://bbs.aw-ol.com/topic/1712/
首先由摄像头捕获图像,再由V853搭载的NPU配合关键点检测的手势识别算法来AI识别手势,最后在屏幕上播放手势对应技能的动画,通过识别结印手势判断用的忍术是什么,这样人人都可以当copy ninja卡卡西咯。
-
Reply: 【资源汇总】V853开发板成果汇报
案例分享 ——《AI生成山水画,每一幅都是世间独一无二》
指路链接:https://bbs.aw-ol.com/topic/1715/
只要输入任意字符串,这个AI便会生成一幅全新的画作,每一幅都是世间独一无二的,就像是开山水画盲盒。
而完成这些的核心代码都是H5纯手写的,没有用到第三方库,整个文件大小不过100多K。这样一个“简简单单”的程序,再加上一块V853开发板,就也能轻松渲染出一幅独一无二山水画,若是再心灵手巧一点,把它做成一个电子相框裱起来挂在工位上,陶冶情操,岂不美哉。
-
【资源汇总】V853开发板成果汇报
点亮技能 开发者 简介 AI生成山水画,每一幅都是世间独一无二 DOT小文哥 只要输入任意字符串,这个AI便会生成一幅全新的画作 火影忍者结印手势识别器——人人都是copy ninja A.I.Unicorn 首先由摄像头捕获图像,再由V853搭载的NPU配合关键点检测的手势识别算法来AI识别手势,最后在屏幕上播放手势对应技能的动画,通过识别结印手势判断用的忍术是什么 QT编译测试 liuxingkeji 记录一下自己交叉编译QT的过程,目前来说再体验了初次编译镜像之后,编译这个QT还是算比较快捷的,因为该有的库都安装完成了。 移植基于 LVGL 的 2048 小游戏 YUZUKITSURU 2048 demo LVGL NES 模拟器 YUZUKITSURU 韩国开发者基于D1s做的板子,看样子是想做一个便携式的视频播放类的东西 Porject Yosemite - 基于全志V853的开发板 YUZUKITSURU 在PCB DIY 新人新画的853板子,zero尺寸0.45/0.2孔 CKH123 PCB DIY RTSP推流demo TEVET 基本思路:客户端连接 -> 调用v4l2 获取摄像头yuv->H264编码器->喂流 全志V853开发板——构建编译与固件烧录 RiceChen 带大家详细走一遍环境构建及Tina的烧录过程 -
【FAQ】全志V853芯片FAQ汇总(你不知道的和你想知道的的这里都有)
01、【FAQ】全志V853芯片 如何解决getevent运行出错,报错为“could not add watch for /dev/input”的问题?
02、【FAQ】全志V853芯片 Tina获取各个分区编译好后的分区镜像文件[脚本]
03、【FAQ】全志V853芯片 如何支持ssh功能?
04、【FAQ】全志V系列芯片 如何生成拍照缩略图和视频缩略图?
05、【FAQ】全志V853芯片 swap功能简介与tina上swap分区使用方法
06、【FAQ】全志V853芯片 VE debugfs调试节点信息说明
07、【FAQ】全志V853芯片 编码P帧帧内如何刷新功能检查?
08、【FAQ】全志V853芯片 如何在Tina V85x平台切换sensor?
09、【FAQ】全志V系列芯片 Camera-WDR模式配置指南
10、【FAQ】全志V853芯片 如何解决开启启动时amixer控件的自动配置问题?
11、【FAQ】全志V853芯片 如何使busybox syslogd时间戳格式与kernel对齐?
12、【FAQ】全志V853芯片 如何解决蓝牙扫描期间bluetoothd进程的RssAnon值一直升高?
13、【FAQ】全志V853芯片 Tina下RTSP环境搭建方法
14、【FAQ】全志V853芯片 在Tina下E907启动方式的选择
15、【FAQ】全志V853芯片 如何查看NPU时钟电源配置以及信息?
16、【FAQ】全志V853芯片 适配双目GC2053的操作步骤
17、【FAQ】全志V853芯片 烧录spinor烧录器固件方法
18、【FAQ】全志 F系列/R系列/V系列 RTOS平台cache操作接口介绍
19、【FAQ】全志V853芯片 如何动态打开蓝牙kernel部分的log?
20、【FAQ】全志V853芯片 Tina SDK LCD小分辨率DCLK设置问题
21、【FAQ】全志系列芯片如何把flash擦成空片?
22、【FAQ】全志V853芯片 Tina Linux下网络ADB内存泄露如何修复?
23、【FAQ】全志V系列芯片 在TinaLinux如何判断安全固件与rotpk.bin是否对应?
24、【FAQ】全志V85x芯片 快起方式下如何配置isp led?
25、【FAQ】全志V85x芯片 如何放开快启方案的打印?
26、【FAQ】全志V85x芯片 OTA升级失败出现"Found installer for stream recovery ubivol"以及"cannot write 16384 bytes: Operation not permitted"报错如何解决?
27、【FAQ】全志V85x芯片 如何使用tiger lcd时lti锐化功能时程序abort?
28、持续更新........ -
【FAQ】全志V853芯片 Tina下RTSP环境搭建方法
1.主题
Tina V85X RTSP环境搭建方法
2.问题背景
本FAQ主要介绍Tina V85X上搭建RTSP环境的方法。
目的
对于小内存的机器(不支持SD卡扩展),无法存储大文件,需要通过RTSP方式查看编码的结果码流;测试和调试时,方便实时查看编码后的码流。
3.问题描述
3.1复现步骤
硬件环境
- PC主机(台式或笔记本)
- USB转网口
- 开发板(支持网口)
- USB Hub(备选,若PC的USB口够用可不用)
硬件连接方式
硬件连接好后,在PC命令行(Win+R,输入cmd)中,通过 ipconfig 命令可以查看新加网卡的IP地址和子网掩码(后面配置小机端IP和netmask时需要用到)。
3.2具体表现
软件环境
按前面的硬件环境配置好后,在小机端(开发板)通过命令 ifconfig 查看IP地址发现没有分配。此时,可以临时用 ifconfig 命令配置一下(重启后会失效,需要重配)。
注意:
小机端的IP地址配置需要与新加网卡的IP在同一个网段(169.254.234.xxx),子网掩码需要与新加网卡的一致(255.255.0.0)。
ifconfig eth0 169.254.234.222 netmask 255.255.0.0
另外,通过修改网络配置文件(/etc/sysconfig/network-scripts/ifcfg-xxx)的方式可以永久修改IP,但是当前客户方案不支持这样修改,所以只能采用临时修改的方式。别的方案上可以自行尝试。
通过adb 将测试demo(支持RTSP)push 到小机端。
adb push .\sample_rtsp\sample_rtsp /tmp adb push .\sample_rtsp\sample_rtsp.conf /tmp
在小机端串口上,执行demo开启测试。
cd /tmp chmod +x sample_rtsp ./sample_rtsp -path sample_rtsp.conf
此时,在串口上可以看到RTSP的URL提示,根据当前测试情况选择对应的URL。比如: rtsp://169.254.34.222:8554/ch0 ,可以保存一下,后面使用VLC播放时要用到。
在PC主机上开启软件VLC(或者PotPlayer),输入RTSP的URL即可实时播放。
保存mp4文件
在VLC播放时,还可以实时保存接收的测试流为mp4文件。总结
通过前面的介绍,可以快速了解RTSP环境搭建的步骤。按照步骤一步一步可以顺利搭建RTSP测试环境,方便测试和调试。
-
【优秀毕设分享】基于全志D1-H和XR806的名贵植物监控装置
前言
该毕业设计是使用全志D1-H哪吒开发以及XR806开发板,再辅以外围的各种电路和传感器原件,制作而成的一个名贵植物监控装置。
该装置使用了XR806开发板构成一个网络节点,作为采集端,并且还连接了多个传感器进行环境参数的采集,并使用socket服务将采集到的数据发送到服务端。另一边使用了D1-H哪吒开发板作为服务端,D1-H哪吒开发板连接了摄像头实时采集图像,并使用基于yolov5的方法分析叶片状态,判断叶片的健康度并作为服务器,将传感器传回的数据进行分析与显示。服务器根据分析的结果,能够对XR806发出指令,在缺水的时候能够及时补水,光照不足的时候进行补光。
技术栈运用
D1-H开发板负责完成服务器收发信息、信息显示、光照控制、图像处理,涉及技术内容:
- LVGL图形框架
- Linux下Socket接口
- Linux下多线程技术
- cJSON解析器
- YOLOV5目标检测
- ......
XR806开发板负责完成环境参数采集、光照控制、水泵控制,涉及技术内容:
- LwIP协议栈
- IIC总线
- DHT11单总线
- PWM调制
- ADC采集
- ......
XR806端设计
XR806主控的系统由传感器采集部分、电源部分和控制部分组成。传感器部分负责采集环境信息,电源部分主控供电,控制部分则根据系统的信息对特定的环境参数(LED灯,水泵)进行控制。
充电电路
因为电池的电压会随着点亮的变化会有一定幅度的改变,所以需要将其稳定下来才能使用。电源部分就是使用了一个AMS1117芯片,将锂电池输出的不稳定电压稳定到3.3V,给XR806开发板及传感器供电。AMS1117是一个正向低压降的线性稳压器,压降较小。其内部集成了过热保护功能与限流电路,能有效地保护电路的正常运行,是便携式设备稳压器的理想选择。
光线、温湿度控制
补光控制主要使用了PWM调光技术。控制代码主要是控制PWM输出的占空比来调节光照的强度。在XR806中,首先初始化PWM的硬件,使用的是pwm_cycle_mode_Set(0)和pwm_capture_mode_set()函数。函数里主要配置的是相关的初始化结构体参数、PWM的频率、输出模式和占空比。初始化结束后,只要调用设置占空比的函数,即可设置占空比。结合光照传感器的控制,就可以将局部的光强控制在一定的范围内,也就是植物合适的光照。
补水部分主要配合土壤湿度传感器来进行工作。土壤湿度传感器获取到土壤湿度数据后,XR806中会进行一个判断,如果ADC采集到的电压大于一定的阈值,则启动继电器,驱动水泵进行工作,将水抽到花盆中。而显示屏上,就可以看到土壤上是处于湿润还是干燥的状态。
温湿度、光照、土壤传感器均连接在XR806上,这里取三组传感器的采集数据与标准仪器采集的数据进行比对,由两个测试点作为对照,测量出两组光照强度。对比可以看出,总体误差不大,满足了装置的要求。
D1-H与XR806通信
TCP服务器的设计主要是能够保证D1-H与XR806稳定地进行连接,并在XR806断开后还能够继续等待XR806的重新连接。这边借鉴了github上的一个开源的socket服务器代码,它使用了多线程的技术,并能够承受住较大的服务器压力,非常适合本装置的使用。
调试的基本过程如下,首先使用D1-H开发板连接上一个WiFi,然后用XR806也连接上同一个WiFi,在D1-H上启动服务器的代码,然后,启动XR806作为客户端进行连接。经过多次测试,D1-H开发板这边服务器运行非常稳定,下位机断开后会重新等待连接,在下位机重新启动后能非常迅速的进行重连。并且,在Linux下,可以使用system(wifi_info)函数来调用命令行,只需要将命令作为一个字符数组保持,就可以在程序中使用命令行操作,非常方便。本装置中连接WiFi的部分就是用这个方法,调用命令行来连接WiFi的。
D1-H服务端设计
D1-H主控的服务端软件设计根据项目所需要的功能分为三大部分。第一部分是图形界面的设计,采用的是LVGL,主要用于显示温度、湿度等数据;第二部分是TCP服务器的设计(已于上一部分介绍),用于上下位机之间的数据传输与通信;第三部分是图像处理部分,使用了YOLOV5+NCNN。
数据显示界面
图形界面使用的是LVGL。LVGL的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,具有很强的兼容性(并且与C++兼容),模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计,同时LVGL作为一个图形库,它自带着接近三十多种小工具可以供开发者使用。这些强大的构建块按钮搭配上带有非常丝滑的动画以及可以做到平滑滚动的高级图形,同时兼具着不高的配置要求以及开源属性,成为广大开发者在选择GUI时的第一选择。
根据系统的需求,图形界面需要能够显示下位机传上来的数据,而LVGL中可以使用文本控件进行数据的显示。显示图片可以使用一个图像控件配合PNG解码器进行显示。首先,需要创建两个基本控件对象,一个用于停靠采集处理后图像的图像控件,一个是停靠数据显示子控件的控件。在图像控件上,停靠了一个图像,即采集处理后的图像;在数据显示区上,放置了一系列的控件来展示环境参数信息;上边还有用于控制光照强度和水泵的开关。
图像处理
图像处理部分主要是YOLOV5的使用。使用之前,首先要训练针对特定场景的模型。首先需要创建自己的数据集,数据集分为两个部分,图像文件和标签文件。图像文件就是包含了待检测目标部分的图片和不带待检测目标的图像,分别作为正负样本进行训练。标签文件包含了检测目标的信息,标签文件的形式如下表4.2所示。一行数据代表了图像中的一个目标,若文件中含有多行数据,则表明图像中有多个目标。标签文件需要自己对需要检测的目标做标注。
有一个比较特别的是,YOLOV5的标签格式是txt后缀的,不是我们常见的xml格式后缀的,需要自己编写代码进行转换。准备好了图像和标签后,还需要保证每个标签与图像的名称一致。准备就绪后,就可以调用train.py文件进行训练。在训练的时候,需要指定一些参数,如下图所示
启动训练后,电脑会自动开始训练。训练完成后,我们可以看到目标训练结果保存的位置,有一个pt格式的文件。然后可以用detect.py文件来做一个测试,将加载的权重文件换成刚刚训练结束生成的权重文件。detect程序会使用这个文件进行检测,最后会输出一张结果图。从结果图中就可以看出目标检测的结果。
毕设开题PPT、答辩PPT、论文全文及相关源码将在全志在线开发者社区开源
毕设开题PPT、答辩PPT、论文全文及相关源码将在全志在线开发者社区开源
毕设开题PPT、答辩PPT、论文全文及相关源码将在全志在线开发者社区开源
毕设开题PPT、答辩PPT、论文全文及相关源码将在全志在线开发者社区开源
毕设开题PPT、答辩PPT、论文全文及相关源码将在全志在线开发者社区开源 -
【FAQ】全志V853芯片 如何查看NPU时钟电源配置以及信息?
[KERNEL_DIR]/arch/arm/boot/dts/sun8iw21p1.dtsi
npu: npu@03050000 { compatible = "allwinner,npu"; reg = <0x0 0x03050000 0x0 0x1000>; device_type = "npu"; dev_name = "npu"; interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk_npu>, <&clk_pll_npux4>; clock-frequency = <504000000>; interrupt-names = "npu"; iommus = <&mmu_aw 6 1>; status = "okay"; power-domains = <&pd V853_PD_NPU>; };
一:如何使能电源控制以及电源状态确认
在dts确认配置power-domains后,电源默认打开,如果NPU模块电源需要关闭,需要内核支持CONFIG_SUNXI_POWER_DOMAINS=y;不用的时候应用层软件会默认将其关闭;root@TinaLinux:/# echo 0x070010a0,0x070010ac > /sys/class/sunxi_dump/dump && cat /sys/class/sunxi_dump/dump 0x070010a0: 0x00000002 0x00020000 0x00000000 0x00000000
如上为电源处理关闭状态
echo 0x070010a0,0x070010ac > /sys/class/sunxi_dump/dump && cat /sys/class/sunxi_dump/dump 0x070010a0: 0x00000001 0x00010000 0x00000000 0x00000000
如上电源处于开启状态
二:如何配置支持的频率
clock-frequency = <504000000>;代表现在设置的频率为504M;客户请严格按照原厂建议配置,或直接默认配置,勿随意更改其频点;
clocks = <&clk_npu>,<&clk_pll_npux4>;前面为模块时钟,后面为父时钟;
在[KERNEL_DIR]/drivers/clk/sunxi/clk-sun8iw21_tbl.c中有如下table代表目前所支持的频点;
/* PLL_NPU(n, d1, freq) F_N8X8_D1V1X1 */ struct sunxi_clk_factor_freq factor_pllnpux4_tbl[] = { PLLNPU(24, 1, 300000000U), PLLNPU(40, 1, 492000000U), PLLNPU(20, 0, 504000000U), PLLNPU(25, 0, 624000000U), PLLNPU(28, 0, 696000000U), PLLNPU(41, 0, 1008000000U), PLLNPU(57, 0, 1392000000U), }; 配置规则为: npu4x的计算公式为:24M * (N+1) / (M+1)N:0-254M:0-1 在clk-sun8iw21_tbl.c中截图部分添加新的频率组即可 如:492PLLNPU(40, 1, 492000000U),24*(40+1)/(1+1)= 492
通过clk_summary我们可以看到配置是否生效
root@TinaLinux:/# cat /sys/kernel/debug/clk/clk_summary pll_npux4 0 2 504000000 0 0 npu 0 1 504000000 0 0
当然我们也可以从probe的打印看到时钟的相关配置
[ 843.717406] Want set pclk rate(504000000) support(504000000) real(504000000) [ 843.725445] Want set mclk rate(504000000) support(504000000) real(504000000)
三:怎么用命令修改时钟的频率
reboot uboot #等待其处于uboot中后: fdt list /soc/npu fdt set /soc/npu clock-frequency <696000000> fdt list /soc/npu save boot
-
【FAQ】全志V853芯片 如何解决蓝牙扫描期间bluetoothd进程的RssAnon值一直升高?
问题背景
系统平台:Tina
硬件平台:R818、R329、R328、R528 …
模组:XR829、XR819S …问题描述
客户反馈板子压测BLE扫描,不停止,bluetoothd进程RSS值一直升高。客户怀疑是内存泄露。
问题分析
1.该问题是用户一直扫描,导致RSS值升高,这个升高是合理的,因为每扫描到一个设备就会malloc一部分空间,期间不会释放该部分空间,只有在停止扫描3min后,才会一次性释放掉(bluez设计如此,3min的定时器清除暂存的扫描信息)。
2.在实际测试,会发现3min停止扫描后,RSS值并没有变小。解释:malloc时空间过小,不超过一定阈值时,是采用 sbrk方式,其在用户释放之后 ptmalloc 对这块内存进行重新管理利用,进程依然持有这块内存。其属于glibc 内存池。
3.测试1:修改M_MMAP_THRESHOLD: mmap 内存分配阈值为16B,测试到停止扫描rss的值会降低。
4.测试2:脚本压测循环打开扫描15s–关闭扫描40s。压测3天,rss值不会增加。问题总结
该问题澄清不是内存泄漏,是bluez机制如此,等停止扫描再一起释放。释放后的内存不会立即归还系统,所以不会体现在rss值上,属于进程循环使用的内存。
解决办法
-
方式一:客户不能一直扫描,应用层要扫描一段时间后,停止扫描一下,再启动扫描,要给bluetoothd一个释放的机会。就像bluetoothctl一样,执行scan on看起来是一直在扫描,实际上是做了一个定时器,一段时间后会停止扫描,再启动扫描。
-
方式二:如果客户不通过dbus的扫描,而是通过socket直接和内核通信的。可以将bluez中关闭掉存
储扫描到的设备信息,5.38版本不需要修改,设计就是这样,5.54及以上的版本需要修改。修改位置:
src/adapter.c
-
-
【FAQ】全志V853芯片 如何使busybox syslogd时间戳格式与kernel对齐?
问题背景
部分客户使用busybox syslogd作为产品的日志管理系统,syslogd 默认的时间戳及其格式与kernel不同,在分析启动时间时不便于和kernel对比,因此tina提供了调整busybox日志格式的相关patch,本文就此进行说明。
问题说明
- busybox 默认时间戳是通过 time() 函数获取的(日历时间),并将其转换成如下格式
Jan 1 00:58:45 procd: - shutdown - Jan 1 08:58:45 bluetoothd[1587]: Exit
- 而 kernel 的时间戳是通过 local_clock 获得的,最终来源于 sched_clock,由 arch_timer 驱动的,可达 ns 级。 kernel 在输出 msg 时,会在 printk_log 结构中添加时间戳,最终被转换为如下格式:
[ 0.323034] pwm module init! [ 0.327689] sunxi-pm debug v3.10
- 由上可知,有两点区别:
busybox 输出的是日历时间,受RTC,NTP等影响,会UTC时间同步。 而 kernel 输出的是系统启动 sched_clock 服务以来的时间。
busybox 的输出格式带有日期量, 而 kernel 只是启动以来的时间长度值。
解决方案
说明
首先,需要在 busybox 中获取到 kernel 的启动时间,这里我们可采用 clock_gettime 这个函数,该函数支持获取 CLOCK_REALTIME,CLOCK_MONOTONIC,CLOCK_BOOTTIME,CLOCK_PROCESS_CPUTIME_ID等时间值。然后,将获取到的时间转换为内核的输出格式。
步骤
1, 在 $(TINA_TOPDIR)/package 打附件补丁
2, 执行 make menuconfig, 按照需要配置目前支持读取 CLOCK_REALTIME,CLOCK_MONOTONIC,CLOCK_BOOTTIME 等时间类型Base system ---> busybox ---> System Logging Utilities ---> [*] syslogd ---> [*] Support kernel stamp format. Choose Time Source (CLOCK_BOOTTIME) --->
-
【FAQ】全志V853芯片 如何解决开启启动时amixer控件的自动配置问题?
问题
客户tina-v853-perf1板开机后,使用aplay, arecord等工具播放或采集音频失败。或者app直接调用snd_pcm_open()打开pcm设备,
原因分析
没有配置amixer控件建立通路,比较关键的控件是“MIC1 Switch”,必须配置为1,以打开通路。
解决办法
在开机启动时自动配置好amixer控件,避免用户自己手动配置amixer控件。有几种方式可选。
- 在开机启动的脚本rc.final中,配置amixer控件。
amixer cset name='MIC1 Switch' 1
但是如果在编译固件时没有编译alsa-utils,那么固件中没有amixer,就不能使用这种方式了。
- 在alsa配置文件asound.conf中使用hooks插件。
tina-v853的perf1工程,asound.conf的路径是:target/allwinner/v853-perf1/busybox-init-base-files/etc/asound.conf。
pcm.CaptureMic { type hooks slave.pcm "hw:0,0" hooks.0 { type ctl_elems hook_args [ { name "MIC1 Switch" preserve true optional true value 1 } ] } }
如上代码,如果app打开的节点是pcm.CaptureMic,那么在asound.conf中定义它为hooks类型,然后把需要配置的amixer控件作为参数写进结构体中。这样在这个node被打开时,就调用一些hook函数,配置hooks里面指定的amixer控件。
关于hooks类型的插件的说明,可以参考 https://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html 的"Plugin: hooks"。
- 在代码中打开amixer控件并配置。
tina-v853-perf1使用的是这种方式,所以需初始化mpp平台后,amixer控件才被配置好。
for (elem = snd_mixer_first_elem(mixer->handle); elem; elem = snd_mixer_elem_next(elem)) { snd_mixer_selem_get_id(elem, sid); //snd_mixer_selem_set_playback_volume_range(elem, AUDIO_VOLUME_MIN, AUDIO_VOLUME_MAX); //snd_mixer_selem_set_capture_volume_range(elem, AUDIO_VOLUME_MIN, AUDIO_VOLUME_MAX); // open lineout and mic switch const char *elem_name = snd_mixer_selem_get_name(elem); alogv("alsa_elem:%s",elem_name); if ( !strcmp(elem_name, AUDIO_ADC_MIC1_SWITCH) ) { snd_mixer_selem_set_playback_switch(elem, 0, 1); } else if ( !strcmp(elem_name, AUDIO_ADC_MIC2_SWITCH) ) { snd_mixer_selem_set_playback_switch(elem, 0, 0);// disable mic2 by default } else if(!strcmp(elem_name, AUDIO_LINEIN_SWITCH)) { snd_mixer_selem_set_playback_switch(elem, 0, 0); } else if (!strcmp(elem_name, AUDIO_LINEOUT_VOL)) { // lineout volume. 0x1f~0x02 : 0dB~-43.5dB, 1.5dB/step. 27 : -6dB. // user had better not change this ctrls, nor will cause wave distort! long vol_val = 27; snd_mixer_selem_set_playback_volume(elem, 0, vol_val); alogd("set playback vol_val to value: %ld", vol_val); aoVolume = 100*vol_val/AUDIO_VOLUME_MAX; if (aiDevEnable) { aioDebugUpdataFlag |= aoVolumeFlag; } } else if (!strcmp(elem_name, AUDIO_LINEOUT_SWITCH)) { snd_mixer_selem_set_playback_switch(elem, 0, 1); } else if (!strcmp(elem_name, AUDIO_LINEOUT_MUX)) { snd_mixer_selem_set_enum_item(elem, 0, 1); // increase play volume when amplifier differential input } else if(!strcmp(elem_name, AUDIO_PA_SWITCH)){ snd_mixer_selem_set_playback_switch(elem, 0, 1); aoPALevel = 0; } }
-
【V853开发板试用】带大家来一次全志V853开发板沉浸式开箱!
全志V853开发板已于前几日正式官宣上线发布,与此同时全志也为广大开发者提供了V853开发板试用申请的活动,活动问卷仍在持续收集中,欢迎大家继续投递试用申请(据说问卷填的越详细,得到开发板的几率就越大哦)申请结果也将通过邮件通知到大家,请大家稍安勿躁,耐心等待板子。
今天先领着大家跟随已经申请成功并收到开发板的B站UP主“BanGo板狗”一起沉浸式开个箱,还没申请到开发板的也来沾一沾欧皇的好运气,先来浅看一下V853开发套件都包含哪些有意思的东西。
B站ID:BanGo板狗 主页
非官方完整开箱视频
B站链接:https://www.bilibili.com/video/BV1xa411x72p盒子里最让人期待的当然是V853开发板,与以往其他开发板不同的是,V853开发板配置上了高清双目摄像头以及高清屏幕,开箱时也是让人惊呼“分量十足”,全部器件都安装在了一块黑色的亚克力板上,精致get,优雅get,大气get。
板子的设计也十分巧妙,有白线将板载资源的各个模块细分了出来。
V853的板载资源十分丰富,开发板配置了512M DDR以及8G eMMC,集成了LED、WiFi、蓝牙、以太网、音频、屏幕、USB、TF卡等模块。
开发套件里还包含了三条线:电源线、串口线和Type-C的数据线。
以上就是V853开发套件所包含的全部内容,V853开发板的试用申请仍在持续进行中,欢迎大家继续投递试用申请。
更多V853开发板,正在路上,敬请期待~
-
全志V853开发板发布!开发板试用同步开放申请!
全志V853芯片是全志推出的面向边缘AI视觉处理的AIoT芯片,V853集成了Arm Cortex-A7、RISC-V E907 和最大1T算力的NPU,采用三核异构设计,同时还启用了全志科技最新一代视觉处理引擎。
为了方便开发者产品预研和项目开发,全志推出了V853开发板。开发板配置了512M DDR以及8G eMMC,集成了LED、WiFi、蓝牙、以太网、音频、屏幕、USB、TF卡等模块。可以帮助开发者快速上手进行开发。
同时,开发板将支持最新的Tina Linux5.0 AIoT系统(base Linux4.9内核)。
应用场景
V853具有丰富的算力和音视频接口,适用于各类有AI视觉需求的AIoT终端设备。可以满足边缘AI产品多目摄像头、屏幕、低功耗、语音、无线网络等规格需求,可以广泛应用于AI摄像头、考勤机、智能后视镜、扫描翻译笔、运动相机、访客机、行车记录仪、楼宇门禁等场景。
参数规格
- 主控:全志V853 Arm A7 1GHz+RISC-V E907 600MHz+1T NPU
- DDR:512MB DDR3 型号:晶存RS256M16VRDX-93BT
- Memory:8GB eMMC 型号:妙存AT70B08G3
- 无线网络:2.4G WiFi/BT 型号:全志XR829模组
- 有线网络:100Mbps以太网 型号:IP101GR
- 摄像头:1080P双目摄像头 型号:GC2063 *2
- 屏幕:7寸 LCD屏幕
- 麦克风:模拟麦克风 *2
- 按键:8个 Uboot * 1,Power * 1,Reset * 1 ,GPADC * 5
- 灯:绿色LED * 1,红色LED * 1, 蓝色LED * 1
- DEBUG:支持uart串口调试,支持ADB USB调试
- USB:Type-C USB * 1, 同时支持供电和数据传输
- PMU:全志AXP2101
- 板身大小:长 118mm*宽 75mm
- PCB板层:4层板
V853开发板获取
V853开发板的相关资料也已开源,开发者可以在全志在线官网在线文档处获取原理图等开发资料用以进行开发工作,全志也为广大开发者提供了V853开发板试用申请的活动,该活动将面向开发预研、学习科研、DIY项目等方向开放试用活动,可以通过扫描下方二维码参与试用活动。
问卷链接:https://www.wjx.cn/vj/mNVti6w.aspx
除了通过试用活动获取全志V853开发板,您也可以通过在全志在线论坛开源个人项目的原理图与PCB来申请免费的V853样片,或自行购买我们的V853样片和开发板,购买方式如下。淘宝链接:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-24100578000.32.17901c9aYnOmKT&id=675340119398
1
-
【FAQ】全志V系列芯片 Camera-WDR模式配置指南
本文档提供V系列(V53x、V83x、V85x)SDK Camera-WDR模式的配置方法,其中主要内容包括:
(1)Camera硬件条件支持
(2)内核配置
(3)WDR效果文件配置
(4)MPP VI组件WDR模式配置
(5)通路模式检查方法 -
【FAQ】全志V853芯片 如何在Tina V85x平台切换sensor?
目的
V85x某方案目前默认Sensor是GC2053。实际使用时若需要用到GC4663(比如wdr功能)和SC530AI(支持500W),可按如下步骤完成切换。
步骤
下面以GC4663为例,SC530AI按相应方式适配。
- Step1 检查Sensor驱动是否被编译成.ko文件
GC4663 Sensor驱动文件gc4663_mipi.c和配置Sensor驱动编译的Makefile文件路径的路径:
tina\lichee\linux-4.9\drivers\media\platform\sunxi-vin\modules\sensor
修改配置Sensor驱动编译的Makefile文件:
添加后,重新mkernel即可编译出GC4663驱动的ko文件。
- Step2 检查ISP效果文件是否已适配
效果文件gc4663_mipi_wdr_default_v853.h路径:
tina\external\eyesee-mpp\middleware\sun8iw21\media\LIBRARY\libisp\isp_cfg\SENSOR_H\gc4663
效果文件解析文件isp_ini_parse.c路径:
tina\external\eyesee-mpp\middleware\sun8iw21\media\LIBRARY\libisp\isp_cfg\
若没有sensor对应的效果文件,则需要先添加和适配。
适配后,通过make menuconfig修改sensor为gc4663。
- Step3 检查board.dts是否已适配
板级配置文件board.dts的路径:
tina\device\config\chips\v853\configs\perf1
其中,I2C地址可以从GC4663 Sensor驱动中找到。
tina\lichee\linux-4.9\drivers\media\platform\sunxi-vin\modules\sensor\gc4663_mipi.c
- Step4 修改ko自动加载脚本
先将ko拷贝到/lib/modules/下,然后加载ko。
(1)拷贝ko
modules.mk的路径:
tina\target\allwinner\v853-perf1
(2)加载ko
S00mpp的路径:
tina\target\allwinner\v853-perf1\busybox-init-base-files\etc\init.d
- Step5 重新编译mpp和固件
重新编译mpp和固件的命令:
cleanmpp && mkmpp && mp
- Step1 检查Sensor驱动是否被编译成.ko文件
-
【Sipeed D1 Dock Pro】YoC RTOS 实战:Lichee D1 Dock 开发板 Button按键
原文链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300979.0.0.6719180famVQy0&id=4037255443398668288
作者 @ 未来开发者1. 准备工作
建议在操作前先阅读以下技术文章:
Lichee D1 dock 开发板用户指南
Lichee D1 dock 开发板快速上手教程2. 示例介绍
本示例集成了各种基础控件。可以通过屏幕触控进行页面的操作。HaaS UI小程序相关的开发指南可以参考官方指南。
3. 示例演示
3.1 剑池CDK(以下简称CDK)演示
3.1.1 示例获取
双击打开CDK,点击工具栏最右侧的平头哥图标。点击新建工程按钮。
在搜索栏里输入haasui, 在结果里选择haasui_falcon_demo,点击右侧的创建工程,版本选择v7.5.1。
3.1.2 编译
右键点击haasui_falcon_demo工程,选择build,进行编译,直到结束。编译完成后,可以在工程目录下out文件夹里找到yoc_rtos_8M.img文件。
3.1.3 下载
- 通过CDK烧写
先连接好硬件JTAG。然后点击红色框框处的按钮开始烧写。
烧写完毕之后,按复位键即可启动。
- 通过全志工具烧写
在没有JTAG的情况下,只能通过全志的PhoenixSuit工具进行烧写。将编译出来的yoc_rtos_8M.img文件选中,
-
按住FEL按钮,重新上电后,重启后固件开始烧录,直到完成。
-
如果当前镜像支持xfex模式烧写,直接在串口命令行执行“xfex"命令,再执行"reboot"命令进行重启,重启后固件开始烧录,直到完成。
3.2 命令行演示
3.2.1 示例获取docker-ubuntu18:~$ mkdir test docker-ubuntu18:~$ cd test docker-ubuntu18:~$ yoc init docker-ubuntu18:~$ yoc install sdk_app_d1 -b v7.5.1 Start to install components... sdk_app_d1 (v7.5.1), clone https://gitee.com/yocop/sdk_app_d1.git ... …… (省略) …… d1_evb (v7.5.1), clone https://gitee.com/yocop/d1_evb.git ... chip_d1 (v7.5.1), clone https://gitee.com/yocop/chip_d1.git ... Download components finish. docker-ubuntu18:~/test$ ls boards components solutions
3.2.2 编译
docker-ubuntu18:~/test/solutions$ cd haasui_falcon_demo docker-ubuntu18:~/test/solutions/haasui_falcon_demo$ make …… (省略) …… LINK out/haasui_falcon_demo/yoc.elf INSTALL yoc.elf riscv64-unknown-elf-objdump -d out/haasui_falcon_demo/yoc.elf > yoc.asm Generating yoc.bin scons: done building targets. YoC SDK Done [INFO] Create bin files update /home/shuta.lst/work/aone/yoc/dasai3/solutions/haasui_falcon_demo/data/resources [2022-02-23 16:12:39] Start to sign images with key:def_otp [2022-02-23 16:12:39] Sign [prim] with [def_otp] [2022-02-23 16:12:39] rsa verify ok.... [2022-02-23 16:12:39] Sign prim ok. ---------------------------------------------------------------- boot0, 0, 0, 0x00000000, 0x0000c000, 0x0000c000, boot0 gpt, 0, 0, 0x0000c000, 0x00004000, 0x00010000, gpt boot, 0, 0, 0x00010000, 0x00025000, 0x00035000, boot imtb, 0, 0, 0x00035000, 0x00002000, 0x00037000, imtb prim, 1, 0, 0x00037000, 0x00360000, 0x00397000, prim lfs, 0, 0, 0x00397000, 0x00452000, 0x007e9000, lfs misc, 0, 0, 0x007e9000, 0x00013000, 0x007fc000 kv, 0, 0, 0x007fc000, 0x00004000, 0x00800000 boot0, 49152 bytes gpt, 8192 bytes boot, 143896 bytes prim, 1982620 bytes lfs, 4530176 bytes imtb, 8192 bytes ---------------------------------------------------------------- Create yoc_rtos_8M.img in out directory Success!
3.2.3 下载
可以通过3.1.3的下载方式进行烧录,也可以通过命令行进行烧录。
命令行烧录之前要先连接好T-HeadDebugServer。然后在终端输入make flashall命令:
lh@lh:~/.../solutions/haasui_falcon_demo > make flashall [2022-02-17 10:29:22] I am RISC-V Program partition: boot0 address: 0x0, size 49152 byte erasing... program 00x0000c000, 100% Program partition: gpt address: 0xc000, size 8192 byte erasing... program 00x0000e000, 100% Program partition: boot address: 0x10000, size 143896 byte erasing... program 0x00032000, 100% Program partition: imtb address: 0x35000, size 8192 byte erasing... program 00x00037000, 100% Program partition: prim address: 0x37000, size 1966236 byte erasing... program 0x00217000, 100% Program partition: lfs address: 0x397000, size 4530176 byte erasing... program 00x007e9000, 100% lh@lh:~/.../solutions/haasui_falcon_demo >
4. 运行
重新上电或按下RST键,系统启动,串口会有以下打印信息,表示系统运行成功。
(cli-uart)# ###YoC###[Feb 17 2022,10:44:07] cpu clock is 1008000000Hz display init ok. haasui entry here! haasui build time: Feb 17 2022, 10:39:48 [TP] GT9xx init [TP] start to probe![2, 0x5d] 0X39 0X31 0X31 0X0 0X0 [TP] Found chip gt911 [TP] GT9xx Config version: 0x5C [TP] GT9xx Sensor id: 0x03
4. 运行
重新上电或按下RST键,系统启动,串口会有以下打印信息,表示系统运行成功。
###YoC###[Feb 7 2022,11:34:48] cpu clock is 1008000000Hz (cli-uart)# Run lradc test
当按下对应的按键之后会有相应的打印信息输出:
user key is pressed one times
5. 总结
本文介绍了DOCK开发板的按键使用示例,用户可以通过示例代码了解按键的简单触发机制
-
【FAQ】全志V853芯片 编码P帧帧内如何刷新功能检查?
编码P帧帧内刷新功能检查方法
H264
使用Elescard StreamEye 4.6 工具(只支持H264),按如下截图配置后,开启P帧帧内刷新后,图像看到一个橙色的竖状矩形条,同时逐帧往后查看时矩形条会从左往右移动;关闭P帧帧内刷新后,则无此矩形条。
H265
使用YUView 工具(需要配置ffmpeg动态库)可分析H265文件,勾选Pred Mode后,可显示一个蓝色的竖状矩形条,同时逐帧往后查看时矩形条会从左往右移动;关闭P帧帧内刷新后,则无此矩形条。
注:
YUView 工具配置ffmpeg动态库
为使YUView 工具分析能力更强,需要配置ffmpeg动态库。配置方法如下:
-
【FAQ】全志V853芯片 VE debugfs调试节点信息说明
VE debugfs调试节点信息说明
【调试信息】
cat /sys/kernel/debug/mpp/ve ********Channal[0]: H265Enc Ver.07388090580d7ad94c897633057ff0806abf4340 F119******** MainProfile, Level:186, BitRate:1048576, FrameRate:20 Input:1920x1080, Output:2304x1296, RotAng:0 Crop: Left:0, Top:0, Width:0, Height:0 IDRPeriod:40, GopSize:2, NormalP, VBR, IpcCase, Colour InitQp:30, IQp[10~50], PQp[10~50] CurPQp:29, TargetBits:23424, RealBits:25920, BitRatio:110.66% Scene:1, Move:0, MovingLevel:0, BinImgRatio:0.32%, MovingTh:20 AvgBitRate:3, RealBitRate:763, AvgFrmRate:0, RealFrmRate:21 LBC:1, Lossy2X, y&yc_stride:1152,1728 VbvSize:622592, Unused:619328, Valid:3264, ValidFrmNum:1 Intra4x4:1, IntraInP:1, 3DNR:1 Quality:10, IBitsCoef:10, PBitsCoef:10 Mad[][10]:96.21 1.55 0.42 0.23 0.17 0.10 0.07 0.03 0.00 0.00 0.00 0.00 Mad[0][]:3.83 4.90 39.77 30.91 10.06 3.28 1.81 0.83 0.45 0.36 ClassifyTh[]:0 0 0 0 0 0 0 0 0 0 0 0 Lambda:0.00, LambdaC:0.00, LambdaSqrt:0.00 Intra: Coef{31 31 31}, Th{0 0 0} PredTend: Inter:16, Skip:16, Merge:20 ********End Channal[0] H265Enc******** ********Channal[1]: H264Enc Ver.07388090580d7ad94c897633057ff0806abf4340 F119******** MainProfile, Level:51, BitRate:512000, FrameRate:20 Input:640x360, Output:640x360, RotAng:0 Crop: Left:0, Top:0, Width:0, Height:0 IDRPeriod:60, NormalP, VBR, IpcCase, Colour InitQp:30, IQp[10~45], PQp[10~45] CurPQp:20, TargetBits:20894, RealBits:25648, BitRatio:122.75% Scene:0, Move:1, MovingLevel:1, BinImgRatio:1.55%, MovingTh:20 AvgBitRate:585, RealBitRate:374, AvgFrmRate:21, RealFrmRate:21 LBC:1, Lossy2X, y&yc_stride:384,576 VbvSize:304128, Unused:300864, Valid:3264, ValidFrmNum:1 Intra4x4:1, IntraInP:1, 3DNR:1 Quality:10, IBitsCoef:10, PBitsCoef:10 Mad[][10]:46.81 7.12 1.50 0.44 0.38 0.56 0.19 0.19 0.25 0.06 0.00 0.00 Mad[0][]:1.31 5.94 7.38 3.81 4.75 5.50 7.31 4.81 3.62 2.38 ClassifyTh[]:0 0 0 0 0 0 0 0 0 0 0 0 ********End Channal[1] H264Enc********
【参数说明】
参数 描述 Channal VE通道号,0/1/2/3 EncType 编码类型,H264:H264Enc;H265:H265Enc Ver 编码库版本,对应的commit ID FrameCnt 编码帧的帧数,例如F119表示第119帧 Profile 编码输出视频的档次,档次越高,允许使用的编码技术越丰富。H264低于High不能使用8x8转换,质量变差,如客户没具体要求,默认H264使用Hihg,H265使用Main。H264:Base/ Main/ High,H265:Main/ Main10/ MainStill Level 编码输出视频的等级,按照标准规定的分辨率和帧率而定。过往有些客户的机器出现解码高Level码流性能不足的情况,所以建议由编码库内部自适应配置。H264:定义在enum H264_LEVEL_E,H265:定义在enum H265_LEVEL_E BitRate 码率,单位bps FrameRate 帧率,单位fps Input 编码输入分辨率 Output 编码输出分辨率 RotAng 旋转角度 Crop 裁剪坐标 IDRPeriod I帧周期 GopSize 编码参考集大小,该参数不影响码率控制,H265的该参数会影响某些解码器的参考帧内存预分配,建议统一配置成2。 FixQp 固定I/P帧Qp,仅在RcMode选择FixQp时生效 InitQp RcMode为非FixQp下,首个I帧Qp IQp I帧Qp取值范围 PQp P帧Qp取值范围 TargetBits 当前帧目标bit数 RealBits 当前帧实际bit数 BitRatio bit数比例 = 100 * RealBits / TargetBits Scene 纹理复杂程度的等级,[0,2] Move 运动复杂程度的等级,[0,4] MovingLevel 场景变化剧烈程度等级,[0,3] BinImgRatio SAD超过MovingTh的8x8块数量比例,[0%,100%] MovingTh 8x8块SAD阈值,[10,31] AvrBitRate 到目前为止的平均码率,按编码器拿到的VIBuffer的时间戳每隔一秒更新一次 RealBitRate 实际最近一秒内的瞬时码率,按编码器拿到的VIBuffer的时间戳每隔一秒更新一次 AvgFrmRate 到目前为止的平均帧率,按编码器拿到的VIBuffer的时间戳每隔一秒更新一次 RealFrmRate 实际最近一秒内的瞬时帧率,按编码器拿到的VIBuffer的时间戳每隔一秒更新一次 AFBC VI使用LBC的开关,[0,1] LBC VI使用LBC的开关,[0,1] VbvSize 编码器输出Buffer长度 Unused VbvBuffer剩余可用空间 Valid VbvBuffer已占用空间 ValidFrmNum 占用VbvBuffer未归还的帧数量 Intra4x4 帧内4x4块预测开关,[0,1] IntraInP P帧使用帧内预测开关,[0,1] 3DNR 编码器3D滤波开关,[0,1] Quality 静止场景下的P帧bit数比重,按10为100%计算,[0,20] IBitsCoef I帧bit数比重,按10为100%计算,[1,20] PBitsCoef 运动场景下P帧bit数比重,按10为100%计算,[1,50] Mad[][10] 纹理MAD直方图比例分布,以10为步长 Mad[0][] 纹理MAD在10以内的直方图比例分布,以1为步长 ClassifyTh MB级码控分类阈值 Lambda H265编码器Lambda值,H264:无效,V853的H265无效 LambdaC H265编码器LambdaC值,H264:无效,V853的H265无效 LambdaSqrt H265编码器LambdaSqrt值,H264:无效,V853的H265无效 IntraCoef 帧内分块决策系数,三个系数分别对应32x32、16x16、8x8块,系数越大,越倾向于分小块,H264:无效,H265:[0,31] IntraTh 帧内分块决策MAD阈值,三个阈值分别对应32x32、16x16、8x8块,阈值越小,越倾向于分小块,H264:无效,H265:[0,127] PredTendInter Inter预测模式倾向系数,系数越小,越倾向于Inter预测,H264:无效,H265:[0,63] PredTendSkip Skip预测模式倾向系数,系数越小,越倾向于Skip预测,H264:无效,H265:[0,63] PredTendMerge Merge预测模式倾向系数,系数越小,越倾向于Merge预测,H264:无效,H265:[0,36] 【调试方法】
app运行结束后,支持查看VE debugfs调试信息功能的开启方法。
默认情况下,app运行结束后,通过 cat /sys/kernel/debug/mpp/ve 无法继续查看ve的debugfs调试信息。
在app运行前执行命令 echo 1 > /sys/kernel/debug/mpp/ve 可开启该功能。
平台重启后,修改会自动失效,需要重新打开。执行命令 echo 0 > /sys/kernel/debug/mpp/ve 可恢复默认情况。
-
【FAQ】全志V853芯片 swap功能简介与tina上swap分区使用方法
swap功能简介
1、概念介绍
swap:系统内存紧张时进行的内存回收操作。
swap分区:在swap内存回收操作中,被回收的匿名页会回写到swap分区。
系统没有swap分区的时候,依旧会进行swap操作,swap操作不一定会操作到swap分区。
2、swap分区介绍
linux系统支持各种块设备、文件作为swap分区,且容量可以叠加。比如同时使用spinor上的swap裸分区和TF卡上的文件叠加作为swap分区。申请成功的swap容量可以通过free命令查看.
total used free shared buffers cached Mem: 511776 506952 4824 0 512 836 -/+ buffers/cache: 505604 6172 Swap: 1020 44 976
各存储基于TINA SDK使用swap的方法
1、swap分区使用方法
swap分区的使能依赖mkswap命令和swapon命令。对于TINA SDK大部分存储来说。只需要make menuconfig选中mkswap、swapon命令,且在sys_partition(_nor).fex分区表中分配一个作为swap分区的裸分区即可。
root@(none):/# free total used free shared buffers cached Mem: 511776 16820 494956 0 1260 2068 -/+ buffers/cache: 13492 498284 Swap: 0 0 0 root@(none):/# mkswap /dev/by-name/swap Setting up swapspace version 1, size = 1020 KiB no label, UUID=c714a274-5c8b-44e9-87f0-e6ce39226621 root@(none):/# swapon /dev/by-name/swap [ 223.756712] Adding 1020k swap on /dev/by-name/swap. Priority:-1 extents:1 across:1020k SS root@(none):/# free total used free shared buffers cached Mem: 511776 16820 494956 0 1356 2128 -/+ buffers/cache: 13336 498440 Swap: 1020 0 1020
2、存储使用差异
大部分存储都可以使用上文介绍的方式来使能swap分区,mkswap的前提是你可以获得一个可读可写的块设备/文件,比如mtdblockn、mmcblk0pn、nandn。
对于ubi nand来说,tina系统默认使用squashfs+ubifs来获得一个可读写的overlay,其中squashfs就依赖于块设备,但对于ubi nand来说,提供给squashfs的ubiblock必须是只读的,只读的ubiblock+只读文件系统squashfs的搭配。所以尽管在用户态可以创建出ubiblock,创建出来的ubiblock也是只读的,不满足mkswap的需求。此时尝试基于可读写的overlay创建文件,利用ubifs上的文件来作为swap,测试发现mkswap可以成功,但是并不能swapon。
基于以上,提出了两种方法:
(1)直接不使用ubi nand的逻辑分区,即不使用mtdblock上的ubiblock,直接使用mtdblock,操作底层的物理块设备,pstore/blk在ubi nand上也是此种做法,但是这种做法的风险点在于,mtdblock并没有磨损平衡,只有坏块处理。所以对应的swap分区寿命不长。
(2)不使用tina squashfs+overlay的做法,直接使用mkfs.ubifs制作一个可读可写的rootfs,内核关闭readonly-ubi块的配置,让系统可以顺利创建出可读可写的ubiblock。但是需要牺牲根文件系统只读的功能,在掉电等存储不稳定的场景下,根文件系统有可能被损坏。在保证存储稳定性的情况下,这种方法应该是优选。
小知识
1、swap分区没有被用完,为什么依旧会oom
内核触发kswapd进行内存回收时,会对匿名页和文件页进行回收(有更多仲裁方法,不展开叙述),其中文件页的回收方法是清除缓存的文件内容,并不需要回写flash,因为文件页的实际文件一直保存在flash中,下一次读文件时,需要重新从flash中读回文件,无法直接从缓存中获取文件内容;匿名页的回收方法是写到swap分区(当存在swap分区的时候)。所以当你内存临界,且在系统仲裁下已经没有可以回收的匿名页时,尽管swap分区没有用完,依旧会触发oom。
2、CPU占用率和内存的取舍
/proc/sys/vm/swappiness节点描述系统对swap分区的使用原则,0表示最大限度使用物理内存,100表示最大限度使用swap分区。在内存紧张的情况下,可以使用swap分区,但是频繁使用swap分区必然导致CPU占用率的升高,此时可以通过调节swappiness节点来对CPU占用率和内存进行平衡。
-
【FAQ】全志V系列芯片 如何生成拍照缩略图和视频缩略图?
适用范围
只适用于V系列,并使用MPP多媒体框架。
拍照缩略图的处理
设置JPEG编码生成缩略图
在创建一个JPEG编码的通路时,想要同时生成缩略图,其实很简单,只需要在调用AW_MPI_VENC_SendFrame之前调用AW_MPI_VENC_SetJpegExifInfo设置缩略图属性即可。VENC_EXIFINFO_S stExifInfo; memset(&stExifInfo, 0, sizeof(VENC_EXIFINFO_S)); stExifInfo.ThumbWidth = thumbnailWidth; stExifInfo.ThumbHeight = thumbnailHeight; stExifInfo.thumb_quality = thumbnailQuality; stExifInfo.Orientation = mJpegRotate; AW_MPI_VENC_SetJpegExifInfo(vechn, &stExifInfo); AW_MPI_VENC_SendFrame(vechn, &frmInfo);
获取缩略图
通过调用接口AW_MPI_VENC_GetJpegThumbBuffer,我们可以得到缩略图buffer的起始指针,和其大小。需要注意的是,缩略图并不是单独的buffer,而是保存在整个JPEG图像数据中的。
我们可以通过比较缩略的起始地址指针和JPEG图像数据的起始指针,得到其在JEPG文件中的偏移位置。同时由于JPEG文件的格式,我们可以在保存JPEG文件时,将得出的缩略图偏移量和大小写入到文件尾部,当需要缩略图去显示的时候,能更方便的获取到缩略图数据。
int getThumbOffset(VENC_STREAM_S *pVencStream, VENC_JPEG_THUMB_BUFFER_S *pThumbBuf, off_t *pThumbOffset) { if (NULL == pVencStream || NULL == pThumbBuf) { aloge("fatal error! why parameter is null!"); return -1; } if (pThumbBuf->ThumbAddrVir >= pVencStream->mpPack[0].mpAddr0 && \ pThumbBuf->ThumbAddrVir < pVencStream->mpPack[0].mpAddr0+pVencStream->mpPack[0].mLen0) { *pThumbOffset = pThumbBuf->ThumbAddrVir - pVencStream->mpPack[0].mpAddr0; } else if (pThumbBuf->ThumbAddrVir >= pVencStream->mpPack[0].mpAddr1 && \ pThumbBuf->ThumbAddrVir < pVencStream->mpPack[0].mpAddr1+pVencStream->mpPack[0].mLen1) { *pThumbOffset = pThumbBuf->ThumbAddrVir - pVencStream->mpPack[0].mpAddr1; } alogd("get thumb offet[%lld]", *pThumbOffset); return 0; }
视频生成缩略图
视频生成缩略图的方法是通过demux组件解析一帧图像,送入解码器,将其解码为YUV图像,再将其送入编码器缩放编码为较小的图像作为视频的缩略图。
demux -> vdec -> venc -> jpeg
详细的实现流程可以参考 softwinner/eyesee-mpp/framework/v316/demo/sample_ThumbRetriever下的sample_ThumbRetriever和eyesee-mpp/framework/v316/media/thumbretriever路径下的EyeseeThumbRetriever类的实现流程。
-
【FAQ】全志V853芯片 如何支持ssh功能?
1 问题背景
v853有客户需要使用到ssh服务,使用该服务来进行文件传输或者系统登陆。
2 问题描述
v853有客户需要使用到ssh服务,使用该服务来进行文件传输或者系统登陆。但在开发的过程中发现ssh的基本功能使用不了,包括使用ssh进行远程登录,和使用scp进行文件传输。
3 解决办法
3.1 编译ssh包,如下配置后进行编译即可编译ssh相关工具
make menuconfig --> network --> ssh -*- openssh-client <*> openssh-client-utils -*- openssh-keygen < > openssh-moduli <*> openssh-server <*> openssh-server-pam
3.2 添加sshd账号
1.系统起来后启动/usr/sbin/sshd服务可能会失败,因为此时没有sshd账号,因此需要创建一个sshd账号
2.在/etc/passwd文件中添加sshd账号信息,如下:
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/bin/ash
注意:该信息需要根据系统实际情况进行改动,例如在v853中使用的是ash shell,但其他方案中不一定使用的是ash shell
3.使用ssh-keygen命令创建3个key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
4.mkdir /var/empty/sshd --> 创建sshd账号的工作目录
5.使用passwd命令给sshd账号添加密码。
6.在小机端执行命令/usr/sbin/sshd启动ssh服务
7.执行完上面的操作后即可在pc端使用ssh工具使用sshd账号远程登录小机端了。
3.3 以root用户登录小机端
上面的操作只能以sshd账号登录到小机端,sshd账号权限有限,在开发阶段很多操作都做不了,因此一般需要使用root用户进行登录,
执行下面的操作后即可以root用户进行登录
1.使用passwd命令给root账号添加密码,一般新烧的系统root账号是没有设定密码的,在tina系统中使用passwd命令修改的密码是保存在/etc/passwd文件中的。
2.rm /etc/shadow(tina v853方案中要删除shadow里root账号信息,否则远程登录时使用的是shadow里的密码,但该密码不清楚是什么,该密码与/etc/passwd中的密码有覆盖现象)
3.修改/etc/ssh/sshd_config文件,添加PermitRootLogin yes配置项(该配置项是允许ssh以root账号登录)
4.如果此前sshd服务已开启,那么重启sshd服务,到此可以以root账号登录小机端了。
3.4 使用scp工具进行文件传输
在开发阶段一般scp要以root账户去进行文件的传输,否则很容易因文件权限的问题导致传输失败,因此在使用scp时最好已调通以root用户进行登录。
1.tina SDK中的package/network/openssh包里把scp和ssh工具名字修改为了openssh-ssh和openssh-scp了,在window系统中使用scp命令上传或下载文件会报错。
2.报错原因是小机端找不到scp工具,因此需要把package/network/openssh包里的openssh-scp工具名字修改回scp即可
(修改package/network/openssh/Makefile文件)
注意:该问题是pc端是window系统时发现的,其他系统作为登录端时可能不需要,可以自行进行测试。
4.问题总结
v853方案使用上面方法可以使用ssh功能,其他方案因系统(例如shell,busboy)等原因需要根据实际情况进行修改(可以参考上面的做法)。
-
【FAQ】全志V853芯片 Tina获取各个分区编译好后的分区镜像文件[脚本]
[需求描述]
做SDK对接过程作,应用开发有可能需要自己制作升级固件(OTA,烧录)。这就需要从SDK中找出编译好的各个分区镜像文件。本FAQ提供一个脚本,将各个分区已经编译好的镜像分区给拷贝到一个固定地方。
[脚本安装方法]
将附件中内容按照目录替换到sdk的相应目录当中。
目录:scripts/.hooks (如.hooks 目录不存在,在需要创建)scripts/.hooks |_post-pack |_pack_script |_aw_pack.sh
[使用方法]
安装完成后,直接按正常使用那样,执行pack 脚本进行打包,打包成功后回有打印:
/home/v833-sdk/out/v831_pro_ipc/image/…/aw_pack_src
[工具生成的目录介绍]
├── aw_pack.sh #执行该脚本即可再进行打包,并输出在当前目录的out目录 ├── config #打包的配置文件 ├── image #各种分区镜像文件,可以替换,请勿改名 │ ├── boot0_nand.fex #boot0 的nand镜像 │ ├── boot0_sdcard.fex #boot0 的SD卡镜像 │ ├── boot0_spinor.fex #boot0 的spinor镜像 │ ├── boot.fex #内核镜像 │ ├── boot_package.fex # uboot打包镜像 │ ├── boot_package_nor.fe # uboot 在spinor方案上的打包镜像 │ ├── env_nor.fex #env环境变量镜像 │ ├── rootfs.fex #rootfs 镜像 │ ├── sunxi.fex #GTP分区表 │ └── other.fex #其他分区镜像 ├── other #打包所需的其他文件 ├── out #执行aw_pack.sh脚本后输出的目录 ├── tmp #临时目录,用于打包时使用 └── tools #打包时需要的linux 工具
脚本文件:aw_pack_src.tar.gz
-
【FAQ】全志V853芯片 如何解决getevent运行出错,报错为“could not add watch for /dev/input”的问题?
一、问题背景
如果系统已经注册了input设备,想要使用getevent命令去获取input事件时,发现getevent运行会报错,不能正常运行。
报错信息为:could not add watch for /dev/input, Function not implemented
如下图所示:
二、问题分析
通过小机端目录/dev/input/下,发现是有event*的,证明是已经注册有input设备了,有input设备getevent就可以正常运行。
通过getevent源码得知,"could not add watch"的错误是由于运行函数inotify_add_watch(),获取不到所对应的inotify的watch而产生的。
inotify是一个内核用于通知用户空间程序文件系统变化的机制,现在获取不到inotify可以判断为内核空间没有给到用户空间权限或者是接口。
内核空间是有对应的配置使能用户空间的接口的,选上该配置,即可解决问题。
PS:另外,使用cat /dev/input/event* | hexdump -C 也可以获取input事件。
-
【Sipeed D1 Dock Pro】YoC RTOS 实战:HaaS UI UED桌面显示
原文链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300979.0.0.6719180famVQy0&id=4037255443398668288
作者 @ 未来开发者1. 准备工作
建议在操作前先阅读以下技术文章:
Lichee D1 dock 开发板用户指南
Lichee D1 dock 开发板快速上手教程2. 示例介绍
本示例集成了各种基础控件。可以通过屏幕触控进行页面的操作。HaaS UI小程序相关的开发指南可以参考官方指南。
3. 示例演示
3.1 剑池CDK(以下简称CDK)演示
3.1.1 示例获取
双击打开CDK,点击工具栏最右侧的平头哥图标。点击新建工程按钮。
在搜索栏里输入haasui, 在结果里选择haasui_falcon_demo,点击右侧的创建工程,版本选择v7.5.1。
3.1.2 编译
右键点击haasui_falcon_demo工程,选择build,进行编译,直到结束。编译完成后,可以在工程目录下out文件夹里找到yoc_rtos_8M.img文件。
3.1.3 下载
- 通过CDK烧写
先连接好硬件JTAG。然后点击红色框框处的按钮开始烧写。
烧写完毕之后,按复位键即可启动。
- 通过全志工具烧写
在没有JTAG的情况下,只能通过全志的PhoenixSuit工具进行烧写。将编译出来的yoc_rtos_8M.img文件选中,
-
按住FEL按钮,重新上电后,重启后固件开始烧录,直到完成。
-
如果当前镜像支持xfex模式烧写,直接在串口命令行执行“xfex"命令,再执行"reboot"命令进行重启,重启后固件开始烧录,直到完成。
3.2 命令行演示
3.2.1 示例获取docker-ubuntu18:~$ mkdir test docker-ubuntu18:~$ cd test docker-ubuntu18:~$ yoc init docker-ubuntu18:~$ yoc install sdk_app_d1 -b v7.5.1 Start to install components... sdk_app_d1 (v7.5.1), clone https://gitee.com/yocop/sdk_app_d1.git ... …… (省略) …… d1_evb (v7.5.1), clone https://gitee.com/yocop/d1_evb.git ... chip_d1 (v7.5.1), clone https://gitee.com/yocop/chip_d1.git ... Download components finish. docker-ubuntu18:~/test$ ls boards components solutions
3.2.2 编译
docker-ubuntu18:~/test/solutions$ cd haasui_falcon_demo docker-ubuntu18:~/test/solutions/haasui_falcon_demo$ make …… (省略) …… LINK out/haasui_falcon_demo/yoc.elf INSTALL yoc.elf riscv64-unknown-elf-objdump -d out/haasui_falcon_demo/yoc.elf > yoc.asm Generating yoc.bin scons: done building targets. YoC SDK Done [INFO] Create bin files update /home/shuta.lst/work/aone/yoc/dasai3/solutions/haasui_falcon_demo/data/resources [2022-02-23 16:12:39] Start to sign images with key:def_otp [2022-02-23 16:12:39] Sign [prim] with [def_otp] [2022-02-23 16:12:39] rsa verify ok.... [2022-02-23 16:12:39] Sign prim ok. ---------------------------------------------------------------- boot0, 0, 0, 0x00000000, 0x0000c000, 0x0000c000, boot0 gpt, 0, 0, 0x0000c000, 0x00004000, 0x00010000, gpt boot, 0, 0, 0x00010000, 0x00025000, 0x00035000, boot imtb, 0, 0, 0x00035000, 0x00002000, 0x00037000, imtb prim, 1, 0, 0x00037000, 0x00360000, 0x00397000, prim lfs, 0, 0, 0x00397000, 0x00452000, 0x007e9000, lfs misc, 0, 0, 0x007e9000, 0x00013000, 0x007fc000 kv, 0, 0, 0x007fc000, 0x00004000, 0x00800000 boot0, 49152 bytes gpt, 8192 bytes boot, 143896 bytes prim, 1982620 bytes lfs, 4530176 bytes imtb, 8192 bytes ---------------------------------------------------------------- Create yoc_rtos_8M.img in out directory Success!
3.2.3 下载
可以通过3.1.3的下载方式进行烧录,也可以通过命令行进行烧录。
命令行烧录之前要先连接好T-HeadDebugServer。然后在终端输入make flashall命令:
lh@lh:~/.../solutions/haasui_falcon_demo > make flashall [2022-02-17 10:29:22] I am RISC-V Program partition: boot0 address: 0x0, size 49152 byte erasing... program 00x0000c000, 100% Program partition: gpt address: 0xc000, size 8192 byte erasing... program 00x0000e000, 100% Program partition: boot address: 0x10000, size 143896 byte erasing... program 0x00032000, 100% Program partition: imtb address: 0x35000, size 8192 byte erasing... program 00x00037000, 100% Program partition: prim address: 0x37000, size 1966236 byte erasing... program 0x00217000, 100% Program partition: lfs address: 0x397000, size 4530176 byte erasing... program 00x007e9000, 100% lh@lh:~/.../solutions/haasui_falcon_demo >
4. 运行
重新上电或按下RST键,系统启动,串口会有以下打印信息,表示系统运行成功。
(cli-uart)# ###YoC###[Feb 17 2022,10:44:07] cpu clock is 1008000000Hz display init ok. haasui entry here! haasui build time: Feb 17 2022, 10:39:48 [TP] GT9xx init [TP] start to probe![2, 0x5d] 0X39 0X31 0X31 0X0 0X0 [TP] Found chip gt911 [TP] GT9xx Config version: 0x5C [TP] GT9xx Sensor id: 0x03
通过外接的屏幕,可以看到界面已经显示出来了。通过触摸屏操作可以切换界面。
5. 总结
本文介绍了DOCK开发板的HaaS UI Falcon示例,主要涵盖了基础控件的使用以及操作。用户可以参考控件的使用方式集成到自己的方案中。
-
【Sipeed D1 Dock Pro】YoC RTOS 实战:HaaS UI Falcon桌面显示
原文链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300979.0.0.6719180fNJwLnr&id=4037250968491532288
作者 @ 我爱下载1. 准备工作
建议在操作前先阅读以下技术文章:
Lichee D1 dock 开发板用户指南
Lichee D1 dock 开发板快速上手教程2. 示例介绍
本示例集成了各种基础控件。可以通过屏幕触控进行页面的操作。HaaS UI小程序相关的开发指南可以参考官方指南。
3. 示例演示
3.1 剑池CDK(以下简称CDK)演示
3.1.1 示例获取
双击打开CDK,点击工具栏最右侧的平头哥图标。点击新建工程按钮。
在搜索栏里输入haasui, 在结果里选择haasui_falcon_demo,点击右侧的创建工程,版本选择v7.5.1。
3.1.2 编译
右键点击haasui_falcon_demo工程,选择build,进行编译,直到结束。编译完成后,可以在工程目录下out文件夹里找到yoc_rtos_8M.img文件。
3.1.3 下载
- 通过CDK烧写
先连接好硬件JTAG。然后点击红色框框处的按钮开始烧写。
烧写完毕之后,按复位键即可启动。
- 通过全志工具烧写
在没有JTAG的情况下,只能通过全志的PhoenixSuit工具进行烧写。将编译出来的yoc_rtos_8M.img文件选中,
-
按住FEL按钮,重新上电后,重启后固件开始烧录,直到完成。
-
如果当前镜像支持xfex模式烧写,直接在串口命令行执行“xfex"命令,再执行"reboot"命令进行重启,重启后固件开始烧录,直到完成。
3.2 命令行演示
3.2.1 示例获取docker-ubuntu18:~$ mkdir test docker-ubuntu18:~$ cd test docker-ubuntu18:~$ yoc init docker-ubuntu18:~$ yoc install sdk_app_d1 -b v7.5.1 Start to install components... sdk_app_d1 (v7.5.1), clone https://gitee.com/yocop/sdk_app_d1.git ... …… (省略) …… d1_evb (v7.5.1), clone https://gitee.com/yocop/d1_evb.git ... chip_d1 (v7.5.1), clone https://gitee.com/yocop/chip_d1.git ... Download components finish. docker-ubuntu18:~/test$ ls boards components solutions
3.2.2 编译
docker-ubuntu18:~/test/solutions$ cd haasui_falcon_demo docker-ubuntu18:~/test/solutions/haasui_falcon_demo$ make …… (省略) …… LINK out/haasui_falcon_demo/yoc.elf INSTALL yoc.elf riscv64-unknown-elf-objdump -d out/haasui_falcon_demo/yoc.elf > yoc.asm Generating yoc.bin scons: done building targets. YoC SDK Done [INFO] Create bin files update /home/shuta.lst/work/aone/yoc/dasai3/solutions/haasui_falcon_demo/data/resources [2022-02-23 16:12:39] Start to sign images with key:def_otp [2022-02-23 16:12:39] Sign [prim] with [def_otp] [2022-02-23 16:12:39] rsa verify ok.... [2022-02-23 16:12:39] Sign prim ok. ---------------------------------------------------------------- boot0, 0, 0, 0x00000000, 0x0000c000, 0x0000c000, boot0 gpt, 0, 0, 0x0000c000, 0x00004000, 0x00010000, gpt boot, 0, 0, 0x00010000, 0x00025000, 0x00035000, boot imtb, 0, 0, 0x00035000, 0x00002000, 0x00037000, imtb prim, 1, 0, 0x00037000, 0x00360000, 0x00397000, prim lfs, 0, 0, 0x00397000, 0x00452000, 0x007e9000, lfs misc, 0, 0, 0x007e9000, 0x00013000, 0x007fc000 kv, 0, 0, 0x007fc000, 0x00004000, 0x00800000 boot0, 49152 bytes gpt, 8192 bytes boot, 143896 bytes prim, 1982620 bytes lfs, 4530176 bytes imtb, 8192 bytes ---------------------------------------------------------------- Create yoc_rtos_8M.img in out directory Success!
3.2.3 下载
可以通过3.1.3的下载方式进行烧录,也可以通过命令行进行烧录。
命令行烧录之前要先连接好T-HeadDebugServer。然后在终端输入make flashall命令:
lh@lh:~/.../solutions/haasui_falcon_demo > make flashall [2022-02-17 10:29:22] I am RISC-V Program partition: boot0 address: 0x0, size 49152 byte erasing... program 00x0000c000, 100% Program partition: gpt address: 0xc000, size 8192 byte erasing... program 00x0000e000, 100% Program partition: boot address: 0x10000, size 143896 byte erasing... program 0x00032000, 100% Program partition: imtb address: 0x35000, size 8192 byte erasing... program 00x00037000, 100% Program partition: prim address: 0x37000, size 1966236 byte erasing... program 0x00217000, 100% Program partition: lfs address: 0x397000, size 4530176 byte erasing... program 00x007e9000, 100% lh@lh:~/.../solutions/haasui_falcon_demo >
4. 运行
重新上电或按下RST键,系统启动,串口会有以下打印信息,表示系统运行成功。
(cli-uart)# ###YoC###[Feb 17 2022,10:44:07] cpu clock is 1008000000Hz display init ok. haasui entry here! haasui build time: Feb 17 2022, 10:39:48 [TP] GT9xx init [TP] start to probe![2, 0x5d] 0X39 0X31 0X31 0X0 0X0 [TP] Found chip gt911 [TP] GT9xx Config version: 0x5C [TP] GT9xx Sensor id: 0x03
通过外接的屏幕,可以看到界面已经显示出来了。通过触摸屏操作可以切换界面。
5. 总结
本文介绍了DOCK开发板的HaaS UI Falcon示例,主要涵盖了基础控件的使用以及操作。用户可以参考控件的使用方式集成到自己的方案中。
-
【Sipeed D1 Dock Pro】YoC RTOS 实战:HaaS helloJS桌面显示
1. 准备工作
建议在操作前先阅读以下技术文章:
Lichee D1 dock 开发板用户指南
Lichee D1 dock 开发板快速上手教程2. 示例介绍
本示例是最简小程序例程。小程序相关代码在GITEE,下载的时候选择hellojs分支。小程序相关的开发指南可以参考官方指南。data/resources目录下预置了小程序编译打包好的相关资源文件。3. 示例演示
3.1 剑池CDK(以下简称CDK)演示
3.1.1 示例获取
双击打开CDK,点击工具栏最右侧的平头哥图标。点击新建工程按钮。在搜索栏里输入hellojs, 在结果里选择hellojs,点击右侧的创建工程,版本选择v7.5.1。
3.1.2 编译
右键点击hellojs工程,选择build,进行编译,直到结束。编译完成后,可以在工程目录下out文件夹里找到yoc_rtos_8M.img文件。
3.1.3 下载
- 列表通过CDK烧写
先连接好硬件JTAG。然后点击红色框框处的按钮开始烧写。
烧写完毕之后,按复位键即可启动。
- 列表通过全志工具烧写
在没有JTAG的情况下,只能通过全志的PhoenixSuit工具进行烧写。将编译出来的yoc_rtos_8M.img文件选中,
按住FEL按钮,重新上电后,重启后固件开始烧录,直到完成。
如果当前镜像支持xfex模式烧写,直接在串口命令行执行“xfex"命令,再执行"reboot"命令进行重启,重启后固件开始烧录,直到完成。
3.2 命令行演示
3.2.1 示例获取docker-ubuntu18:~$ mkdir test docker-ubuntu18:~$ cd test docker-ubuntu18:~$ yoc init docker-ubuntu18:~$ yoc install sdk_app_d1 -b v7.5.1 Start to install components... sdk_app_d1 (v7.5.1), clone https://gitee.com/yocop/sdk_app_d1.git ... …… (省略) …… d1_evb (v7.5.1), clone https://gitee.com/yocop/d1_evb.git ... chip_d1 (v7.5.1), clone https://gitee.com/yocop/chip_d1.git ... Download components finish. docker-ubuntu18:~/test$ ls boards components solutions
3.2.2 编译
docker-ubuntu18:~/test/solutions$ cd hellojs docker-ubuntu18:~/test/solutions/hellojs$ make …… (省略) …… LINK out/hellojs/yoc.elf Generating yoc.bin INSTALL yoc.elf riscv64-unknown-elf-objdump -d out/hellojs/yoc.elf > yoc.asm scons: done building targets. YoC SDK Done [INFO] Create bin files update /home/shuta.lst/work/aone/yoc/dasai3/solutions/hellojs/data/resources [2022-02-23 16:12:52] Start to sign images with key:def_otp [2022-02-23 16:12:52] Sign [prim] with [def_otp] [2022-02-23 16:12:52] rsa verify ok.... [2022-02-23 16:12:52] Sign prim ok. ---------------------------------------------------------------- boot0, 0, 0, 0x00000000, 0x0000c000, 0x0000c000, boot0 gpt, 0, 0, 0x0000c000, 0x00004000, 0x00010000, gpt boot, 0, 0, 0x00010000, 0x00025000, 0x00035000, boot imtb, 0, 0, 0x00035000, 0x00002000, 0x00037000, imtb prim, 1, 0, 0x00037000, 0x00360000, 0x00397000, prim lfs, 0, 0, 0x00397000, 0x00452000, 0x007e9000, lfs misc, 0, 0, 0x007e9000, 0x00013000, 0x007fc000 kv, 0, 0, 0x007fc000, 0x00004000, 0x00800000 boot0, 49152 bytes gpt, 8192 bytes boot, 143896 bytes prim, 1982620 bytes lfs, 4530176 bytes imtb, 8192 bytes ---------------------------------------------------------------- Create yoc_rtos_8M.img in out directory Success!
3.2.3 下载
可以通过3.1.3的下载方式进行烧录,也可以通过命令行进行烧录。
命令行烧录之前要先连接好T-HeadDebugServer。然后在终端输入make flashall命令:
lh@lh:~/.../solutions/hellojs > make flashall [2022-02-17 10:29:22] I am RISC-V Program partition: boot0 address: 0x0, size 49152 byte erasing... program 00x0000c000, 100% Program partition: gpt address: 0xc000, size 8192 byte erasing... program 00x0000e000, 100% Program partition: boot address: 0x10000, size 143896 byte erasing... program 0x00032000, 100% Program partition: imtb address: 0x35000, size 8192 byte erasing... program 00x00037000, 100% Program partition: prim address: 0x37000, size 1966236 byte erasing... program 0x00217000, 100% Program partition: lfs address: 0x397000, size 4530176 byte erasing... program 00x007e9000, 100% lh@lh:~/.../solutions/hellojs >
4. 运行
重新上电或按下RST键,系统启动,串口会有以下打印信息,表示系统运行成功。
(cli-uart)# ###YoC###[Feb 15 2022,02:20:13] cpu clock is 1008000000Hz display init ok. spi0 clock is 50000000Hz haasui entry here! haasui build time: Feb 15 2022, 02:19:39 [TP] GT9xx init [TP] start to probe![2, 0x5d] 0X39 0X31 0X31 0X0 0X0 [TP] Found chip gt911 [TP] GT9xx Config version: 0x5C [TP] GT9xx Sensor id: 0x03 @@@show homepage@@@
通过外接的屏幕,可以看到helloJS界面已经显示出来了。
通过触摸点击可以进入到下一个界面。
5. 总结
本文介绍了DOCK开发板的最简单HaaS图形界面显示,用户可以了解如何将JS小程序集成到开发板运行。
原文链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300979.0.0.6719180fknZxLu&id=4037247532366106624
作者@我爱下载