@xiaxia 可以通过patch让D1-H的SDK支持T113,方法教程已附在D1-H/D1s SDK下载教程内
Posts made by q1215200171
-
Reply: 全志在线开源芯片 新 SDK 平台下载方法汇总
-
Reply: H616的SDK可以在本论坛下载到吗
@shenhao618 市面上有很多Pi都是基于H616开发的哦,我们欢迎大家到全志在线讨论相关的内容,SDK的话可以联系你购买商家的客服或者代理获取
-
Reply: 全志在线开源芯片 新 SDK 平台下载方法汇总
@shenhao618 市面上有很多Pi都是基于H616开发的哦,我们欢迎大家到全志在线讨论相关的内容,SDK的话可以联系你购买商家的客服或者代理获取
-
3月全志芯片开源项目分享合集
GPT语音对话猫猫
作者:KJ
开源项目地址:https://oshwhub.com/kjpig/esp32-chat-meowGPT语音对话猫猫有两个不同的硬件版本,其中一个使用Linux系统来进行功能实现的硬件版本,是采用了基于全志H3芯片的香橙派Zero开发板。
这个版本由一个基本的Linux派和语音扩展模板组成,非常简单。语音扩展模块提供了一个基本的麦克风输入和一个功放,同时提供锂电池充放电系统,达到便携的目的,通过修改语音扩展板的PCB理论可以支持绝大多数的派,选择香橙派主要是因为其尺寸迷你,价格性能也不错。
连接上语音扩展模块化后,将音箱连接ChatGPT,与之对话,就可以充当一个能聊天的语音助手。再借助ChatGPT的函数调用功能,可以做出类似小爱同学智能音箱那样控制实体设备的功能。
AXP2101全功能专业电源管理模块
作者:mondraker
开源项目链接:https://oshwhub.com/mondraker/axp2101_2023-11-18_20-15-19AXP2101作为PMIC被广泛使用在LilyGO、M5Stack等创客圈口碑较好的企业产品中,并且有由大佬维护的GitHub库,包含Linux驱动,arduino库,espidf例程,Micropython例程,plantformIO例程等等......作者本人也是选用AXP2101来对过往基于AXP202/AXP173芯片所开发的项目进行换代升级。
硬件部分的升级主要体现在:为方便PCB电路板的设计与焊接,增加成功率,本设计采用模块化思想,将AXP202外围电路封装为一个邮票孔模块焊接在主板上,将可用户自定义的管脚全部引出,极大简化了芯片外围(只有电感与电容),增加了多路电源,布线简单,芯片封装缩小,融合ACIN与VBUS为一个输入。
软件与寄存器部分的升级主要体现在:内置的电量计量算法通过内置的库仑计与电压计等等准确计算出电池电量,存在REG A4中(直接读寄存器就能读出来,不需要任何转化),更高的可选的充电电流(充电模式可定制线性充电与开关充电),各方面的功能都有了更精细的配置等。
Bomb Pi Zero
作者:Bomb Studio
开源项目地址:https://oshwhub.com/bomb-studio/bomb-pi-zero本项目这是基于 Yuzuki Chameleon 修改的更小的H616开发板,在原工程基础上完全重置pcb,重新layout,以缩小整块pcb,外形类似树莓派Zero板型,并适配嘉立创的盘中孔工艺。
为了缩小体积,作者把emmc放在开发板背面,并在背面用丝印标注了GPIO管脚定义。为了方便焊接,螺丝孔周围没有铜,再也不用担心螺丝孔上锡了,并且修改Type-C口的CC脚电阻,原电路可能会在使用CC线或者有emark的线缆时出现问题。
其他电路没有修改,功能完全相同。开发板板载4个USB Type C 接口,分别为3个HOST和一个OTG,支持USB摄像头与采集卡输入。H616支持HDMI显示,板载一个 HDMI接口;同时板载XR829 蓝牙/WIFI模组和引出RJ45百兆接口;板载eMMC与TF卡槽;40 Pin GPIO,可以扩展 SPI LCD 显示屏,千兆以太网,麦克风阵列,CAN收发器,温湿度传感器,加速度传感器等等。
-
Reply: 【视频】八分钟,教你下载 D1-H Tina SDK(现已失效)
该贴视频演示下载方法现已不适用于全志在线SDK开放的芯片,最新的SDK下载方式请浏览以下帖子
全志在线开源芯片 新 SDK 平台下载方法汇总:https://bbs.aw-ol.com/topic/4023/
内附各芯片SDK下载方式,以及达成下载前置要求的方法
-
2月全志芯片开源项目分享合集
1、项目名称:全志T113-S3智能家居86屏
作者:FanHuaCloud
作者的上一个作品的V3s的随身终端,由于硬件解码一直无法完成适配,于是作者找了另一块性能更强,接口更丰富的T113-S3来替代,并将其应用在智能家居场景中的86型智能触控屏解决方案上,最终完成了这款全能智能家居86屏。
项目选用4寸RGB接口86屏幕,分辨率480*480。板载WIFI模块、SPI Nand,支持从SPI Nand启动系统。双USB接口以及通过PH2.0扩展了2个串口,几乎用上了T113的全部引脚。
它不仅仅是一个普通的智能家居86盒,必要时它也可以化身智能手表,或者是一个能随身携带的MP4,甚至可以是一个能玩植物大战僵尸的触屏游戏掌机!
最最重要的是,本项目支持全志提供的Tina Linux SDK,文档齐全,在经过一段时间的调整后,项目已经完全可以量产。
开源项目地址:https://oshwhub.com/fanhuacloud/t113-s3-86panel
#2、项目名称:赛博魔杖
作者:realTix
这是一个万全的解决方案!只需要花80元再动动手,就可以将哈利波特的魔杖与人工智能结合到一起!它就是用全志V851s做的赛博魔杖!
魔杖本身的电路设计部分,其实并不复杂,其基础硬件主要包含:全志 V851s,BMI088,HLK-B40,并主要使用使用蓝牙串口透传模块通信。
它可以通过手势识别,控制一切你想控制的电子设备(灯、空调),也可开原神。当前识别字符为字母 A~Z,也有数字 0~9等更多的模型,该手势识别是使用Keras训练手势识别模型,转为TFlite模型,再通过谷歌提供的 TFlite C API 运行模型。
3、项目名称:ConcoPi-基于F1C100S的小终端
作者:CoNi2960
使用全志F1C100S/F1C200S设计的小板子,板载无线联网模块,CP2102串口通信,USB接口,0.42寸OLED小屏幕,spi接口,板子很迷你,看上去比较精致。
外设丰富,带音频输入输出并有两个屏幕接口,正面有一块迷你小屏幕,背面可以自行配置不同规格屏幕(需要修改内核里的驱动)。
焊接背面按键后,可以有MP3/无线遥控器/游戏机功能,但阻容封装基本上是0402,密度较大,且TF卡槽比较矮,注意插拔时候不要用力弯折卡,否则容易损坏,比较考验动手能力。
可以运行荔枝派官方固件,也可以自行根据需要编译制作镜像文件。
开源项目地址:https://oshwhub.com/zoulidezhanghao/concopi-small-f1c100s-based-terminal
4、项目名称:全志V3S M.2模块开发板
作者:黑色向日葵
作者为方便快速扩展和适配自己的创作需求,做了一款m2接口的V3S核心板,以方便后期制作底板时无需考虑核心布线,只要注重需求变更开发功能适配的底板即可。
板子虽小,但功能资源还是十分丰富的。开发板板载无线模块、TF卡、Flash、串口芯片、USB并引出了除WiFi引脚之外的所有引脚,方便使用spi、进行单板调试、使用usb扩展芯片扩展usb接口等需求场景。
打板验证,使用荔枝派V3s系统完美运行。
开源项目地址:https://oshwhub.com/lihongxin123/quan-zhi-v3s
-
Reply: 请问哪里找到R128芯片的架构图
@hert6666 全志R128芯片 RTOS 异构多核通信:https://r128.docs.aw-ol.com/sdk_base/amp/
-
用39块钱的V851se视觉开发板做了个小相机,还可以物品识别、自动追焦!
用39块钱的V851se视觉开发板做了个小相机。
可以进行物品识别、自动追焦!
这个超低成本的小相机是在V851se上移植使用全志在线开源版本的Tina Linux与OpenCV框架开启摄像头拍照捕获视频,并结合NPU实现Mobilenet v2目标分类识别以及运动追踪等功能......并最终实现功能完整的智能小相机。
ISP适配
可以适配V851se的Tina5.0升级到了21.05版本的OpenWrt,相较于商业量产版本的Tina Linux 支持更多新的软件包,不过可惜的是MPP包没有移植到Tina5.0,所以想使用摄像头就需要另辟蹊径。
虽然Tina5.0并没有移植MPP包,但也内置了一个libAWispApi包,支持在用户层对接 ISP,但是很可惜这个包也没有适配V85x系列,这里就需要自行适配。
其实适配很简单,SDK 已经提供了lib只是没提供编译支持,我们需要前往以下文件夹中新建一个v851se文件夹:
openwrt/package/allwinner/vision/libAWIspApi/machinfo
然后再新建文件build.mk写入如下配置:
ISP_DIR:=isp600
然后在menuconfig中勾选上这个包,并进行如下配置:
Allwinner ---> Vision ---> <*> camerademo........................................ camerademo test sensor ---> [*] Enabel vin isp support
编译系统然后烧录系统,运行命令 camerademo ,可以看到是正常拍摄照片的
OpenCV适配
OpenCV在打包好的固件中已经默认适配好了,如果不想了解如何适配OpenCV可以直接前往点击链接获取资料并跳过这部分
OpenCV默认不支持开启RAW Sensor,不过现在需要配置为OpenCV开启RAW Sensor抓图,然后通过OpenCV送图到之前适配的libAWispApi库进行 ISP 处理。
在这里增加一个函数作为 RAW Sensor 抓图的处理。
#ifdef __USE_VIN_ISP__ bool CvCaptureCAM_V4L::RAWSensor() { struct v4l2_control ctrl; struct v4l2_queryctrl qc_ctrl; memset(&ctrl, 0, sizeof(struct v4l2_control)); memset(&qc_ctrl, 0, sizeof(struct v4l2_queryctrl)); ctrl.id = V4L2_CID_SENSOR_TYPE; qc_ctrl.id = V4L2_CID_SENSOR_TYPE; if (-1 == ioctl (deviceHandle, VIDIOC_QUERYCTRL, &qc_ctrl)){ fprintf(stderr, "V4L2: %s QUERY V4L2_CID_SENSOR_TYPE failed\n", deviceName.c_str()); return false; } if (-1 == ioctl(deviceHandle, VIDIOC_G_CTRL, &ctrl)) { fprintf(stderr, "V4L2: %s G_CTRL V4L2_CID_SENSOR_TYPE failed\n", deviceName.c_str()); return false; } return ctrl.value == V4L2_SENSOR_TYPE_RAW; } #endif
这段代码的功能是检查V4L2摄像头设备的传感器类型是否为RAW格式。它使用了V4L2的ioctl函数来查询和获取传感器类型信息。
然后在OpenCV的捕获流函数:
bool CvCaptureCAM_V4L::streaming(bool startStream)
添加 ISP 处理
#ifdef __USE_VIN_ISP__ RawSensor = RAWSensor(); if (startStream && RawSensor) { int VideoIndex = -1; sscanf(deviceName.c_str(), "/dev/video%d", &VideoIndex); IspPort = CreateAWIspApi(); IspId = -1; IspId = IspPort->ispGetIspId(VideoIndex); if (IspId >= 0) IspPort->ispStart(IspId); } else if (RawSensor && IspId >= 0 && IspPort) { IspPort->ispStop(IspId); DestroyAWIspApi(IspPort); IspPort = NULL; IspId = -1; } #endif
这段代码主要用于控制图像信号处理(ISP)的启动和停止。根据条件的不同,可以选择在开始视频流捕获时启动ISP流处理,或者在停止视频流捕获时停止ISP流处理,以便对视频数据进行处理和增强。
至于其他包括编译脚本的修改,全局变量定义等操作,可以参考原文链接中的补丁文件。
在执行完以上步骤后,可以快速测试摄像头输出demo:
OpenCV ---> <*> opencv....................................................... opencv libs [*] Enabel sunxi vin isp support <*> opencv_camera.............................opencv_camera and display image
MobileNet V2
MobileNet V2是一种轻量级的卷积神经网络,它专为移动设备和嵌入式设备上的实时图像分类和目标检测任务设计。
MobileNet V2的关键特点包括使用深度可分离卷积来减少计算量和参数数量,引入带线性瓶颈的倒残差结构以增加非线性表示能力,以及提供宽度乘数参数以适应不同计算资源限制。这些特点使得MobileNet V2成为资源受限的移动设备上的理想选择。
首先对输入图像进行预处理,以适应MobileNet V2 SSD模型的输入要求。通过通道格式转换、图像大小调整和数据填充等操作,将输入图像转换为适合模型输入的格式。
void get_input_data(const cv::Mat& sample, uint8_t* input_data, int input_h, int input_w, const float* mean, const float* scale){ cv::Mat img; if (sample.channels() == 1) cv::cvtColor(sample, img, cv::COLOR_GRAY2RGB); else cv::cvtColor(sample, img, cv::COLOR_BGR2RGB); cv::resize(img, img, cv::Size(input_h, input_w)); uint8_t* img_data = img.data; /* nhwc to nchw */ for (int h = 0; h < input_h; h++) { for (int w = 0; w < input_w; w++) { for (int c = 0; c < 3; c++) { int in_index = h * input_w * 3 + w * 3 + c; int out_index = c * input_h * input_w + h * input_w + w; input_data[out_index] = (uint8_t)(img_data[in_index]); //uint8
关键步骤是要实现非极大值抑制算法(NMS),用于去除高度重叠的框,只保留得分最高的那个框。算法通过计算框之间的交集面积和设置的阈值来进行筛选,并将保留的框的索引存储在picked向量中。
// 非极大值抑制算法(NMS) static void nms_sorted_bboxes(const std::vector<Bbox_t>& bboxs, std::vector<int>& picked, float nms_threshold) { picked.clear(); const int n = bboxs.size(); // 创建存储每个框面积的向量 std::vector<float> areas(n); // 计算每个框的面积并存储 for (int i = 0; i < n; i++){ areas[i] = (bboxs[i].xmax - bboxs[i].xmin) * (bboxs[i].ymax - bboxs[i].ymin);
通过一系列操作,包括转换为向量、计算缩放比例、创建存储检测结果的向量等,将输出数据转换为检测结果,并按照置信度从高到低排序。然后应用非极大值抑制算法对检测结果进行筛选,最后将筛选后的目标框位置、大小和类别置信度等信息绘制在图像上。
// 按照分数对框进行排序 std::sort(BBox.begin(), BBox.end(), comp); // 应用非极大值抑制算法,获取保留的框的索引 std::vector<int> keep_index; nms_sorted_bboxes(BBox, keep_index, iou_threshold); // 创建存储框位置的向量 std::vector<cv::Rect> bbox_per_frame; // 遍历保留的框,绘制框和标签 for(int i = 0; i < keep_index.size(); i++) { int left = BBox[keep_index[i]].xmin; int top = BBox[keep_index[i]].ymin; int right = BBox[keep_index[i]].xmax; int bottom = BBox[keep_index[i]].ymax; cv::rectangle(bgr, cv::Point(left, top), cv::Point(right, bottom), cv::Scalar(0, 0, 255), 1); char text[256]; sprintf(text, "%s %.1f%%", class_names[BBox[keep_index[i]].cls_idx], BBox[keep_index[i]].score * 100); cv::putText(bgr, text, cv::Point(left, top), cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(0, 255, 255), 1, 8, 0); bbox_per_frame.emplace_back(left, top, width, height); }
NPU开发流程
V851se芯片内置一颗NPU,其处理性能为最大0.5TOPS并有128KB内部高速缓存用于高速数据交换,NPU 开发完整的流程如下图所示:
模型训练
在模型训练阶段,用户根据需求和实际情况选择合适的框架(如Caffe、TensorFlow 等)使用数据集进行训练得到符合需求的模型,此模型可称为预训练模型。也可直接使用已经训练好的模型。V851s 的 NPU 支持包括分类、检测、跟踪、人脸、姿态估计、分割、深度、语音、像素处理等各个场景90 多个公开模型。
signal函数
在模型转化阶段,通过Acuity Toolkit把预训练模型和少量训练数据转换为NPU可用的模型NBG文件。一般步骤如下:
1、模型导入,生成网络结构文件、网络权重文件、输入描述文件和输出描述文件。
2、模型量化,生成量化描述文件和熵值文件,可改用不同的量化方式。
3、仿真推理,可逐一对比float和其他量化精度的仿真结果的相似度,评估量化后的精度是否满足要求。
4、模型导出,生成端侧代码和*.nb 文件,可编辑输出描述文件的配置,配置是否添加后处理节点等。开源资料获取
本文所有内容均转载自原作者本人的个人论坛,文章内所提到的源代码、固件等开发资料均开源在作者的个人网站和Github上,
-
花费200元,我用雪糕棒手搓了一台可UI交互的视觉循迹小车
常见的视觉循迹小车都具备有路径识别、轨迹跟踪、转向避障、自主决策等基本功能,如果不采用红外避障的方案,那么想要完全满足以上这些功能,摄像头、电机、传感器这类关键部件缺一不可,由此一来小车成本也就难以控制了。
但如果,有这样一款视觉循迹小车,它可以完全自己手搓,并用成本极低的雪糕棒来搭建车体架构,不仅保留了传统循迹小车具备的所有功能,还额外适配上一块小屏幕并配上UI界面用于升级人机交互方式。
更重要的是,它的器件成本被压缩到200元左右,这样的视觉循迹小车能让你心动吗~
核桃派视觉循迹小车简介
核桃派H616视觉循迹小车的循迹功能和人机交互界面整体代码由Python+Qt实现,它通过摄像头获取周围环境的图像信息,并利用图像处理算法识别出特定的标记或路径,然后根据标记或路径的形状和方向信息,自动控制小车的行驶方向和速度,以实现沿着预定轨迹自动行驶的目的。
手搓一台视觉循迹小车所需要用到的基础硬件材料如下:
1、核桃派H616开发板+LCD屏幕≈178元;
2、四个电机+车轮≈16元;
3、电机驱动模块≈4元;
4、摄像头≈50元;
5、移动电源≈20元;
6、雪糕棒若干≈4元(也可以≈不要钱);循迹功能实现
要让小车实现循迹自运动的操作,其实也可以说是一个在教小车如何精准识别线路并做出判断的过程,想要小车的摄像头实现对路线的准确判断,就需要用到一个目前循迹小车最广泛采用的技术手段——二值化。
二值化是图像分割的一种方法,用于将图像中的像素点矩阵的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
在二值化过程中,将大于某个临界灰度值的像素灰度设为灰度极大值(通常是255),将小于这个值的像素灰度设为灰度极小值(通常是0),从而实现二值化。
# 根据不同模式,用不同的hsv上下限值 upper_hsv = (180,255,100) lower_hsv = (0,0,0) grayImage = cv2.inRange(hsvImage, np.array(lower_hsv), np.array( upper_hsv)) # 颜色二值化
二值化图像后,整个画面会被区分为黑白分明的两种颜色,之后就需要进行路线轮廓的描绘以及质心的标注,这个操作的目的是让小车知道该往左拐还是往右拐,进而控制两边车轮的速度。
- 获取最大轮廓
# 获取所有轮廓,画出所有轮廓 contours, hierarchy = cv2.findContours(grayImage, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) areas = [cv2.contourArea(c) for c in contours]] cv2.drawContours(rgbImage,contours, -1,(0,255,0),3)
- 计算质心
# 计算面积最大轮廓的质心 areas = [cv2.contourArea(c) for c in contours] try: M = cv2.moments(contours[areas.index(max(areas))]) except: pass M10=M.get("m10") M01=M.get("m01") M00=M.get("m00") if M00 <= 0 : continue cX = int(M10 / M00) cY = int(M01 / M00) # 绘制质心 cv2.circle(rgbImage, (cX, cY), 15, (255, 0, 255), -1)
在绘制轮廓与质心后就需要进行质心坐标的判断,这里的原理很简单,就是质心偏左就往左转,质心偏右就往右转,在判断的同时通过电机来控制两边车轮的速度进而控制小车的行驶方向。
根据质心的位置计算车轮速度的控制参数postion,根据具体的计算公式可以得知,postion的取值范围为-50到+50,其中0代表质心在正中间,+越大质心越往左,-越大质心越往右,则进行下面的速度计算和控制,否则将速度设置为0,再根据postion和delta_sum的值以及其他参数的调整,计算并控制左右车轮的速度。
# 车轮速度控制 if self.flag_start.status() == True : # -50 ~ +50 :0为正中间,+越大则越往左,-越大则越往右, postion = int(int(center_x - cX) / int(center_x / 50)) # postion += self.delta_sum step = self.postion_last - postion self.delta_sum += (postion - step)*0.01 if self.delta_sum > 100: self.delta_sum = 100 elif self.delta_sum < -100: self.delta_sum = -100 if abs(postion) < 5 : self.delta_sum = 0 # print("self.delta_sum", self.delta_sum) self.postion_last = postion speed_l = 50 - postion - int(self.delta_sum) speed_r = 50 + postion + int(self.delta_sum) motor.L.speed(speed_l) motor.R.speed(speed_r) self._slider_l.setValue(speed_l) self._slider_r.setValue(speed_r)
人机交互界面
核桃派H616开发板上预装了PyQt,所以可以使用Qt自带的设计器软件来画窗口,在设计好后通过命令一键转化为Python代码,再去核桃派的开发文档复制一段显示案例的代码,就可以轻松在电脑上预览到刚刚的窗口画面。
为了在远程服务器上运行图形界面应用程序,通过设置os.environ["DISPLAY"] = ":0.0"允许Thonny远程运行。
# 允许Thonny远程运行 import os os.environ["DISPLAY"] = ":0.0"
定义了一个名为event_press的函数,用于处理QPushButton按钮的released事件。当按钮被释放时,切换work.flag_start的状态,并根据状态改变按钮的文本。
def event_press(): if work.flag_start.status(): work.flag_start.disable() ui.pushButton.setText("点击开始") else : work.flag_start.enable() ui.pushButton.setText("点击结束")
为了处理三个不同按钮的released事件,定义了change_to_mode三个函数,这些函数用于将work.flag_mode的模式设置为不同的值。
def change_to_mode0(): work.flag_mode.set_mod( 0 ) def change_to_mode1(): work.flag_mode.set_mod( 1 ) def change_to_mode2(): work.flag_mode.set_mod( 2 ) ui.pushButton.released.connect(event_press) ui.pushButton_auto.released.connect(change_to_mode0) ui.pushButton_black.released.connect(change_to_mode1) ui.pushButton_white.released.connect(change_to_mode2)
以上这些代码片段是构成一个由PyQt所创建GUI的关键部分。它通过创建一个窗口,并在窗口中显示了一些UI元素,同时定义了一些事件处理函数,这个应用程序根据用户的操作来控制某些功能,并使用定时器来让解释器每隔一段时间运行一次,以保持界面响应性能,最后进入主循环等待事件的触发和处理。
开源资料获取
本文所有内容均转载自原作者本人的B站视频账号及核桃派论坛开源文章,文章内所提到的小车部件和源代码均公开在帖子和视频中,感兴趣的小伙伴可以复制下方链接或者戳文末的“阅读原文”获取。
-
我用V851s做了一个魔法棒,成本80元,可以通过手势识别控制一切电子设备
本项目作者: realTiX
项目名称: 赛博魔杖
芯片平台: 全志V851s, BMI088,HLK-B40这是一个可以直接启动原神的魔法棒~
原神,启动!
这是一个万全的解决方案!只需要花80元再动动手,就可以将哈利波特的魔杖与人工智能结合到一起!它就是用全志V851s做的赛博魔杖!
这个魔法手杖有啥亮点
手势识别“控万物”
它可以通过手势识别,控制一切你想控制的电子设备(灯、空调),也可开原神。
主要是通过识别手势画出来的字符控制,当前识别字符为字母 A~Z,也有数字 0~9等更多的模型。
控制的过程中,你也可以高喊一句阿瓦达!
关于手势控制精度,您可以参照开源代码仓库训练精度更高(当前准确率为 92%),可识别字符(当前为字母 A~Z,数字 0~9)更多的模型。
成本低,易复刻,有技术含量
总成本包含外壳只需要80元,如果你想要一个更好看的外壳,也可以自己替。
蓝牙通信
本魔杖使用蓝牙串口透传模块通信,可以用这个功能开启原神。
你可以参照代码仓库中的通信协议自行扩充本魔杖功能以及依此协议开发其他蓝牙终端,以达到遥控更多带有蓝牙的终端设备的目的。
硬件部分
这是魔杖本身的电路设计部分,其实并不复杂:
其基础硬件主要包含:全志 V851s,BMI088,HLK-B40。
魔杖如何轻松开关灯?多亏了这个开灯器打配合!看看它的电路吧:
整体配合效果就是这样的:
硬件设计参考:Yuzukilizard 柚木PI 迷你 AIoT 开发板
软件部分
通过本章节,你会了解到——AI手势识别功能是如何做到的。
1、软件构成
使用Keras训练手势识别模型,转为 TFlite 模型。
再通过谷歌提供的 TFlite C API 运行模型。
2、代码仓库
代码仓库顺序如下:
- bmi088 获取挥棒手势数据
- Keras 挥棒手势识别模型训练
- V851s 赛博魔杖
- 蓝牙控制的简易舵机开关灯装置_HLK-B40
- 原神 蓝牙安卓启动器
1、在工程附件中可下载固件文件(文末有入口)。
2、将 TF 卡 通过读卡器连接电脑。
3、使用 全志提供的 PhoenixCard 软件。
4、按下图步骤下载固件到 TF 卡中。
5、固件下载完成后,插入 TF 卡槽中。
6、魔杖初次开机需要半分钟(正常开机会闪三下灯)。非初次则需要 8 秒时间开机,如果开机很久都没闪灯,请重启或检查硬件(可插入数据线连接电脑,重启魔杖并使用 MobaXterm 查看串口打印信息以确定原因)。
7、开机后进入陀螺仪初始化,期间会亮灯。也就是说,加上开机亮灯,会亮 4 次。
8、注意,本魔杖 Type-C 口正反插分别为 USB-OTG 和 串口,请插上去后查看电脑驱动,以确定哪一方向为串口。
9、开灯器固件在代码仓库下载源码,可自行编译或直接下载固件,参考 STC 51单片机程序下载方法。搞定了这一步,就要开始组装魔杖了!
组装
①组装魔杖:在工程附件中可下载 3D 外壳文件,制作出来后按下图方式嵌入电路板及电池。
②组装开灯器:同上,有设计文件,制作出来后,按下图组装开灯器,注意红外头需引出。
不觉得很酷吗,科技并带着乐趣
蓝牙连接
以上操作完成并正常开机后,就可以尝试连接蓝牙了。
使用海凌科官网提供的 HLK-B40 软件 连接到蓝牙模块,
按照下图内容修改参数设置:
上图是魔杖的蓝牙模块配置,开灯器的蓝牙模块配置图略,魔杖和开灯器一个作主机一个做从机就行 了
同样使用海凌科官网提供的 HLK-B40 软件连接到蓝牙模块,按照下图内容修改参数 设置:
上图需要注意的点为透传相关 UUID。
三个 UUID 需要改成同一个才能和手机 APP 正常通信,否则手机只能连接模块但无法收发数据。
接着在代码仓库下载源码,自行编译,或直接下载 apk。
注意!手机 app 需要打开权限,否则无法正常使用。
此 APP 不联网,定位权限是使用蓝牙的前提,不会泄露您的任何信息。
开源项目资料获取
需要【软硬件资料+视频演示文件】,请“复制链接”进入开源页查看:https://oshwhub.com/realtix/cyber-wand-v851s_bmi088_keras
PS:空调也能控制,再也不用为满屋子找不到空调遥控器而发愁啦~
本文转载了「立创开源硬件平台」的用户创作,如有侵权,请联系删除
原文链接:https://mp.weixin.qq.com/s/-jUd17vBvcNGdUSbRAQDxg
项目链接:https://oshwhub.com/realtix/cyber-wand-v851s_bmi088_keras -
1月全志芯片开源项目分享合辑
1、柚子爱AI相机(YuzuAI-YuzuMaix-AIoT-V831)
开源项目地址:https://oshwhub.com/armbian-pythoniot/yuzumaix-v831
本项目于去年4月首次发布,是基于V831的AI相机开源项目,经过几个版本的迭代,最终运用了叠层的设计来实现AI摄像头+掌控板的奇葩组合。
开发板主控是全志V831,采用Arm Cortex-A7 + 0.25T NPU的内核,集成64MB DDR,支持Linux 4.9 Tina系统。固件可以借用Sipeed的M2Dock,软件、外设兼容MaixPy3,也可以自己编译BSP。
项目整体引用YuzukiIRC的主体设计,经过几个版本的迭代后,AI相机的设计最终确定为将屏幕和摄像头分为上下两板的布局,并在有屏幕的一端设计了类似掌机的操作交互按键,扇出的背面引脚负责连接的另一块开发板则负责相机的使用。上层板设计最简单的功能,只有S1和S2两个按键以及类似掌机布局的几个功能按键,一个复位键,再加上LCD屏。目前AI相机成品已经在某宝上售卖。
2、retroPalm V3s掌机
开源项目地址:https://oshwhub.com/curtainzero/gc_v3s
一改往日横版掌机的风格,retroPalm采用了竖版外形进行外观设计,在键位布局和操作功能上也是参考了Funkeys的风格来进行布局,并将无声按键换成锅仔片按键,将方向摇杆换成十字键,操作手感更加丝滑。
掌机主控本代掌机采用了开源掌机使用最广泛的主控全志V3s,并选用了一块MCU作为协处理器,屏幕尺寸是被广泛使用的2.8寸TFT液晶LCD屏,分辨率均为320X240。
掌机的PCB文件和固件都完全开源,硬件上还支持WiFi蓝牙的通信方式不过暂未支持,震动马达和加速度计的驱动适配也尚未完全,如果希望节省DIY成本的小伙伴可以先不贴这些区域的元件。
3、V3S-PI 基于全志V3S的随身终端
开源项目地址:https://oshwhub.com/expert/zi-zhi-planck-pi
本项目是基于全志V3S的随身终端(类似MP4),命名为V3S-PI,开发板使用四层板制作,全板采用0603电容电阻,相较于0402,制作更为方便,同时成本可压缩至100以内。
V3S-PI是基于全志V3s设计的开发板,V3s单核Cortex-A7带有硬件浮点计算,且芯片内封64Mbyte DDR2,无需再外挂DDR2芯片,极大程度上为开发板的走线设计降低了难度。
V3s芯片包含专用视频引擎以提供高级多媒体应用程序和服务,开发板设计之初就预留了屏幕、音频等接口,作者本人给这块开发板增加适配的外设以及功能有将近10个:获取天气、连耳机播放音乐、10M/100M以太网接口、连wifi、接入SD卡、调整屏幕亮度、按键控制、外接其他设备、1转4USB HUB......
4、TinyVision V851se
开源项目地址:https://oshwhub.com/gloomyghost/tinyvision
TinyVision是一款异构视觉AI开发套件,主控芯片使用全志V851se,芯片内置0.5Tops算力,可用于AI视觉IPC摄像头,内置100M ephy可以支持路由设备功能。
开发板在外设功能的增加上采用了硬件堆叠的方式,V851se开发板配套有相同尺寸大小的显示屏+WiFi模块,可以用来进行显示输出和无线网络传输等功能,未来也会针对V851se的接口特点适配上AI摄像头等功能模块。
-
【吃灰开发板复活】DIY全志V3s随身终端屏幕适配,LVGL以及各种外设驱动移植教程
在上周的文章中介绍了一款因作者想要学习Linux而动手DIY的终端设备V3S-PI,
《梦回2004!我用全志V3s做了个成本100元,功能媲美MP4的随身终端》:https://bbs.aw-ol.com/topic/4940/
并详细解析了项目的硬件设计部分,本文将着重介绍项目的软件适配部分,并挑选其中几个普适性较强的外设功能来进行介绍。
V3S-PI是基于全志V3s设计的开发板,V3s芯片包含专用视频引擎以提供高级多媒体应用程序和服务,开发板设计之初就预留了屏幕、音频等接口,作者本人给这块开发板增加适配的外设以及功能有将近10个:获取天气、连耳机播放音乐、10M/100M以太网接口、连wifi、接入SD卡、调整屏幕亮度、按键控制、外接其他设备、1转4USB HUB......
而在适配了屏幕,移植了LVGL以及各种外设驱动后,开发板摇身一变成为功能可以媲美MP4的随身终端。
2.4寸LCD彩屏适配
LCD彩屏使用SPI接口与主控连接,由于各家屏幕初始化代码不同,所以st7735r.c文件在原来的基础上,我们只需修改st7735r_pipe_enable这个函数中的代码即可。
- 软件部分采用TinyDRM,与传统的fbtft相比,不再是固定帧率刷新。
- 采用DRM架构,可以与新架构程序更快集成。
修改完成的代码参考下方文件,设备树配置参考:
&spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins>; display@0 { compatible = "jianda,jd-t18003-t01"; reg = <0>; spi-max-frequency = <95000000>; backlight = <&panel_backlight>; dc-gpios = <&pio 4 9 0>; // PE9 reset-gpios = <&pio 4 8 0>; // PE8 rotation = <0>; }; };
除spi外,需要添加一个背光节点,这样就可以在用户层操作背光:
panel_backlight: panel-backlight { compatible = "gpio-backlight"; gpios = <&pio 4 7 GPIO_ACTIVE_HIGH>; // PE7 default-on; status = "okay"; };
顺利适配好屏幕后移植上LVGL,可以在刷FB的图层刷出来700帧的高刷。
libcurl获取天气信息方式
为了丰富功能,作者还通过libcurl库实现了获取天气信息的功能,通过回调函数处理获取到的JSON数据,并使用lvgl库显示天气信息。
这里需要用到一个回调函数,用于解析获取到的JSON格式的天气信息。它首先使用cJSON库对获取到的数据进行解析,并找到对应的天气信息字段。
// 解析json数据 cJSON * json = cJSON_ParseWithLength(ptr, size * nmemb); if(!json) { goto end; } json = cJSON_GetObjectItem(json, "now"); if(!json) { goto end; } cJSON * temp = cJSON_GetObjectItem(json, "temp"); cJSON * humidity = cJSON_GetObjectItem(json, "humidity"); cJSON * text = cJSON_GetObjectItem(json, "text"); cJSON * pressure = cJSON_GetObjectItem(json, "pressure");
然后使用其它函数进行线程锁定,以防止多线程冲突,接着利用LVGL库的相关函数将天气信息设置到对应的标签上。
pthread_mutex_lock(&mutex); if(cJSON_IsString(text)) { lv_label_set_text_fmt(label1, "当前天气\n%s", text->valuestring); } if(cJSON_IsString(pressure)) { lv_label_set_text_fmt(label2, "气压\n%s hPa", pressure->valuestring); } if(cJSON_IsString(temp)) { lv_label_set_text_fmt(label3, "室外温度\n%s ℃", temp->valuestring); } if(cJSON_IsString(humidity)) { lv_label_set_text_fmt(label4, "湿度\n%s %%", humidity->valuestring); } pthread_mutex_unlock(&mutex); cJSON_Delete(json); end: return size * nmemb;
get_now_weather函数首先定义一个URL字符串,其中包含了获取天气信息所需的地址和参数。然后通过curl_easy_init创建一个CURL对象,并配置相应的选项,如设置URL、禁止进度信息、忽略SSL证书校验、设置回调函数等。接着使用curl_easy_perform执行请求,并检查返回的结果。最后使用curl_easy_cleanup清理CURL对象。
char * url = "https://devapi.qweather.com/v7/weather/now?location=" LOCATION "&key=xxx"; CURL * curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); // curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, now_weather_cb); curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip");
需要根据实际情况修改URL字符串中的
LOCATION
和xxx
,并根据天气API的要求进行必要的参数配置和授权等操作。音频播放
Buildroot中集成了alsa,默认声卡会静音状态,打开终端,输入alsamixer,首先解除静音。
在当前界面,选中Headphone,然后按下M键 解除静音,然后使用键盘↑,调整音量到合适大小即可,界面可参考:
调整完成后,输入mpv 文件名 --no-video,插入耳机,即可实现音乐播放:
[root@buildroot ~]# mpv 2.flac --no-video Video --vid=1 [P] (mjpeg 500x500 1.000fps) (+) Audio --aid=1 (flac 2ch 48000Hz) File tags: Album: 西厢寻他 Title: 西厢寻他 Track: 1 AO: [alsa] 48000Hz stereo 2ch s32 A: 00:00:04 / 00:03:43 (2%) Exiting... (Quit)
命令提示符显示当前目录,编辑/etc/profile文件,添加一行,然后export /etc/profile重新加载配置即可:
export PS1='[\u@\h \w]\$ '
开源资料获取
在目前网上资料的基础上,作者自行移植了主线内核Uboot以及root。目前仅支持SD卡以及SPI Nor启动。本文所有内容均转载自原作者本人的B站视频账号及开源文章。
作者B站主页链接:https://space.bilibili.com/66212170
本项目所有资料均已开源,软硬件都开源了,其中软件开源了:UBoot、Kernel、Buildroot:测试镜像下载地址等……想获取资料自己DIY学习的伙伴,请点击下方图片跳转阅读或戳文末的“阅读原文”获取。
-
Reply: 下载源码时卡在这里不动,请问下大佬必须要升级到lv2才能下载吗
@xieminghao sudo git config --global credential.helper store
-
梦回2004!我用全志V3s做了个成本100元,功能媲美MP4的随身终端
本项目是基于全志V3S的随身终端(类似MP4),命名为V3S-PI,开发板使用四层板制作,全板采用0603电容电阻,相较于0402,制作更为方便,同时成本可压缩至100以内。
项目简介
开发板选用全志V3S为主控,V3s单核Cortex-A7带有硬件浮点计算,且芯片内封64Mbyte DDR2,无需再外挂DDR2芯片,极大程度上为开发板的走线设计降低了难度。
开发板的外设以及功能有将近10个:获取天气、连耳机播放音乐、10M/100M以太网接口、连wifi、接入SD卡、调整屏幕亮度、按键控制、外接其他设备、1转4USB HUB......
由于开发板设计功能繁多,为了教会大家自己DIY开发板,作者将项目整体拆分为了6大部分,分别为项目特性、软件开源、硬件开源、软件方案、开源网址,来对开发板整体设计进行全面介绍和详细讲解电路原理。
项目特性
- 全志V3S主控,采用单核Cortex-A7,带硬件浮点
- 芯片内封64Mbyte DDR2,无需外挂DDR2
- 支持RTL8723BS 2.4G WIFI
- 通过CH334R扩展双USB口
- 耳机接口采用V3S内置声卡
- 支持10M/100M以太网接口
- 支持SDMMC接口,用于启动系统
- 支持CH340N 串口转USB,用于连接串口终端
- 支持LRADC,四个ADC按键
- 2.4寸LCD彩屏,使用SPI接口
- 2x8扩展接口,用于扩展I2C/UART
软件开源
在目前网上资料的基础上,作者自行移植了主线内核Uboot以及root。目前仅支持SD卡以及SPI Nor启动,SPI Nand启动请不要参考当前代码。
1、UBoot快速启动:
git clone https://gitee.com/fhcloud/uboot-v3s cd uboot-v3s make v3s_pi_defconfig make
输出的文件在源码根目录:
u-boot-sunxi-with-spl.bin
2、Linux快速启动:
git clone https://gitee.com/fhcloud/linux-v3s cd linux-v3s make v3s_pi_defconfig make
输出的内核文件在:
arch/arm/boot/zImage
输出的设备树请使用:
arch/arm/boot/dts/sun8i-v3s-pi.dtb
3、Buildroot快速启动:
git clone https://gitee.com/fhcloud/buildroot-v3s.git cd buildroot-v3s make v3s_pi_defconfig make
输出的文件在:
output/images/rootfs.tar
硬件开源
硬件采用四层板设计,下面会将电路拆分为11部分,逐一说明。
主控部分
本项目主控采用全志V3S,需要注意的是,R3/R5电阻需使用1%,同时,EPHY存在两组电压。
ADC按键
板载四个ADC按键,电压跨度为0.2V,通过分压电阻实现。
2x16 PIN扩展接口
此处通过排针,引出了8个扩展接口,包含了一个串口/一个I2C总线,可用于外接其他设备。
辅助供电
板载四组供电芯片,分别产生3.0V、3.3V、1.8V、1.2V,其中:
- 3.0V用于PLL以及AVCC模拟供电
- 3.3V负责芯片IO以及其他外设供电
- 1.8V用于内存供电
- 1.2V用于V3S核心主控供电。
- 三路DCDC最大输出电流2A。
WiFi模块
板载2.4G WIFI模块,使用RTL8723BS模块,V3S与WIFI模块之间采用SDIO接口连接,引出一个IPEX接口用于外接天线,R20-R27为SDIO和芯片要求的上拉电阻,C50/C51/C70为外围滤波电容,模块采用3.3V供电。
10/100M以太网接口
百兆以太网需要使用两组差分,分别为RX/TX差分。以太网PHY一般带自动翻转功能,所以RX/TX可以对调。V3S以太网使用电压驱动,只需在网口变压器中心抽头处加100NF电容到地即可。内部封装的电阻和2KV电容用于泄放主板的静电,防止高压打坏主控芯片。
R28/R29为LED限流电阻,SH1 SH2为外壳,直接接地即可。
2.4寸LCD彩屏
2.4寸彩屏通过SPI与主控进行通信,PE8接彩屏重置线。PE9接DC用于区分数据/指令。
LEDA为背光阳极,LEDK接Q1 MOS,用于主控控制背光开关,屏幕通过焊锡焊接到PCB板上。
CH340串口转USB
使用CH340N芯片,实现串口转USB,用于电脑连接终端。
R30/R31用于确保双头TYPEC线正常供电,D1为TVS,用于保护USB接口,此处使用3.3V供电,所以CH340N的VCC和V3需要连接到一起,同时增加100nf电容。
CH334R 1转4 USB HUB
通过CH334R芯片,实现一转四个USB Host口,此处采用统一供电,所以VDD33与V5连接到一起即可。
- XI XO输入12Mhz晶振
- DPU/DMU接上行USB口
耳机接口
耳机接口采用PJ-342接口,带音频和录音:
SD卡接口
SD卡接口用于插入MicroSD卡,R32-R36为SD卡上拉电阻,这里CLK不需要上拉,否则可能会影响SDIO通信。
软件设计
软件方案主要讲这8个部分:Linux内核、2.4寸LCD彩屏驱动、USB、以太网、无线网卡RTL8723BS、ADC按键、音频播放、libcurl。
Linux内核
内核采用Linux5.15.143主线内核,在其基础上,修改了部分代码,适配V3S大部分外设。
2.4寸 LCD裁判驱动
LCD彩屏使用SPI接口与主控连接,由于各家屏幕初始化代码不同,所以st7735r.c文件在原来的基础上,我们只需修改st7735r_pipe_enable这个函数中的代码即可。
- 软件部分采用TinyDRM,与传统的fbtft相比,不再是固定帧率刷新。
- 采用DRM架构,可以与新架构程序更快集成。
修改完成的代码参考下方文件,设备树配置参考:
&spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins>; display@0 { compatible = "jianda,jd-t18003-t01"; reg = <0>; spi-max-frequency = <95000000>; backlight = <&panel_backlight>; dc-gpios = <&pio 4 9 0>; // PE9 reset-gpios = <&pio 4 8 0>; // PE8 rotation = <0>; }; };
除spi外,需要添加一个背光节点,这样就可以在用户层操作背光:
panel_backlight: panel-backlight { compatible = "gpio-backlight"; gpios = <&pio 4 7 GPIO_ACTIVE_HIGH>; // PE7 default-on; status = "okay"; };
USB接口
设备树配置参考:
&usb_otg { dr_mode = "host"; // peripheral status = "okay"; }; &usbphy { status = "okay"; };
除引用节点外,一定要添加ochi/echi,不然USB插入会没有反应:
soc { ehci0: usb@01c1a000 { compatible = "allwinner,sun8i-v3s-ehci", "generic-ehci"; reg = <0x01c1a000 0x100>; interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>; clocks = <&ccu CLK_BUS_EHCI0>, <&ccu CLK_BUS_OHCI0>; resets = <&ccu RST_BUS_EHCI0>, <&ccu RST_BUS_OHCI0>; status = "okay"; }; ohci0: usb@01c1a400 { compatible = "allwinner,sun8i-v3s-ohci", "generic-ohci"; reg = <0x01c1a400 0x100>; interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>; clocks = <&ccu CLK_BUS_EHCI0>, <&ccu CLK_BUS_OHCI0>, <&ccu CLK_USB_OHCI0>; resets = <&ccu RST_BUS_EHCI0>, <&ccu RST_BUS_OHCI0>; status = "okay"; }; };
以太网
直接引用DTSI文件中的emac节点即可,设备树参考:
&emac { allwinner,leds-active-low; status = "okay"; };
无线网卡RTL8723BS
Linux下SDIO架构类似于USB,设备插入后,如果有对应驱动,会自动加载。
所以设备树中,我们只需要配置好MMC1接口,然后编译对应的驱动ko,在rootfs中加载即可。
&emac {&mmc1 { broken-cd; bus-width = <4>; vmmc-supply = <®_vcc3v3>; status = "okay"; }; allwinner,leds-active-low; status = "okay"; };
编译完成的ko文件在buildroot的overlay目录下面,可以参考下方资料:
r8723bs.ko就是编译完成的内核模块,此处的模块backport了5.19内核的驱动,相比于5.15的驱动更加稳定。
除ko文件外,此处还需要加载网卡固件,参考下方目录:
连接WIFI请参考下方脚本:
[root@buildroot ~]# cat conn.sh modprobe r8723bs.ko wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf udhcpc -i wlan0
配置文件请参考下方:
ctrl_interface=/var/run/wpa_supplicant ap_scan=1 network={ ssid="###############" psk="###############" }
音频播放
Buildroot中集成了alsa,默认声卡会静音状态,打开终端,输入alsamixer,首先解除静音。
在当前界面,选中Headphone,然后按下M键 解除静音,然后使用键盘↑,调整音量到合适大小即可,界面可参考:
调整完成后,输入mpv 文件名 --no-video,插入耳机,即可实现音乐播放:
[root@buildroot ~]# mpv 2.flac --no-video Video --vid=1 [P] (mjpeg 500x500 1.000fps) (+) Audio --aid=1 (flac 2ch 48000Hz) File tags: Album: 西厢寻他 Title: 西厢寻他 Track: 1 AO: [alsa] 48000Hz stereo 2ch s32 A: 00:00:04 / 00:03:43 (2%) Exiting... (Quit)
命令提示符显示当前目录,编辑/etc/profile文件,添加一行,然后export /etc/profile重新加载配置即可:
export PS1='[\u@\h \w]\$ '
开源资料获取
本项目所有资料均已开源,软硬件都开源了,想获取资料自己DIY学习的伙伴,请前往 https://oshwhub.com/fanhuacloud/v3s_lcd 获取。
-
将开发板设计拆解为10个部分,教你DIY一块F1C200S Linux开发板
本项目是基于全志F1C200S设计的开源屏幕开发板,设计的目标是提供一个低成本、超迷你且适合Linux开发的平台,特别是针对屏幕接口的支持。
项目简介
开发板板载16M nor flash,主控芯片采用F1C200S,内置64M DRAM。同时附带USB Host接口以及USB type-c口,以及CH340串口转USB芯片,用于开发调试使用。
硬件设计
由于芯片功能繁多,开发板设计也相对复杂,为了教会大家自己DIY开发板,作者将开发板设计的硬件部分按功能拆分为了10个不同的知识点,来对开发板整体设计进行全面介绍和详细讲解电路原理。
全志F1C200S主控
全志F1C200s是一款高度集成、低功耗的移动应用处理器,支持高清视频解码,包括H.264、H.263、MPEG 1/2/4等格式,同时还具备音频编解码器和I2S/PCM接口,适用于多媒体音视频设备。
芯片基于ARM 9架构,并SiP了DDR,这样的配置使其外围电路在设计时会非常简单,非常适合作为入门级的Linux开发板。该部分原理图如下图所示:
- SVREF用于给DRAM提供参考电压,该部分所需电压为VCC_DRAM/2
- 2VCC_DRAM为DRAM供电,电压为2.5V
- VCC_IO为GPIO供电,电压为3.3V
- VCC_CORE为核心供电,电压为1.2V
- AVCC为模拟供电,该部分非常重要,不接会导致USB Host无法枚举设备,同时需要注意该引脚供电范围为2.5V-3.1V,不可以使用3.3V供电,会导致内部电路损坏。
- X1为24M晶振,为芯片提供时钟信号,采用22pF负载电容。
SDMMC接口
SDMMC接口用于接入Micro SD卡,系统启动时,可以从SD卡中加载U-Boot,内核,RootFS,实现Linux启动。
如上图所示,相关线路说明如下所示:
- CLK: SDMMC时钟,每个时钟周期传输一个命令或数据位。频率可在0至25MHz之间变化。SD卡总线管理器可以自由产生0至25MHz的频率,没有任何限制
- CMD: 命令传输线,命令通过该CMD线串行传输
- D0~D3: 数据通过这些数据线传传输
- 按照SDMMC规范,SDMMC线路还需要增加10K上拉电阻,如果没有可以会影响数据传输,本原理图中R7-R11即上拉电阻。同时,为了保证电源质量,增加了C22滤波电容
- SHELL引脚为SDMMC连接器固定引脚,此处接地处理,CD引脚用于探测SD卡是否插入,这一块悬空未使用
CH340串口转USB
此电路用于用户连接系统调试中断使用,其功能为将TTL串口转换为USB接口,使得用户可以在电脑中连接该串口进行调试。
需要注意的是,由于F1C200S的UART0接口(PE0/PE1引脚)被触摸的I2C接口占用,所以本开发板将CH340的串口连接到了F1C200S的UART1(PA2/PA3引脚)上,后续编译U-Boot和内核时我们需要相应的修改代码。
如上图所示,该部分除了串口转USB外,还兼顾了系统的供电。
- 用户通过Type-C线缆连接该调试口后,将同时为开发板供电
- 板上的5.1K电阻用于双头Type-C线缆识别从机,为其供电
- 如果R12,R13不焊接会导致使用双头Type-C线时板子没有供电
- D2为TVS瞬态抑制二极管用于保护PCB板上元件,防止静电击穿原件
三路DC-DC接口
该部分主要为主控芯片提供供电,采用SY8089A1AAC,单路最大输出电流2A。
- SVREF用于给DRAM提供参考电压,该部分所需电压为VCC_DRAM/2
- 2VCC_DRAM为DRAM供电,电压为2.5V
- VCC_IO为GPIO供电,电压为3.3V
- VCC_CORE为核心供电,电压为1.2V
- AVCC为模拟供电,该部分非常重要,不接会导致USB Host无法枚举设备,同时需要注意该引脚供电范围为2.5V-3.1V,不可以使用3.3V供电,会导致内部电路损坏。
- X1为24M晶振,为芯片提供时钟信号,采用22pF负载电容。
在该模块中,我们使用了2520电感,与普通的电感相比,体积更小,但是2520电感在DCR(即直流电阻)参数上,会比普通的电感大一点,电感值的计算公式可以参考下方:
- L为计算出的电感容量
- Vout为降压芯片输出电压
- L为计算出的电感容量
- Vin为降压芯片输入电压
- Fsw为芯片开关频率,SY8089取1.5Mhz,也就是1500000Hz
- Iout,max为最大输出电流
如下图所示,本开发板电感值直接参考SY8089数据手册文档,折中后取1.5Uh:
芯片的反馈电阻控制着芯片的输出电压,可以参考下方公式计算:
- Rh为上端分压电阻阻值
- Rl为下端分压电阻阻值
- 0.6V指的是芯片的Vfb,也就是反馈电阻
- Vout即最终的电压输出值
- 在这里,我们需要确定Rl和Vout,然后将其代入公式,计算出Rh
- 为了最大限度地减少轻负载下的功耗,最好为 RH 和 RL 选择较大的电阻值。强烈建议 RL 使用 10k 到 200k 之间的值
AVCC 3V LDO
该部分用于AVCC 3V供电,使用XC6206 3V LDO,位号为U10,由于较为简单,此处不在详细说明。
SPI Nor Flash
Nor Flash为F1C200S芯片提供了第二种启动方式。
- 上电后,F1C200S首先从内部BROM (芯片内置,无法擦除)启动
- 首先检查 SD0 有没有插卡, 如果有插卡就读卡 8k偏移数据,是否是合法的启动数据, 如果是BROM 引导结束, 否则进入下一步
- 第二步:检测SPI0 NOR FLASH是否存在, 是否有合法的启动数据, 如果是BROM 引导结束, 否则进入下一步
- 第三步:检测SPI0 NAND FLASH 是否存在, 是否有合法的启动数据, 如果是BROM 引导结束, 否则进入下一步
- 最后,因为找不到任何可以引导的介质,系统会进入usb fel模式,此时可以使用USB烧录
此处SPI Nor Flash可以同时兼容Nand Flash,不过目前裸机资料基本上都是以SPI Nor Flash为基础,所以此处焊接了W25Q128JVEIQ 128Mbit(16Mbyte)SPI Nor Flash。
- R4为上拉电阻(F1C200S内部也存在上拉电阻,可以不焊),防止未供电时芯片错误写入数据
- C16为滤波电容
- SW2为FEL模式开关,将SPI_MISO短路到地后,F1C200S将无法检测到SPI Nor Flash,从而进入USB Fel模式,此时可以松开按键,烧录内容至SPI Nor Flash
- /WP为SPI Nor Flash保护引脚,低电平有效,有效时无法写入数据
- /HOLDor/RESET为SPI Nor Flash保持或者复位输入引脚。
- 最后,因为找不到任何可以引导的介质,系统会进入usb fel模式,此时可以使用USB烧录
外部IO接口
此处引出了未使用的IO,用户可连接其他设备,C35为滤波电容,用于保证电源质量,该部分引脚功能可以参考下图(来源:芯片数据手册14/15页):
USB OTG/USB TYPE-C
该部分连接到了芯片的DP/DM引脚,为芯片的USB接口。
USB Type-C用于USB Fel模式烧录系统,无供电输入/输出能力。
USB OTG处可用于连接其他USB设备,带5V输出,当然也可以接双头USB Type-A线缆用于USB Fel模式。
需要注意的是,开发板中没有连接ID线(ID线用于识别USB模式),所以在编写设备树时,我们需要强制指定USB模式为主机或从机。
背光驱动
该部分用于驱动RGB屏幕背光,标准40Pin RGB屏幕基本采用串联背光,由于本身开发板供电只有5V,所以我们需要使用背光驱动芯片升压到合适的电压,来驱动屏幕背光。
同时,背光驱动芯片采用恒流控制,可以避免电流过大导致背光LED烧毁,该部分原理图如下所示:
- C19 C20为滤波电容,C19电容的耐压需要特别考虑,一般的RGB屏背光电压基本在18V以上(白光LED压降3V*6串),过低的电容耐压会导致电容损坏
- BL_CTR为芯片背光控制引脚,此处直接接入了上拉,再开发时可以将BL_CTR引脚接入F1C200S的PWM引脚上,这样可以灵活控制屏幕亮度,同时,有恒流驱动的存在,控制亮度时,背光也不存在明显的频闪
- L1 为升压电路的电感,按照要求一般取10uh或22uh即可,不需要使用公式详细计算,但是需要注意电流不能超过电感额定电流
R5为芯片的反馈电阻,用于调节输出的电流,计算公式可参考下方:
此处我们选择20ma,所以R1=0.25/0.020(Ω) = 12.5Ω,就近取12Ω。
如上图,下方说明了LED为2并5串,额定电流为40ma,我们为了保险,选择了20ma,亮度会有所损失。
40Pin RGB/触摸接口
此处参考屏幕数据手册即可,由于F1C200S只支持RGB565,RGB666,此处使用RGB666,屏蔽了RGB三色的低2位,这样最终色彩影响比较小,同时,F1C200S内置色彩抖动,可以更加接近RGB888效果。
其中需要注意的是,CTP_SDA/CTP_SCL最好加上拉电阻,此处选用了内部上拉,所以并没有加电阻,该部分原理图如下所示:
开发环境搭建
使用VSCode的DeviceTree插件,我们可以实现设备树文件的代码高亮,编辑c语言代码。
安装VSCode后,我们开始安装设备树插件,再商店中搜索DeviceTree插件,点击安装安装即可:
同理,推荐读者同时安装中文汉化,搜索CN,参考下图安装即可,安装后按照要求重启VSCode即可使用。
打开安装好的Ubuntu 18.04虚拟机,将需要分区的SD卡插入电脑USB口,并右键点击VMware右下角的USB存储器图标,点击连接,将SD卡连入虚拟机。具体操作过程如下图所示:
点击桌面左下角图标,进入所有应用,然后搜索GPartd,可参考下图:
此时需要输入密码,输入用户密码,提权到root用户,如下图所示:
接着在右上角选择我们需要格式化的SD卡,默认为/dev/sda,这个是我们虚拟机的系统盘,我们需要切换到SD卡,此处一定要小心,sdb不一定是我们的sd卡。
完成切换后,右键点击如图所示位置,点击“卸载”,接着点击“删除”按钮删除SD卡中原有分区,最后点击确定,确认删除,具体过程可以参考下图。
接着开始创建分区,首先创建boot分区,用于u-boot读取设备树、内核等文件,我们需要在分区前方空出一定的空间,用于u-boot以及SPL程序存放,如下图所示,首先点击左上角按钮,创建新分区,然后按照下图创建boot分区。
此处为U-Boot以及SPL预留了1Mib的空间,完全足够存放这些程序。
接着创建rootfs分区,我们将剩下的空间全部作为rootfs,文件系统选择ext4,如下图所示:
最后点击保存,确认后生效,拔出SD卡备用,操作可参考下图:
开源资料获取
作者适配的U-Boot目前使用了master分支的U-Boot并给出了移植指南。由于后续master分支代码可能会存在更新,所以移植指南使用了最近的一个U-Boot版本来指导复刻打开发者进行修改和配置,编译出自己的U-Boot。
本项目所有资料均已开源,软硬件都开源了,其中软件开源了:UBoot、Kernel、Buildroot:测试镜像下载地址等……想获取资料自己DIY学习的伙伴可以前往获取
-
纵享丝滑!R128+LVGL驱动多尺寸RGB LCD屏幕流畅运行
新晋点屏神器,R128!各种屏幕都能点!
高刷、大屏、宽色域......通常来讲,显示器的配置越高,越能给使用者带来优于其它一般配置显示器的体验。但就某些特殊的使用场景来讲,选择配置合适的显示屏幕,才能更精准地匹配上实际的使用需求。
无论是工控监视设备、平板电脑、笔记本电脑等带屏产品,还是平时开发者在DIY掌机、小电脑、桌面机器人等电子设备时,都需要通过使用不同尺寸的RGB屏幕来满足特定的需求。
R128和LVGL的组合就为这一类的应用场景提供了解决方案的另一种选择,对内存及处理器性能的低要求,可以让LVGL很好的适配不同尺寸的RGB屏幕以及各种应用场景。
-
7寸方屏(1024x600)
-
4寸方屏(480x480)
-
4寸圆屏RGB(480x480)
R128适配RGB LCD配置
如动图展示,其中最大的屏幕是 7寸1024x600分辨率,lvgl测试不加触摸能跑60多帧,加触摸是58帧左右,4寸480x480分辨率的屏幕时,R128的lv_benchmark跑分显示可达247fps,实现伪高刷。
R128目前以支持移植百问网的7寸(1024x600)、4寸方屏(480x480)、4寸圆屏RGB(480x480)。
不同尺寸RGB屏幕的sys_config.fex配置有微小差异,以4寸方屏RGB配置代码为例:
4寸方屏(480x480) ;lcd_driver_name = "default_lcd" ;lcd_backlight = 150 ;lcd_if = 0 ;lcd_x = 480 ;lcd_y = 480 ;lcd_width = 70 ;lcd_height = 70 ;lcd_rb_swap = 1 ;lcd_dclk_freq = 9 ;lcd_pwm_used = 1 ;lcd_pwm_ch = 7 ;lcd_pwm_freq = 500000 ;lcd_pwm_pol = 1 ;lcd_hbp = 20 ;lcd_ht = 526 ;lcd_hspw = 6 ;lcd_vbp = 10 ;lcd_vt = 510 ;lcd_vspw = 4 ;lcd_lvds_if = 0 ;lcd_lvds_colordepth = 1 ;lcd_lvds_mode = 0 ;lcd_frm = 1 ;lcd_io_phase = 0x0000 ;lcd_gamma_en = 0 ;lcd_bright_curve_en = 0 ;lcd_cmap_en = 0 #触摸配置 4寸方屏(480x480) GT911 ;tp_max_x = 480 ;tp_max_y = 480 ;tp_addr = 0x14
LVGL配置修改以下内容:
/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/ #define LV_COLOR_DEPTH 32 /*这里可以改为16,因为de会自动转换到32位,最终显示还是32位色深*/ /*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/ #define LV_COLOR_16_SWAP 0 #ifndef USE_EVDEV # define USE_EVDEV 1 #endif
以上配置完成后,编译打包烧录,上电后屏幕背光亮起,屏幕为黑色,并且可以在 LOG 中看到 SPI 初始化的 LOG。
disp:[disp_device_attached_and_enable 230]attached ok, mgr0<-->dev0 disp:[disp_device_attached_and_enable 243]type:1,mode:0,fmt:rgb,bits:8bits,eotf:4,cs:0 dvi_hdmi:2, range:2 scan:0 ratio:8 [gt911][log] PRODUCT_ID=39:31:31:00:60:10 [gt911][log] verison=00 range_x=0 range_y=0 point_num=0 [gt911][log] PRODUCT_ID=39:31:31:00:60:10 [gt911][log] verison=42 range_x=480 range_y=480 point_num=5
开发资源
Gitee源码获取链接:https://gitee.com/weidongshan/100ask_r128_demos
GitHub源码获取链接:https://github.com/100askTeam/100ask_r128_demos更多关于项目的详情可以前往百问网R128综合项目开发案例界面了解:https://aw-r128.100ask.net/zh/rtos/demo/part1/chapter15.html
应用拓展
在其它规格及尺寸屏幕上的LVGL运行效果对比也可以参考以下文章,文章内将对比了LVGL运行在R128平台时,SPI与DBI在不同型号屏幕下的性能差异。
相关阅读:https://r128.docs.aw-ol.com/demo/spi_vs_dbi/
能进行虚拟光渲交互的智能家居中控,基于开源项目移植的NWatch智能手表,它们的产品形态其实类似,只是在屏幕的选择规格上有明显差异。
相关阅读:https://bbs.aw-ol.com/topic/4793/
相关阅读:https://bbs.aw-ol.com/topic/4563/
在原文链接演示的链接回复中,也可以发现有的开发者基于R128+LVGL的搭配实现了普通灯珠的点阵屏控制效果图,丰富的音视频接口为R128应对不同场景的需求提供了便利。
基于R128-S2设计的全套开发板已上线淘宝百问网韦东山老师个人店进行售卖,包含黑色的DshanMCU-R128s2-R16N16模组和全套的DshanMCU-R128s2-DEVKIT。
- DshanMCU-R128s2-R16N16模组:29.9元
- DshanMCU-R128s2-DEVKIT开发板:49.9元
R128开发板购买链接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.46b0523cMfarLo&id=736154682975&ns=1&abbucket=5#detail
-
-
Reply: 全志在线开源芯片 新 SDK 平台下载方法汇总
@mc964203886 配置一下 sudo git config --global credential.helper store
-
用R128复刻自平衡赛车机器人,还实现了三种不同的操控方式
经常翻车的朋友们都知道,能在翻车后快速摆正车身的车才是好车。
就像动画《四驱兄弟》中展现的那样,在比赛中需要跟着赛车一起跑圈,而且赛车如果被撞翻还需要重新用手扶正,所浪费的时间非常影响比赛结果。
如果小豪和小烈可以拥有一款能通过发挥R128的WiFi&蓝牙特性的平衡小车,从而能通过WiFi或蓝牙连接的方式进行控制,既可以自平衡和转向,又可以远程操控,那冠军岂不是手到擒来。
它,就是可以自平衡的赛车机器人——B_ROBOT_100ASK
项目简介
本项目基于jjrobots的开源项目B-ROBOT EVO2进行复刻,与原开源项目不一样的地方是,作者将原本适配的的Arduino控制板移植为DShanMCU-R128s2-DevKit开发板,与此同时还添加了一些功能,比如自平衡功能、WiFi&蓝牙控制、App控制以及语音控制功能,让平衡小车的操控乐趣更上一层楼。
硬件设计
本项目中的自平衡赛车机器人的硬件设计结构非常简单,硬件部分主要由R128开发板和几个驱动模块组成。
-
供电模块
自平衡机器人采用锂电池供电的方式,并利用mini360航模电池降压模块来将较进行电压的转化工作,以满足小车设备对电压方面的需求 -
电机驱动模块
自平衡机器人选用两个NEMA17步进电机,并选用DDRV8825步进电机驱动模块来负责与电机之间的控制信息传输。
DDRV8825步进电机驱动模块的体积小,驱动能力强,它只需要一个PWM波就能控制步进电机,同时基本上三个引脚就能完全控制步进电机。
通过该模块可以使小车快速反应R128下达的运动信息,驱动小车本身的轮子进行运动。
- 平衡模块
MPU6050是一种6轴运动跟踪传感器,它包含3轴陀螺仪、3轴加速度计、运动处理器和温度传感器。它可以通过I2C总线接口与微控制器进行通信,并且可以通过辅助I2C总线与其他传感器设备通信。
MPU6050的主要作用是帮助机器人实现姿态感知和运动控制,提高机器人的自主性和灵活性。
遥控手柄UI控制(LVGL)
作者本人还利用R128开发板来移植了一个酷炫的LVGL遥控手柄UI,通过手柄上的菜单栏UI可以选择不同的机器人基础参数设置和进行机器人操控。
在自平衡机器人启动后,可以通过面包板上的两个手柄去遥控机器人的前进后退和转弯,并且在屏幕上还会实时返回机器人的倾斜角度、速度、电量等状态。
实现APP控制
在机器人竞速中,必须要在准确性和速度之间找到平衡。为了更好的反馈给自平衡机器人设置不同参数下的运动状态,作者针对自平衡机器人进行了控制App的适配。
App可以实时显示电池状态和机器人的倾斜角度,操作者只需要通过App中的几个可视化按钮和滑动栏来实时修改其PID,以实现对机器人速度和状态的远程控制。
自平衡机器人的一般行为由一组参数定义:
// NORMAL MODE PARAMETERS #define MAX_THROTTLE 550 MAXIMUM VELOCITY #define MAX_STEERING 140 MAXIMUM SPINNING VELOCITY #define MAX_TARGET_ANGLE 14 MAXIMUM ANGLE REACHED WHEN MOVING // PRO MODE = MORE AGGRESSIVE (MAXIMUM SETTINGS) #define MAX_THROTTLE_PRO 860 MAXIMUM VELOCITY. PRO MODE #define MAX_STEERING_PRO 280 MAXIMUM SPINNING VELOCITY. PRO MODE #define MAX_TARGET_ANGLE_PRO 32 MAXIMUM ANGLE REACHED WHEN MOVING. PRO MODE #define KP 0.32 // 0.14 #define KD 0.050 // 0.028 #define KP_THROTTLE 0.075 //0.075 #define KI_THROTTLE 0.1 // 0.1 #define KP_POSITION 0.06 //0.055 #define KD_POSITION 0.45 //0.5 //#define KI_POSITION 0.02
比如:
-
高MAX_THROTTLE_PRO值会使机器人更快,但如果不能顺利恢复垂直位置,稳定性会降低。
-
高MAX_STEERING_PRO值会让机器人旋转得更快,但转弯时更难精确控制。
-
高MAX_TARGET_ANGLE_PRO值将使机器人减小其相对于地板的角度,但这会使恢复和转弯变得更加困难。
UDP 网络通信控制
这个功能的实现比较简单,利用R128本身自带的WiFi&蓝牙特性,来实现两块R128开发板(机器人自身携带&手上的操控端)的UDP网络通信控制。
源码获取
基于R128-S2设计的全套开发板已上线淘宝百问网韦东山老师个人店进行售卖,包含黑色的DshanMCU-R128s2-R16N16模组和全套的DshanMCU-R128s2-DEVKIT。
- DshanMCU-R128s2-R16N16模组:39.9元
- DshanMCU-R128s2-DEVKIT开发板:49.9元
R128开发板购买链接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.46b0523cMfarLo&id=736154682975&ns=1&abbucket=5#detail
Gitee源码获取链接:https://gitee.com/weidongshan/100ask_r128_demos
GitHub源码获取链接:https://github.com/100askTeam/100ask_r128_demos更多关于项目的详情可以前往百问网R128综合项目开发案例界面了解:https://aw-r128.100ask.net
-
-
你相信光吗?开源一个能进行虚拟光渲交互的D1s智能家居中控
项目作者:是小叶呀~ @aldfaaa
一位除了不会的都会的“全栈”工程师,接触国产RISC-V芯片(全志D1-H)的最早的一批开发者,热衷于有意思的DIY项目,有主控芯片自己焊接的无畏精神与小米加步枪的节俭精神。
本文所介绍产品demo是在立创开源平台的开源作品**《全志D1s智能家居中控虚拟光渲交互(86盒)》**,项目选用RISC-V核心的全志D1s作为主控进行开发,并通过家庭WIFI内网,实现设备间MQTT通信,与其它开源单片机控制项目进行充分联动,旨在推广类似客制化键盘概念到智能家居领域,尝试打破各大厂商对物联网家居的包揽野心和APP的分散的局面,回归到注重用户体验的智能家居本心。
项目简介
项目整体形态以适配86盒安装为基础,使用全志RISC-V核心的D1s芯片作为主控,选择更契合广大房奴的户型的4.3寸长方形屏幕,屏显拉满输出RGB888,搭载全志系的芯之联XR829作为WIFI/BLE模块,多种方式联动。
在开发系统的选择上,作者基于全志最新公开的Melis 4.0实时操作系统进行本项目的开发,并针对Melis 4.0粗糙地适配了LVGL图形库,实现了在性能受限的嵌入式设备上的光照渲染核心技术,致敬homeassistant。
硬件设计
为了在结构上适配标准86盒安装,硬件设计方面不仅引出了D1s包括屏幕显示、网络、音频在内的大部分功能引脚,还为后续的DIY功能开发、与其它开源单片机控制项目进行充分联动预留了开发接口。
虽然功能繁多,但项目的硬件设计方面其实并没有什么难点,只是作者本人本着主控芯片自己焊接的无畏精神与小米加步枪的节俭精神,在星火计划里申请了第一板的PCB和物料。
然而...作者确实高估了焊接eQFP芯片的难度,焊接完成发现还是存在结构等小问题,总结完各种问题后不断改了三个版本的PCB,甚至拖到了全志D1s都已经上架到了立创SMT元件库中。
想要复刻的小伙伴需要注意以下几个方面:
- SMT的版本系需要手工焊接B5819
- 需要检查D1s元件是否反接, 不然会造成片内DDR无法校准的深坑
- 不接USB_ID也不会影响D1s烧录镜像到Flash
软件设计
智能家居中控采用Melis 4.0以及RT-Thread内核的梦幻联动作为操作系统,并基于此系统进行了LVGL的适配工作,并在LVGL图形库实现了在性能受限的嵌入式设备上的光照渲染核心技术。
作为本项目的最核心亮点,作者为这款86盒专门适配了一套自研"光渲"算法,让交互不再停留在常规的按钮点击,显示界面会通过亮暗两种形态来反馈用户的操作效果。
除了实时反馈通过传统开关带来的灯光亮灭变化,用户在使用时还可以通过触摸屏幕,App控制等方式来充当灯光及其它智能家居的开关,通过该智能家居中控操作实现真正的全屋智能,回归到注重用户体验的智能家居本心。
资料获取
开门见山地说项目内的亮点:
- 基于全志最新公开的Melis 4.0实时操作系统进行开发, 使用RTThread内核! 汝可知这其中的梦幻联动?
- 针对Melis 4.0粗糙地适配了LVGL图形库;
- 基于LVGL图形库实现了在性能受限的嵌入式设备上的光照渲染核心技术,致敬homeassistant;
- 搭载全志系的芯之联XR829作为WIFI/BLE模块;
- 选择4.3寸屏幕是因为长方形的更契合广大房奴的户型(自己家);
- 结构上适配标准86盒安装;
目前项目的整体功能还不算完善,项目作者本人也在初版demo的基础上不断增加更加智能化的功能,目前有以下三个计划:
- 计划接入阿里云的MQTT服务, 正在谋划中...
- 社区大佬正移植NES模拟器..
- 方案适用于各种带屏设备, 逼格即可拉满! 包括但不限于:Voron, Klipper....(RISC-V生态百废待兴!)
作者连同使用的开发系统一起打包了软件及硬件的源码,并熬了好个晚上填完了项目中的坑,本项目所有资料均已开源,想获取资料自己DIY学习的伙伴,请前往以下链接获取。
-
全志客户服务平台智能客服使用指南
全志客户服务平台承载着为广大企业客户提供在线预览及下载技术文档、获取技术资源、快速查看FAQ、实时提交反馈问题等重要的功能。作为与客户交流并帮助客户解决问题的工具平台,客户服务平台从上线伊始,一直专注于打磨服务功能,致力于为客户带来良好的使用体验,并在使用的过程中吸取经验来提高为客户解决问题的效率。
近年来,全志科技基于市场需要和对产品趋势的理解,不断拓宽旗下芯片的产品线,各系列芯片的技术资源、开发文档、教学视频不断更新迭代,FAQ的数量也不断增长,在客户服务平台上架可供客户查阅的FAQ已有2000余条。
客户服务平台日益丰富的技术资源,虽提升了解决客户目标问题的可能性,却也为客户在实际使用中带来了检索困难,操作繁琐等不良体验。
全志科技长期坚持以客户为中心的理念,为更好的帮助客户快速定位和解决开发过程中遇到的问题,提升服务效率,全志客户服务平台对原有的文档检索及资料获取的流程进行优化,对智能客服功能作出了重要升级,客户现可以通过与智能客服对话的形式,来实现芯片文档获取、技术资源下载、FAQ快速检索等功能。
本文将为广大客户服务平台的用户演示通过智能客服快速查找技术文档,FAQ精准检索,以及一些新增功能的解释和使用方法介绍。
客户服务平台智能客服接入指南
智能客服功能部署在全志客户服务平台,全志客户服务平台主要面向所有全志芯片的代理商、方案商以及渠道合作伙伴、企业开发者,提供全面产品包下载与在线技术支持服务。
全志客户服务平台网址:https://open.allwinnertech.com
还未注册客户服务平台账号的客户可以先点击“立即注册”按钮进行注册,企业用户建议使用企业邮箱进行注册,用户名账号建议选用公司英文或拼音,后续该账号将作为公司主体的主账号用户名。需要注意的是,首次注册的新用户是未进行NDA认证的账号。
还未注册客户服务平台账号的客户可以先点击“立即注册”按钮进行注册,企业用户建议使用企业邮箱进行注册,用户名账号建议选用公司英文或拼音,后续该账号将作为公司主体的主账号用户名。需要注意的是,首次注册的新用户是未进行NDA认证的账号。
使用未进行NDA认证的客户账号在登录客户服务平台后,页面内不显示“在线咨询”按钮,客户可以先进行NDA认证,根据提示提交相关材料,通过认证后可正常使用智能客服功能。
账号登录成功后,点击页面左上方的马上认证跳转到NDA认证页面。按照要求填写公司证件号、地址,选择意向芯片平台、意向产品品类。该项关系到审核NDA资质的审核分配人员,请按你需要合作的芯片平台填写。
如果之前有全志客户经理已经与贵司对接,请填写【业务受理人】姓名,届时系统将按指定的受理人审核。
如果没有,也可以不用填写,选择意向芯片、意向品类即可,由系统为你分配审核人员。
按照全志的NDA模板填写了协议并条提交盖章签字后的附件,可点击【下一步】。
点击【上传已签订的NDA文件】,上传文件。点击【上传三证扫描附件或复印件】,上传企业的三证等资料,方便资料审核。
客户服务平台目前仅面向与全志合作、商务往来的企业,即全志的企业客户才能进行NDA认证,面向个人开发者群体的服务暂未开放,提交申请会被拒绝。
对于提交申请的企业主体开发者,即可在资质申请页看到当前状态,平台一般3-4个工作日完成审核。审核通过后,便可拥有该平台的使用及权限。
每个企业只有一个企业账号主体,若是开发者所在企业已经拥有企业主账号,则可以联系企业开发组的拥有者或管理员,添加到企业开发组中。企业主账号通过认证后,其申请者将为企业主账号的拥有者,且不可更改,相关配置也均与拥有者账号相关,故要求企业在申请企业NDA时,申请者的账号必须填写企业的账号,该账号不随人员变动而变动。
使用已进行NDA认证的客户账号在登录客户服务平台后,可以在“工作台”栏目页面的右下角看到“在线咨询”按钮的入口,点击按钮就会弹出智能客服的对话窗口,再次点击关闭窗口。
智能客服对话窗口包含以下几项内容:
(1)猜你想问:
平台设置的默认问题,可以通过该栏目对目标问题进行快速提问。猜你想问的栏目下默认设置了7个问题,可以快速获取全志客户服务平台的功能简介、编译工具链的介绍、V系列常见客户问题、芯片开发板购买链接等技术资源;(2)点击加载更多:
查看智能客服历史对话消息;(3)快捷短语:
平台设置的默认快捷短语,可以实现快捷回复以实现短语对应功能。快捷短语栏目下目前默认设置了查看V系列常见客户问题目录和查看V系列应用开发常见客户问题目录,客户可以通过该快捷短语了解开发常见问题的初级目录。(4)输入栏:
客户可以通过该板块输入文字与智能客服对话,在对话框内有默认设置的提问模板和提问示例,在不了解问题所属目录板块的时候,可以配合输入栏上方的快捷短语使用。技术资源&开发问题检索流程演示
目前可支持通过智能客服检索到的V系列常见客户问题数量为220条,全面覆盖八大不同板块类型,其中包含技术资源、开发文档、FAQ等内容。
V系列常见客户问题目录:
1、入门指南——7个相关词条
2、芯片规格及性能——6个相关词条
3、文档流程指引——6个相关词条
4、开发环境搭建——3个相关词条
5、SDK版本介绍——5个相关词条
6、BSP开发相关——26个相关词条
7、应用开发相关——144个相关词条- 多媒体系统——17个相关词条
- 音频相关——1个相关词条
- Camera相关——17个相关词条
- 图形系统相关——4个相关词条
- USB相关——6个相关词条
- NPU相关——20个相关词条
- 图像调试相关——12个相关词条
- 网络相关——35个相关词条
- 文件系统相关——3个相关词条
- 蓝牙相关——29个相关词条
8、系统开发相关——23个相关词条
- 系统配置——9个相关词条
- 系统调试——13个相关词条
- 休眠唤醒——1个相关词条
以下内容将为大家详细介绍在智能客服内检索目标技术资源及开发问题的步骤。
常规检索
以客户在使用V系列(V53x、V83x、V85x)Tina SDK开发环境下遇到的Camera曝光闪烁问题为例,来演示通过智能客服在客户服务平台上进行常规检索相关开发资源的流程。
步骤一: 点击在“猜你想问”设置的默认短语“V系列常见客户问题”,会弹出对应的V系列常见客户问题目录,各目录方块中的黑体字为目录名称,灰体字为该目录下的相关词条数量,点击对应词条即会弹出该词条下的相关问题;
步骤二: 这时候可以客户可以对自己遇到的问题进行分类,以本文的问题为例,Camera模块下遇到的问题应当归类到应用开发问题,点击“应用开发相关”卡片;
步骤三: 在“应用开发相关”下有10个相关的模块卡片,选择需要的“Camera相关”卡片;
步骤四: 点击后可以看到17个Camera相关的问题词条,在卡片内没有灰体字显示相关词条数量的卡片即为FAQ,选择需要的“Camera曝光闪烁排查指南”卡片;
步骤五: 点击后可以看到FAQ的相关内容,大部分FAQ会将问题的问题背景、问题表现、根本原因、解决方法、附件等内容进行详细的阐述,通过以上步骤即可正确找到所需要的FAQ。
步骤六: 点击下方的展开更多即可阅读FAQ详细内容。
以上几个步骤仅以客户视角进行开发技术问题的FAQ检索为例,同理,客户在使用智能客服的过程中,也可以通过相同的方法获取到预设在智能客服内部的其它技术资源, 例如V85x各封装型号规格差异的技术文档,V85x开源开发板的购买链接等内容。
快捷检索
若客户在遇到开发问题时,无法通过“V系列常见客户问题”下设置的默认目录来锁定问题,可以在智能客服搜索框直接输入关键词来查找相关FAQ,但该方法目前仅适用部分FAQ。还是以客户在使用V系列(V53x、V83x、V85x)Tina SDK开发环境下遇到的Camera曝光闪烁问题为例,来演示通过智能客服在客户服务平台上进行快捷检索相关FAQ的流程。
1、模糊搜索
在输入框输入关键词Camera后,在输入框上方会出现与Camera词条相关的FAQ,点击选择需要的“Camera曝光闪烁排查指南”即可。
2、固定模式检索
在输入框内有固定提问模板的提示,可以通过查看V系列常见客户问题目录的词条来实现固定模式的快捷检索,此方法适用于已熟悉智能客服目录配置的客户使用。
提问模板【V系列】+【客户问题目录词条】,提问示例:V系列入门指南
目录返回功能
在按照上一章的步骤检索到目标技术资源后,可能会出现已检索的技术资源未能解决问题或者还想继续检索一下其它技术资源的情况,那么以下就如何返回上一级目录和返回初始的V系列常见客户问题目录给出几个最快捷的方法。
FAQ末尾处返回上级目录
在每一条FAQ的末尾处都有一个“猜您可能还想了解”的菜单,菜单内会关联与该FAQ相似的其它FAQ方便客户快速检索,同时,菜单内的第一条链接也是返回上一级菜单的快捷短语。以下方图片为例,在检索到V85x系列平台各封装型号及功能对照表后,可以点击“芯片规格及性能”返回该FAQ的上级目录,或者点击其它链接跳转到对应的FAQ下。
次级目录下返回上级目录
点击每个次级目录下的最后一个方块按钮都可以快速返回上一级目录。
通过快捷短语返回初始目录
可以通过点击输入栏上方的快捷短语“回到V系列常见客户问题目录”,即可快速返回初始目录。
针对子目录较多且较为常用的“应用开发”及“系统开发”板块,智能客服也提供了通过快捷短语的返回目录的方式,点击相应的快捷短语即可返回相应目录。
全志客户服务平台网址:https://open.allwinnertech.com
-
小时候画在手腕上的表,我让他真正动了起来
小时候,我们总是充满想象力和创造力。
在那个年龄,我们没有真正的手表,但我们总是喜欢在纸上画出自己的手表,仿佛它真的能告诉我们时间。
为了弥补童年的遗憾,作者找到了一个智能手表的开源项目——NWatch,并把他移植到了R128开发板上。
项目简介
本项目基于ZakKemble的开源项目NWatch,与原作者的NWatch不一样的是,作者将其移植到DShanMCU-R128s2-DevKit开发板的同时相比于原作者添加了一些功能,比如优化屏幕刷新,使显示更流畅,以及添加蜂鸣器、旋转编码器、DHT11温湿度传感器。
硬件准备
本项目的基础用意是提供一个综合的示例进行学习参考,所以没有将所有硬件集成到一小块开发板上,而是采用面包板来实现手表功能效果,所需要用到的硬件有以下几个:
- DShanMCU-R128s2-DevKit开发板
- 0.96寸OLED(SSD1306)
- EC11旋转编码器模块
- 红外接收模块+红外遥控器
- 无源蜂鸣器模块
- DHT11温湿度模块
模块 接线 对应引脚 IIC OLED SCK PB00 SDA PB01 EC11 S1 PA24 S2 PA25 KEY PA29 蜂鸣器 BEEP DATA PA26 红外接收 IR DATA PA10 DHT11 DHT11 DATA PA6 软件系统
手表上的所有功能都伴有动画效果。
原作者对软件系统的代码花费了大量时间进行优化渲染,优化的内容就包括了将位图图像从闪存复制到RAM中的帧缓冲区,并通过 SPI 将帧缓冲区发送到 OLED,最终使得手表能够在几乎所有区域的显示中可以保持100+FPS。
一些主要的动画内容:
1.进入和退出睡眠模式时的 CRT 动画(类似于某些 Android 智能手机具有的 CRT 动画)。
2.主要时间数字切换时具有动画效果。
3.菜单有一个向左/向右滚动的动画,选择一个选项将会有当前菜单从屏幕上掉下来的动画效果。二次开发
打开以下文件进行修改:
R128-S2-SDK/board/r128s2/pro/configs/sys_config.fex
IIC引脚配置:
[twi1] twi1_sck = port:PB00<3><1><default><default> twi1_sda = port:PB01<3><1><default><default>
PWM配置:
[pwm6] pwm_used = 1 pwm_positive = port:PA26<4><0><2><default>
接下来添加100ask_r128_demos,首先clone仓库或者下载仓库压缩包到本地,并将仓库目录放在sdk的这个目录下面:
R128-S2-SDK/lichee/rtos-components/thirdparty/100ask_r128_demos
打开文件进行编辑
R128-S2-SDK/lichee/rtos-components/thirdparty/Makefile
在文件的最后面或最前一行加入下面的内容:
obj-$(CONFIG_COMPONENTS_100ASK_R128_DEMOS) += 100ask_r128_demos/
打开文件进行编辑
R128-S2-SDK/lichee/rtos-components/thirdparty/Kconfig
在文件的最后或最前一行加入下面的内容:
source components/common/thirdparty/100ask_r128_demos/Kconfig
源码获取
基于R128-S2设计的全套开发板已上线淘宝百问网韦东山老师个人店进行售卖,包含黑色的DshanMCU-R128s2-R16N16模组和全套的DshanMCU-R128s2-DEVKIT。
- DshanMCU-R128s2-R16N16模组:39.9元
- DshanMCU-R128s2-DEVKIT开发板:59.9元
R128开发板购买链接:https://m.tb.cn/h.5T4uATe?tk=S079W0vCt6v
Gitee源码获取链接:
https://gitee.com/weidongshan/100ask_r128_demos/tree/master/nwatch
GitHub源码获取链接:
https://github.com/100askTeam/100ask_r128_demos/tree/master/nwatch
如果你不想自己编译或者不需要二次开发,那么可以从下方获取固件:
Gitee处Releases获取:
https://gitee.com/weidongshan/100ask_r128_demos/releases/tag/v0.0.1
GitHub处Releases获取:
https://github.com/100askTeam/100ask_r128_demos/releases/tag/v0.0.1
烧写固件到DShanMCU-R128s2-DevKit在新窗口打开后开机会自动启动NWatch任务,如果没有自动启动在串口终端输入命令然后按回车即可nwatch_100ask 3。
更多关于项目的详情可以前往百问网R128综合项目开发案例界面了解。
-
【FAQ】全志R128芯片 如何解决打包时出现的ERROR: update_mbr failed?
打包出现:ERROR: update_mbr failed
24993+0 records in 24993+0 records out 6398208 bytes (6.4 MB) copied, 0.0271082 s, 236 MB/s ERROR: dl file rtos_riscv.fex size too large ERROR: filename = rtos_riscv.fex ERROR: dl_file_size = 1579 sector ERROR: part_size = 1000 sector ERROR: update mbr file fail ERROR: update_mbr failed
这是因为 rtos_riscv.fex 太大了,分区容量设置过小。
解决方法
- 确定打包使用的分区表
运行打包命令,找到打包使用发分区表。例如这里使用的是
sys_partition_xip.fex
- 编辑分区表
使用
cconfigs
命令进入目录,找到打包使用的分区表,编辑修改- 找到上面报错的行,修改
size
选项,单位是扇区。对于 NOR 方案请对齐。这里我们修改到7000
- 重新打包,正常通过
-
【开发板试用】新一期的全志XR806开发板免费试用,支持FreeRTOS+Openharmony
开发板数量:全志XR806开发板50块
申请方式:极术社区在线填表 aijishu.com/e/1120000000426896
系统推荐:FreeRTOS,全志在线免签NDA下载 https://xr806.docs.aw-ol.com/rtos/env/
活动时间:申请截止9.22,试用截止10.31
全志XR806开发板是一款基于XR806芯片设计,高度集成WiFi/BLE/常用外设,可供开发者进行方案评估、DIY或小规模产品研发,可广泛应用于智能家居、智能楼宇、智能城市和工业互联等领域。
-
兼容802.11b/g/n,集成TCP/IP协议栈及WLAN协议栈、支持完整网络服务协议
-
支持BLE 5.0,支持完整低功耗蓝牙服务GATT,SIG mesh完整协议栈
-
内置低功耗PMU,支持智能低功耗管理系统,多级唤醒源设置;支持WiFi超低功耗保活,广泛应用各类低功耗应用场景
-
丰富的io接口,板载15个可编程GPIO,支持常用外接接口,如SPI/UART/I2C/PWM/ADC/IrDA TX/RX
-
全安全架构,TrustZone/安全总线/安全Memory/安全eFuse/安全启动/安全Debug接口/Flash实时加解密
试用要求
在收到开发板一个月内,参与试用的开发者需要在极术社区或全志在线开发者社区发布基于XR806的应用文章(不包含开箱体验及基础烧录,点灯类体验文章),完成发文任务的极术社区会邮寄相应礼品,标题请以【XR806开发板试用】+自主标题命题。
优秀案例
FreeRTOS软件入门
XR806 是一颗高集成度无线应用MCU,其集成了ARMv8-M 内核、IEEE 802.11b/g/n Wi-Fi 子系统、BLE 5.0子系统、电源管理系统、高级别的安全系统以及丰富的外设接口,具有优秀的射频性能、稳定性、可靠性和超低功耗。
芯之联软件开发平台,具有丰富的组件和灵活的应用框架,可满足用户对Wi-Fi、BLE、低功耗、安全等多方面的需求,可协助用户快速开发智能产品应用,包括物联网(IoT)、智能家居、云连接等。
芯之联软件开发平台,具有丰富的组件和灵活的应用框架,可满足用户对Wi-Fi、BLE、低功耗、安全等多方面的需求,可协助用户快速开发智能产品应用,包括物联网(IoT)、智能家居、云连接等。
-
-
米尔T113-S3核心板,更适合工业HMI的智能方案
随着工业4.0的快速推进,人机交互应用的覆盖面也越来越广泛。像3D打印行业会专门为3D打印机配备上智能化的操作屏幕,汽车仪表盘和中控盘也开始往智能平板的方向发展,传统的工业HMI面板也在寻求升级转型。
为了更好的满足工业行业在生产操作过程中进行简单的编程和处理输入数据等智能化操作,满足企业对高清化、集成化和智能化交互需求,以入门级HMI方案为例,目前市场多以MCU+RGB屏+电阻触摸屏构成,米尔给出的T113方案相对MCU方案可以带来更多优势。
米尔T113-S3核心板MYC-YT113X采用6层PCB设计,将Nand Flash/eMMC、EEPROM、DC/DC电路集成在了大小为37mm×39mm开发板上。核心板与底板之间通过SMD焊接,引脚使用邮票孔封装,一共有140Pin。
图片
图片
MYC-YT113X核心板与该核心板配套的底板引出了大量的功能接口,几乎满足了T113-S3的所有功能需求。底板采用12V/2A直流供电,搭载了千兆以太网接口、1路USB2.0协议M.2 B型插座的5G/4G模块接口、板载1路USB2.0协议的WIFI模块、1路单通道LVDS显示接口、1路双通道LVDS显示接口、1路音频输入输出接口、2路USB HOST Type A、1路USB OTG Type-C接口、1路USB debug Type-C接口、1路Micro SD接口、1路兼容树莓派扩展接口。‘
米尔基于全志T113-S3设计的核心板,它的特色在于不仅限于性价比高,还在打破零售核心板100元界限的同时,具有双核Cortex-A7+HiFi4 DSP多核异构工业级处理器。此外,米尔T113-S3核心板的最低零售价仅79元,还分为Nand Flash和eMMC两种存储方式售卖:
256MB Nand Flash配置:79元
4GB eMMC配置:99元
购买开发板时米尔还会提供与开发板配套的Linux BSP源码以及丰富的软件开发手册。
更多关于开发板的详细信息可以前往【全志在线官网-应用方案】栏目:
https://www.aw-ol.com/solutions/9 -
小米机器狗二代来了,比上一代更瘦、更快、更强!NVIDIA主控+全志MR813+全志R329协处理器
能看、能听、能感知,CyberDog2确实如雷军所调侃的那样,它比从前“更狗了”。
在刚刚结束的秋季新品发布会上,小米发布了最新的仿生四足机器人CyberDog2,虽然没有在发布会现场进行实物展示,但通过预录制的演示视频,我们可以清楚地看到CyberDog2在增加了一款协处理器的情况下,可以完成更复杂的连续后空翻运动,更智能的识别以及追踪,更强烈的语音智能交互等上一代所不具备的功能。
作为时隔两年再次面世的迭代产品,采用了杜宾犬形态设计的CyberDog2无论是从外观形态、运动能力还是与用户的交互上来看,都较第一代更接近大家平时家养的宠物狗。它从内到外全面进化,支持手势互动,语音控制,人脸识别,AIoT 联动,融合跟随避障。还包含 12 个 CyberGear 微电机,AI 自研平衡动态算法,AI 多模态融合感知决策系统。
CyberDog2不仅保留了NVIDIA主控+全志MR813协处理器的组合,为了增强CyberDog2的人机交互体验,还新增加了在智能音箱市场被广泛使用的全志R329作为“小脑”来使用。
更智能
CyberDog2的主控Jetson Xavier NX核心模块是一台用于嵌入式和边缘系统的 AI 超级计算机,在常规功率下拥有21Tops的算力,2个 NVDLA 引擎深度学习加速器、7路VLIW视觉处理器,其性能已经初步具备了L3级别自动驾驶的算力需求。较高的算力足以支持复杂的智能交互,保证了CyberDog2可以毫无障碍地处理从传感器系统捕获的大量数据,使其能够更精准地进行机器狗的避障及路径选择。
我们所能看到的CyberDog2所可以做到的像地图构建、路径导航、紧急避障、路径规划、目标跟踪、连续后空翻等多项高仿真、高难度动作,除了有“大脑”完成的精确数据处理,也离不开CyberDog2身上所带有的传感器提供的有效保障。
更精准
相较于初代的四足机器人,CyberDog2的传感器数量从11组增加到了19组,除了Intel Realsense D450深度摄像头、TOF传感器、GPS模组等,还增加了激光雷达、UWB传感器等部件来组成新一代的融合感知系统。
得益于核心部件的升级,现如今的扫地机器人已经具备结构光、3D Tof、AI识别等多种组合避障方式,这些避障方式都与广泛使用在扫地机上的TG30激光雷达息息相关。‘’
扫地机器人身上这么多复杂的运动功能,全都交由CyberDog2的协处理器全志MR813进行控制。
MR813已经在扫地机器人产品上被小米、石头、追觅等知名厂商广泛应用,作为市面上主流的扫地机主控方案。作为CyberDog2的协处理器,MR813主要负责MPC算法的执行、运动控制、电源系统管理和OTA系统管理等工作,像运动平衡、倒地恢复等功能都由MR813在接收指令后去驱动机器狗身上的12个CyberGear微电机做出高精度的动作响应。
更强大
电机,就是将电压信号转化为转矩和转速,从而可以像赛车的马达一样驱动控制对象,是伺服系统的重要组成部分。一般来讲,电机越多,机器人的自由度就越高。搭载了12个CyberGear的CyberDog2就有12个四肢自由度,奔跑速度可以达到1.6m/s。
单个CyberGear的持续扭矩达到4N.m,峰值扭矩更是达到12N.m,而带有12个CyberGear的CyberDog2峰值扭矩可以达到37.85N.m,这个数值可以驱动整机重量约9KG的CyberDog2完成更加复杂的扭屁股、太空步和芭蕾舞步这样的动作。
CyberGear诞生的由来也带有一点喜剧色彩。雷军在发布会提到,此前有公司买CyberDog只是专门为了拆里面的微电机。因此随着CyberDog 2的发售,小米也发布了自研的CyberGear微电机,并单独将CyberGear微电机面向行业开售,而擅长交朋友的雷总也是给单个CyberGear微电机定价 499 元。
更仿生
除了在尺寸和重量方面的改变,CyberDog 2还实现了更仿生的手势互动、语音控制、人脸识别,并增加了与小爱音箱Play增强版相同的红外发射模组,化身智能的家庭管家,可以配合上语音交互来控制家电,实现AIoT 联动等智能交互方面的功能提升,做到了能看、能听、能感知,实现了从内到外的全面进化。
在对着机器狗做出特定的动作的时候,例如用手掌向左或向右平行移动,机器狗就会往相应的方向移动;在通过语音词唤醒机器狗的时候,机器狗头部会发出蓝色的呼吸灯,代表它已经在等待你的下一步指示。
不难看出,除了手机相机团队带来的动作识别功能,语音交互的功能其实来自于小爱同学智能音箱的赋能,CyberDog2的另一块协处理器就是被小爱同学、天猫精灵、小度等智能音箱广泛使用的全志R329。
雷军在发布会上表示,“推出CyberDog 2是为了推动行业快速发展,让科技更好地服务于人类”。高度开源是CyberDog平台的核心竞争力,目前已有包括清华大学、中科大等116家科研机构和高校参与了第一代CyberDog的452个研究项目,并发布了例如XR及数字孪生技术在混合显示环境中的融合应用,小米与高校或科研机构共同的目标就是希望机器人能够早日实现独立自主的操作,服务于日常生活。
CyberDog2在一代的基础上,创新性地开放了图形化编程界面,开放了超过100个功能接口,并开源了视觉算法和机器狗的图纸,为广大开发者提供了仿生四足机器人的底层开发平台。
但就目前来看,CyberDog平台还不适合普通用户日常使用,此次超过100个的功能接口的高度开源开放,是小米为了邀请更多的开发者加入共创项目,共同推动机器人产业的整体发展。
-
花费400元,DIY了一台A133平板电脑
项目作者:flyn
简介:DIY爱好者,在立创开源平台开源了个人的DIY项目4G手机MiniPhone以及焊接工具焊台、恒温加热台和多功能控制台。
这是一款基于全志A133处理器DIY的平板电脑,可运行android和linux系统。平板搭载一块7寸1024X600分辨率的触摸液晶屏以及3000mAh的电池,且内置双频wifi6/BT5.2通信模块,运行内存2GB,内置32GeMMC,可以外接TF卡。
本项目DIY成本共447.3元,花费清单如下:
硬件设计
平板的PCB设计遵循嘉立创4层板免费打样规则,采用了3313层压,1.2mm厚度,线宽线距3.5mil,过孔0.3/0.4,尺寸控制到10x10以内。
元件基本都设计在PCB的正面,可以方便手焊或者是贴片加工,背面是显示屏的fpc连接座,平板元器件参数如下:
- 尺寸:173x109x15mm
- 屏幕:7寸,1024x600分辨率
- 处理器:Allwinner A133 4核Cortex A53
- 内存:2G LPDDR3
- 存储:32G EMMC,可外扩TF卡
- 电池:3.7V 3000mAh锂电池
- 操作系统:Android 10
- WIFI:双频WiFi6
- 蓝牙:BT5.2
- 音频接口:3.5mm耳机接口
- 数据接口:USB2.0x1,USB OTGx1
- 充电接口:Type-C口
布线设计
为了能够在嘉立创免费打板,PCB采用了4层板的设计,而A133是没有内置DDR的,所以如何将A133扇出和DDR走线设计将是PCB设计中的两个难点。
A133封装是0.5pitch的BGA,需要扇出走3.5mil线宽线距,为了方便走线,有部分焊盘改成椭圆形,DDR尽量走3W,而且免费层压结构最接近的是3313结构,走50阻抗要求线宽6.16mil,4mil的话在阻抗上有偏差。
综上所述,层压设计为信号层-GND层-VCC层-信号层,DDR布线区域为信号-GND-信号-VCC。注意VCC-CPU和VCC-SYS等这些大电流的电压走线,要尽量粗和短,换层连接处多打过孔。
布线前最好能找到一些官方的硬件设计指南资料之类的,有助于避坑确保一板过,本项目就参考了Whycan哇酷开发者社区和全志在线开发者社区内的一些设计资料。
固件及测试
设计的初衷是做一个可以正常使用的平板,并且可以用来学习linux,故本次项目无需编写太多代码,直接烧入从论坛获取的其它平板的镜像文件即可使用。
拿到焊了部分元件的PCB板后,可以先通过DragonHD软件进行DDR测试。
验证开发板无问题后,可以使用PhoenixCard软件,将镜像文件烧入到TF卡中来启动,此时内置的EMMC尚未使用。
PCB在硬件上也是接出了调试口以及部分外设的GPIO,可以用来扩展模块学习。可用来调试和查看信息,Jtag口目前未使用,串口引脚如下图所示:
设置波特率115200即可通讯,接口因为尺寸原因用的是1.27间距的排座,后面有设计转接板转成2.54间距的插针,方便调试和使用。
外壳设计及组装
考虑到成本,也为了适应不同需求设计,外壳采用3D打印,且分为:外框、中间层、背板三部分。
- 外框采用PLA,具有较高的硬度;
- 中间层采用X树脂,SLA光敏树脂材料成本低;
- 背板如有散热要求可以用铝型材cnc,可直接贴在处理器和ddr上,想要低成本可以选择PLA或者SLA。
中间层扣在外框上作为PCB和显示屏的固定支架,觉得扣不牢的可以选择小螺丝继续固定。显示屏是直接卡在外框上的,背面和四周可以用双面胶粘住,注意装好后很难拆下来。请保证屏没有问题后再安装,这样设计的目的是让屏幕和外框齐平(建议外框颜色选择黑色和屏幕比较搭)。
平板结构比较简单,可以参考以下方式安装:
- 先将中间层卡在外框上,再将PCB板固定在中间层。
- 接好液晶屏的fpc排线,将液晶屏背面贴好双面胶后扣进外框。
- 连接好电池、扬声器、天线等并固定。
- 盖上后盖,拧紧螺丝。
使用体验
资料获取
本项目所有资料均已开源,需要【电路+代码+视频演示】源文件,并且想要自己DIY平板学习的伙伴,请戳文末的“阅读原文”获取。
-
ClockWork - GameShell,组装起了万千极客的童年
对于热衷于复古游戏及开源掌机的极客玩家来说,开源硬件的普及,让更多极客可以有机会体验到亲手DIY掌机的乐趣,属于开源掌机的圈子也由此应运而生。
由一群复古游戏爱好者组成的Clockwork团队希望更进一步拓展开源掌机的拓展性和自定义性,推出了一款可以自行组装的模块化掌机——GameShell,该掌机一经发布,就在众筹网站上赢得了来自全球60多个国家和地区的极客爱好者超过30万美元的支持。
GameShell证明了复古的游戏掌机依然有广阔的市场,但事实上,GameShell并非传统意义上的游戏掌机。
模块化是GameShell最大的特点,它的每个部分都是独立并且可以自由搭配,而除此之外,它还是一个基于Linux的开源终端设备,你可以将它视作一款可编程的便携设备,也可以通过学习简单的编程来制作属于自己的游戏,它将发挥多大的功能,完全取决于极客爱好者的脑洞有多大。
可组装的模块化设计
GameShell的颜值很高,并且贴心的配置了白、黄、红三种配色,在造型上也参考了GBC的经典设计。与购买其它掌机产品不同,你与GameShell的第一次见面并不是它的完整体,而是像高达那样零散的部件,还需要你自己动手将它组装起来。
不同于乐高或者高达的拼装,GameShell的拼装没有复杂的拼接技巧以及严格的组装规则,拼装的说明书也十分简洁,且附带了为DIY极客提供的个性化开源3D打印模型文件和硬件原理图,套装里的实物部件则包含有主板、键盘、声音、显示、电池、外壳等掌机必要的模块,具体参数型号如下:
- ClockworkPi V3.1开发板,采用全志R16-J芯片为主控;
- ATmega168p可编程键盘;
- 320×240的2.7寸的RGB屏,最高支持60fps显示;
- 用来扩展L1、L2,R1、R2甚至更多按键的Lightkey 按键;
- 双扬声器;
- 1200mAh的可充电锂电池;
- 前后外壳;
- 32GB MicroSD卡;
- 其它必要的线材;
整体拼装并不复杂,只需要稍微注意以下部件之间的拼接,否则可能会导致线材链接的时候出现问题要重新来过,也可以按照拼装指南一步一步保证万无一失。
除了在外观设计上参考了GBC,在按键设计上也参考了任天堂红白机手柄的经典设计。从这台掌机的按钮上可以看到一些经典元素的结构,十字键和上方四个长方形按钮的设计,是任天堂第一代主机FC上手柄的方向键,有趣的是,任天堂红白机和GameShell都是使用的全志R16芯片作为主控。
组装好之后的机身后背的Lightkey略显突兀,有点破坏了掌机整体的美感。当然如果平时玩游戏时并不需要使用到额外的按键,也可以把它单独拆卸下来,这样并不会影响其它功能的使用,这也是模块化的优势所在,拆装自如,甚至还可以自己开发一些模块组装在一起。
模拟器及开源游戏引擎
GameShell在出厂时就自带了支持4.1x版本的Linux内核的Clockworkpi OS,并内置了一些基础的游戏,组装好之后可以直接使用或者通过Clockworkpi OS来DIY一款属于自己的游戏。
Clockworkpi OS与平时常见的安卓系统类似,在设置界面可以看到飞行模式、WIFI、音量、背景亮度、语言等设置内容。除此之外,Clockworkpi OS内置了PICO-8、TIC-80、Love2D 等各种可编程虚拟游戏平台,还支持包括 C、C++、Python、JAVA 等各种主流语言及脚本,极客爱好者可以轻易移植或创建各种自己梦想中的独立游戏和应用程序。
此外,GameShell还支持自行编写指令,单独调用Retroarch中的模拟器,可在线下载Bios,并可以自己更新模拟器版本,以在PS1中的运行一些经典的复古游戏为例,表现完美,画面、声音很流畅,基本不会出现问题,其他开源掌机模拟器GameBoy、NES等系列也可以支持,不过部分PGM街机需要超频才能流畅游玩。
拓展功能
开源掌机的最大魅力在于玩家可以按照自己的意愿随意定制自己的设备及系统。
在GameShell顶端有3.5mm耳机插口、mini HDMI插口以及Micro USB插口与开关键,而如果要进行文件传输,还支持AirPlay、Wifi、Tiny Cloud、Micro-USB等途径,有了这些资源接口的帮助,就可以轻松实现类似MP3/MP4甚至是一台小型电脑的功能。
GameShell本身由于硬件限制所以系统并没有自带播放器,有开发者大佬就在掌机上加入了Kodi播放器的安装教程,有了它就可以在掌机上实现流媒体播放,可以看电视听广播。
还有一位《clockwork-gameshell-开源掌机分享群》里的大佬将黄金矿工通过love2d移植出来到了GameShell上可以游玩,并无偿开源给每一位开发者使用。
对于一些极客爱好者来说,能够在如此小巧的设备上实现视频播放功能,无疑是一种挑战和成就感。除了影音功能,GameShell的最大亮点在于它是一款开源的个人电脑。它搭载了Linux操作系统,用户可以自由地定制和开发自己的游戏和应用程序。这为喜欢探索和创造的人提供了一个无限的创作空间,无论是开发游戏、编写代码还是设计应用程序,GameShell都可以满足用户的需求。
-
Reply: 全志在线开源芯片 新 SDK 平台下载方法汇总
XR806 SDK 拉取
以
xr806_sdk
为例,讲述如何拉取 SDK。新建文件夹保存 SDK
使用
mkdir
命令新建文件夹,保存之后需要拉取的 SDK,然后cd
进入到刚才新建的文件夹中。$ mkdir xr806_sdk $ cd xr806_sdk
初始化 Repo 仓库
使用
repo init
命令初始化仓库,Tina-MR813-OPEN
的仓库地址是https://sdk.aw-ol.com/git_repo/XR806/manifest.git
需要执行命令:$ repo init -u https://sdk.aw-ol.com/git_repo/XR806/manifest.git -b master -m xr806_sdk.xml
如果提示
Username for 'https://sdk.aw-ol.com':
请输入 全志在线开发者论坛 的用户名和密码。(注:需要全志在线开发者论坛LV2等级以上用户才有权限拉取 SDK)拉取 SDK
使用命令
repo sync
拉取 SDK$ repo sync
由于 SDK 普遍较大,拉取可能需要一定的时间。
创建开发环境
使用命令
repo start
创建开发环境分支$ repo start xr806_sdk --all
至此,SDK 获取完毕。
-
Reply: 全志在线开源芯片 新 SDK 平台下载方法汇总
MR813 SDK 拉取
以
Tina-MR813-OPEN
为例,讲述如何拉取 SDK。新建文件夹保存 SDK
使用
mkdir
命令新建文件夹,保存之后需要拉取的 SDK,然后cd
进入到刚才新建的文件夹中。$ mkdir Tina-MR813-OPEN $ cd Tina-MR813-OPEN
初始化 Repo 仓库
使用
repo init
命令初始化仓库,Tina-MR813-OPEN
的仓库地址是https://sdk.aw-ol.com/git_repo/MR813_Tina_OPEN/manifest.git
需要执行命令:$ repo init -u https://sdk.aw-ol.com/git_repo/MR813_Tina_OPEN/manifest.git -b master -m Tina-MR813-OPEN.xml
如果提示
Username for 'https://sdk.aw-ol.com':
请输入 全志在线开发者论坛 的用户名和密码。(注:需要全志在线开发者论坛LV2等级以上用户才有权限拉取 SDK)拉取 SDK
使用命令
repo sync
拉取 SDK$ repo sync
由于 SDK 普遍较大,拉取可能需要一定的时间。
创建开发环境
使用命令
repo start
创建开发环境分支$ repo start smartx-mr813-tina-v1.1 --all
至此,SDK 获取完毕。
-
Reply: 全志在线开源芯片 新 SDK 平台下载方法汇总
R329 SDK 拉取
以
R329-Tina-jishu
为例,讲述如何拉取 SDK。新建文件夹保存 SDK
使用
mkdir
命令新建文件夹,保存之后需要拉取的 SDK,然后cd
进入到刚才新建的文件夹中。$ mkdir R329-Tina-jishu $ cd R329-Tina-jishu
初始化 Repo 仓库
使用
repo init
命令初始化仓库,R329-Tina-jishu
的仓库地址是https://sdk.aw-ol.com/git_repo/R329_Tina_jishu/manifest.git
需要执行命令:$ repo init -u https://sdk.aw-ol.com/git_repo/R329_Tina_jishu/manifest.git -b master -m R329-Tina-jishu.xml
如果提示
Username for 'https://sdk.aw-ol.com':
请输入 全志在线开发者论坛 的用户名和密码。(注:需要全志在线开发者论坛LV2等级以上用户才有权限拉取 SDK)拉取 SDK
使用命令
repo sync
拉取 SDK$ repo sync
由于 SDK 普遍较大,拉取可能需要一定的时间。
创建开发环境
使用命令
repo start
创建开发环境分支$ repo start smartx-r329-tina-jishu --all
至此,SDK 获取完毕。
-
Reply: 全志在线开源芯片 新 SDK 平台下载方法汇总
V853 SDK 拉取
以
tina-v853-open
为例,讲述如何拉取 SDK。新建文件夹保存 SDK
使用
mkdir
命令新建文件夹,保存之后需要拉取的 SDK,然后cd
进入到刚才新建的文件夹中。$ mkdir tina-v853-open $ cd tina-v853-open
初始化 Repo 仓库
使用
repo init
命令初始化仓库,tina-d1-h
的仓库地址是https://sdk.aw-ol.com/git_repo/V853Tina_Open/manifest.git
需要执行命令:$ repo init -u https://sdk.aw-ol.com/git_repo/V853Tina_Open/manifest.git -b master -m tina-v853-open.xml
如果提示
Username for 'https://sdk.aw-ol.com':
请输入 全志在线开发者论坛 的用户名和密码。(注:需要全志在线开发者论坛LV2等级以上用户才有权限拉取 SDK)LV2 升级需要 49积分,获取积分方法如下:
① 1次主题帖发布(发帖):50积分
② 1次有效回帖:25积分
③ 1次点赞:6积分
④ 每日登录:6积分拉取 SDK
使用命令
repo sync
拉取 SDK$ repo sync
由于 SDK 普遍较大,拉取可能需要一定的时间。
创建开发环境
使用命令
repo start
创建开发环境分支$ repo start devboard-v853-tina-for-awol --all
至此,SDK 获取完毕。
通过此方式下载的V853 SDK在打上补丁后同样适用于V851s/V851se
具体实现方式步骤可以参考:https://bbs.aw-ol.com/topic/2513/
-
Reply: 全志在线开源芯片 新 SDK 平台下载方法汇总
D1-H/D1s SDK 拉取
以
tina-d1-h
为例,讲述如何拉取 SDK。新建文件夹保存 SDK
使用
mkdir
命令新建文件夹,保存之后需要拉取的 SDK,然后cd
进入到刚才新建的文件夹中。$ mkdir tina-d1-h $ cd tina-d1-h
初始化 Repo 仓库
使用
repo init
命令初始化仓库,tina-d1-h
的仓库地址是https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git
需要执行命令:$ repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git -b master -m tina-d1-h.xml
如果提示
Username for 'https://sdk.aw-ol.com':
请输入 全志在线开发者论坛 的用户名和密码。(注:需要全志在线开发者论坛LV2等级以上用户才有权限拉取 SDK)拉取 SDK
使用命令
repo sync
拉取 SDK$ repo sync
由于 SDK 普遍较大,拉取可能需要一定的时间。
创建开发环境
使用命令
repo start
创建开发环境分支$ repo start product-smartx-d1-h-tina-stable-v2.0 --all
至此,SDK 获取完毕。
一个补丁,让D1-H的SDK支持T113芯片:https://bbs.aw-ol.com/topic/2027/
一个补丁,让D1-H的SDK支持T113芯片:https://bbs.aw-ol.com/topic/2027/
一个补丁,让D1-H的SDK支持T113芯片:https://bbs.aw-ol.com/topic/2027/
-
全志在线开源芯片 新 SDK 平台下载方法汇总
1、新 SDK 平台下载 D1-H/D1s SDK(附打补丁,让D1-H的SDK支持T113芯片方法教程)
2、新 SDK 平台下载 V853 SDK
3、新 SDK 平台下载 R329 SDK
4、新 SDK 平台下载 MR813 SDK
5、新 SDK 平台下载 XR806 SDK
注意!!!
注意!!!
在拉取任意一种SDK前,都需要【达到2级】且需要【先配置安装 Repo 工具】!!!
-> -> ->论坛升级LV2获取下载权限专用水帖 LV2 UPUPUP <- <- <- 回复该贴【两条】评论后请耐心等待管理员审核
GIT配置具体步骤如下
SDK 使用 Repo 工具管理,拉取 SDK 需要配置安装 Repo 工具。
Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workflow. Repo is not meant to replace Git, only to make it easier to work with Git. The repo command is an executable Python script that you can put anywhere in your path.
Repo官网:git-repo
安装 Repo 工具
可以用包管理器进行安装:
# Debian/Ubuntu. $ sudo apt-get install repo # Gentoo. $ sudo emerge dev-vcs/repo
也可以手动单独安装:
$ mkdir -p ~/.bin $ PATH="${HOME}/.bin:${PATH}" $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo $ chmod a+rx ~/.bin/repo
国内镜像源安装:
$ mkdir -p ~/.bin $ PATH="${HOME}/.bin:${PATH}" $ curl https://mirrors.bfsu.edu.cn/git/git-repo > ~/.bin/repo $ chmod a+rx ~/.bin/repo
由于谷歌服务器位于国外,每次运行时Repo会检查更新导致下载较慢,国内用户可以配置镜像源。否则会像下图一样卡住不动然后失败。
更换镜像源
Repo 的运行过程中会尝试访问官方的 git 源更新自己,更换镜像源可以提高下载速度。将如下内容复制到你的
~/.bashrc
里$ echo export REPO_URL='https://mirrors.bfsu.edu.cn/git/git-repo' >> ~/.bashrc $ source ~/.bashrc
如果您使用的是 dash、hash、 zsh 等 shell,请参照 shell 的文档配置。
配置保存身份认证
新版本 git 默认加强了安全性,身份认证不会保存,导致拉取 repo 需要多次输入密码,可以用下列命令配置:
git config --global credential.helper store
常见问题
-
卡在
Downloading Repo source from https://gerrit.googlesource.com/git-repo
不动。- 国内网络较慢,参照上面的更换镜像源解决。
-
配置保存身份认证无效不启用
- 检查是否运行了
sudo git config --global credential.helper store
使用了sudo
后保存的信息会存储到root
用户下并非当前用户。
- 检查是否运行了
-
出现错误
fatal: cannot make directory: File exists
- 之前拉取了 repo 但是不完整,需要删除
.repo
文件夹重新拉取
- 之前拉取了 repo 但是不完整,需要删除
-
-
请叫我电源管理大师!3块钱就能做一个AXP202电源管理模块
项目作者:mondraker
2022年度立创开源达人,也是一名刚刚本科毕业的自动化专业的大学生,在立创开源了“电源模块”和“雪花的专栏”两个工程专辑,愿望是持续给大家带来实用,好用和酷炫的开源作品。
本项目是来自立创开源平台的开源作品《AXP202【DIY设备电源管理迈入新时代】》,该开发板基于AXP173电源管理模块的升级版——AXP202芯片进行开发,方便开发者彻底摆脱苦苦寻找定制芯片的烦恼。该模块资料齐全,并且通过全功能验证,更重要的是具有超凡性价比,货源充足。
项目简介
该项目已经过长期验证,提供封装,3D文件等等,资料充足(包含IDF例程以及Arduino例程,中英文手册),并且这个邮票孔模组还可以在嘉立创免费下单打样,在打板的时候不选半孔工艺,收到板子后再手磨一下就可以使用了。
由于芯片功能繁多,本文将分为功能、硬件、软件以及相关资源链接四大部分进行开发板设计原理到使用场景的全方位介绍。
功能设计
在硬件设计时,电源部分一直是万事开头、重中之重。我发现在大家平时的制作里经常讨论的核心问题就是:
- 电源怎么设计
- 求一个体积小的LDO
- 求一个效率高的DCDC
- 求一个电池充电芯片
- 哪里有便宜的电源芯片
还有很多开发者经常遇到的问题:
- 外部输入电源和电池怎么实现高效可靠的电源通路管理
- 怎么实现长按开关机
- 怎么精确的检测电池电量
- 怎么获取电源实时状态
- 低功耗怎么办
有一个芯片——AXP202,他可以实现上述的所有功能,并且体积小、效率高、功耗低、价格香!
如果你还需要5V输出,那么使用模块IPSOUT脚+DCDC5V的buck电路即可轻松实现,输出能力取决于外部供电的输入能力,且芯片专门有一个EXTEN脚控制外部DCDC芯片的EN脚,节省NCU的功能引脚,太香了。
硬件设计
AXP202模组做成邮票孔模块类型可以方便大家直接使用,因为这种芯片外围的阻容设计都有一些故事。
为方便PCB电路板的设计与焊接,增加成功率,本设计采用模块化思想,将AXP202外围电路封装为一个邮票孔模块焊接在主板上,将可用户自定义的管脚全部引出,这样就可以方便的在主板上使用相应阻值的电阻来配置这些引脚。
为统一封装,本次设计使用了标准2.54mm间距LCC邮票孔,便于焊接,使用了4层PCB设计用以缩小封装体积,引出全部必要的功能。
开发板引出了所有的功能,芯片外部可设置的一些引脚可以使用跳帽设置,并且加入了一个5V的DCDC升压,用以基本测试,地线引出较少,可以自己酌情添加,或者根据要使用的主控芯片自己绘制一个测试板。
相较于普通的I2C模块,电源管理模块还要给主控芯片提供电源,除此之外,AXP202必须在开机状态下,一定要共地,否则两者之间是无法正常通信的。
本模块P2P兼容AXP209电源管理芯片,程序也兼容,只是AXP209比AXP202多了一个OTP解码器,代码中操作寄存器即可。
打板说明
下单打1mm(下面图是1.6mm的非常厚,仅用以演示),选择四层板,不需要半孔工艺,打板寄回来之后是卷边的,需要先用镊子把半孔里多余的铜抠出来,然后用800目左右砂纸磨掉就可以正常使用了。
软件部分
AXP20x库以及Arduino相关例程,均来自于Lewis He大佬,感谢大佬的开源(开源协议:MIT)
后续自己的例程都将围绕该库编写,自己添加了其它一些常用的寄存器与功能,比如LED指示灯的充电控制等等,以后的修改将同步更新至GitHub/Gitee。
- 该库同时兼容AXP173/192/202等
- 基本实现了芯片所有的功能
- 代码中有相关功能注释,可以配合官方寄存器文档进行学习与编写
- 代码中使用独立的I2C接口进行编写,移植至其他平台只需要写一个接口库即可,非常方便
本项目所有资料均已开源,想获取资料自己DIY学习的伙伴,https://oshwhub.com/mondraker/axp202-zeng-ge-yan-zheng
-
BliKVM v4,基于芒果派H616的KVM解决方案,开箱、连接,使用手把手演示视频
BLIKVM 是一款开源 KVM over IP 软件,可帮助您远程管理服务器或工作站,无论目标系统的健康状况如何,目前可与 Raspberry Pi CM4 硬件、Raspberry Pi HAT 或 PCIe 板配合使用。
还有一种更紧凑、可能更便宜的型号正在开发中,该型号会适配Mango Pi 的最小模组mCore-H616。
-
Reply: 才发现根文件系统里没有vi,还有其他办法编辑文本吗?
@zznzzn 除了vi、vim,sed也可以操作文件读、写、删、替换等操作;也使用echo命令和cat命令将内容输出文件并查看内容。
-
【开源硬件】全志芯片系列优秀开源工程分享第三期
“全志芯片合集”
正式上线立创开源硬件平台
涵盖多系列全志芯片
开源智能家居、游戏掌机等
多个领域的开源应用工程
. . . . . .
Yuzuki Chameleon卡片电脑
Yuzuki Chameleon 变色龙,基于全志 H616 的树莓派A版型开发板,板载风扇槽,散热器固定孔,可以当机顶盒或者卡片电脑使用。
开发板板载4个USB Type C 接口,分别为3个HOST和一个OTG,支持USB摄像头与采集卡输入。H616支持HDMI显示,板载一个 HDMI接口;同时板载XR829 蓝牙/WIFI模组和引出RJ45百兆接口;板载eMMC与TF卡槽;40 Pin GPIO,可以扩展 SPI LCD 显示屏,千兆以太网,麦克风阵列,CAN收发器,温湿度传感器,加速度传感器等等。
系统支持Ubuntu20.04、Armbian、Tina、Android、Android TV10、Android TV10......
开源项目地址:
https://oshwhub.com/gloomyghost/yuzukih616H616Mini开发板
H616Mini开发板在设计上参考的是基于全志H616的Yuzuki Chameleon卡片电脑,不同的是改开发板采用核心板和扩展板的方式进行设计,两板通过BTB连接。
板载DDR3,EMMC,SD卡槽,USB,UART及WIFI芯片,通过TypeC接口引出USB以及Debug串口,方便查看调试信息。采用核心板加扩展板的形式方便插拔,可快速变更拓展板实现不同功能。
支持的系统和Yuzuki Chameleon卡片电脑相同,目前刷入香橙派Ubuntu固件,测试USB,HDMI等接口功能正常。
开源项目地址:https://oshwhub.com/gao-shi-qing-tuan-dui/h616mini
全志H6开发板
基于全志H3设计的小体积开发板。适用于全志H2,H3,H5。
开发板板载两颗DDR3 256M 内存,32G-eMMC,贴片TF卡和插卡可选。板载WIFI-AP6181。打板参为6层 1.6毫米板厚。阻抗选择JLC06161H-3313阻抗结构。
用全志测试软件增加散热的情况下最高DDR-CLK频率是336,需要降频使用,目前HDMI输出,TF卡,和USB测试成功。其他部分正在测试。
开源项目地址:https://oshwhub.com/dingcheng/quan-zhi-h5-mini-pc-v2-0
-
100ASK_V853-PRO开发板部署YOLOV5自定义模型
0.前言
本章讲述如何训练自定义数据集生成模型,部署到100ASK-V853-PRO开发板上。这里假设您已经搭建好YOLOV5-V6.0的环境,搭建环境参考:YOLOV5-V6.0环境搭建 。如果您没有阅读过100ASK-V853-PRO开发板支持yolov5模型部署文章,请先按照这篇文章进行操作。
下面操作仅演示如何去训练自定义模型、导出模型、转换模型、模型部署。注意:训练模型对于电脑需要有一定的要求,如果电脑性能较弱可能会导致训练效果较差,从而导致模型精度较低。
参考链接:Train Custom Data - Ultralytics YOLOv8 Docs 1
测试体验镜像:v853_linux_100ask_uart0.img(yolov5-100ask <模型文件> <测试图像>)
模型文件:network_binary.nb
yolov5-100ask应用包:yolov5-100ask.tar.gz1.下载数据标注工具
数据标注工具:[Releases · heartexlabs/labelImg · GitHub]
点击上述红框下载,下载完成后解压压缩包,双击打开labelImg.exe文件。
打开后等待运行,运行完成后会进入如下标注工作界面。
关于LabelImg更多的使用方法,请访问:https://github.com/heartexlabs/labelImg
由于LabelImg会预先提供一些类供您使用,需要手动删除这些类,使得您可以标注自己的数据集。步骤如下所示:
进入LabelImg程序目录中的data目录中,打开predefined_classes.txt文件,删除文件中所有预定义的类后保存并退出即可。
2.创建数据集目录
在任意工作目录中创建images文件夹和labels文件夹分别存放图像数据集和标注信息。这里我演示仅使用少量图像样本进行标注,在实际项目中需要采集足够的图像进行标注才拿满足模型的准确率和精度。
例如我在100ask-yolov5-image目录中创建有images文件夹和labels文件夹,如下所示,创建images文件,存放图像数据集,创建labels文件夹,该文件夹用于后续存放标注数据。
3.标注图像
打开LabelImg软件后,使用软件打开数据集图像文件夹,如下所示:
打开后,修改输出label的文件夹为我们创建的数据集目录下的labels文件夹
下面我演示标注过程,以百问网的开发板为例,标注三块开发板
当你点击Save后即表示标注完成,标注完成后后会在labels目录下生成classes.txt(类别)和图像中标注的类别即位置信息。
下面为LabelImg快捷键目录:
Ctrl + u Load all of the images from a directory Ctrl + r Change the default annotation target dir Ctrl + s Save Ctrl + d Copy the current label and rect box Ctrl + Shift + d Delete the current image Space Flag the current image as verified w Create a rect box d Next image a Previous image del Delete the selected rect box Ctrl++ Zoom in 经过标注大量的图像后,labels文件夹如下图所示
4.划分训练集和验证集
在模型训练中,需要有训练集和验证集。可以简单理解为网络使用训练集去训练,训练出来的网络使用验证集验证。在总数据集中训练集通常应占80%,验证集应占20%。所以将我们标注的数据集按比例进行分配。
在yolov5-6.0项目目录下创建100ask文件夹(该文件夹名可自定义),在100ask文件夹中创建train文件夹(存放训练集)和创建val文件夹(存放验证集)
在train文件夹中创建images文件夹和labels文件夹。其中images文件夹存放总数据集的80%的图像文件,labels文件夹存放与images中的文件对应的标注文件。
在val文件夹中创建images文件夹和labels文件夹。其中images文件夹存放总数据集的20%的图像文件,labels文件夹存放与images中的文件对应的标注文件。
5.创建数据集配置文件
进入yolov5-6.0\data目录下,创建data.yaml,文件内容如下所示:
train: 100ask\train\images # train images val: 100ask\val\images # val images nc: 3 # number of classes names: ['T113', 'K510', 'V853'] # class names
6.创建模型配置文件
进入models目录下,拷贝yolov5s.yaml文件,粘贴并models目录下重命名为100ask_my-model.yaml,例如:
修改100ask_my-model.yaml中类的数目为自己训练模型的类数目。
6.修改训练函数
打开yolov5-6.0项目文件夹中的train.py,修改数据配置文件路径,如下图红框所示:
parser.add_argument('--cfg', type=str, default='models/100ask_my-model.yaml', help='model.yaml path') parser.add_argument('--data', type=str, default=ROOT / 'data/data.yaml', help='dataset.yaml path')
7.训练模型
在conda终端的激活yolov5环境,激活后进入yolov5-6.0项目文件夹。执行python train.py,如下图所示:
程序默认迭代300次,等待训练完成…
训练完成后结果会保存在runs\train\目录下最新一次的训练结果,如上图所示,此次训练的最好模型和最后训练的模型保存在以下目录中runs\train\exp7\weights
8.验证模型
修改val.py函数,修改如下
parser.add_argument('--data', type=str, default=ROOT / 'data/data.yaml', help='dataset.yaml path') parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'runs/train/exp7/weights/best.pt', help='model.pt path(s)')
class Model(nn.Module): def __init__(self, cfg='100ask_my-model.yaml', ch=3, nc=None, anchors=None): # model, input channels, number of classes
打开conda终端输入python val.py
执行完成后的结果保存在runs\val\exp文件下。
9.预测图像
在data目录中新建100ask-images文件夹存放待检测的图像和视频文件。
修改detect.py函数中,模型的路径与检测图像路径。
parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'runs/train/exp7/weights/best.pt', help='model path(s)') parser.add_argument('--source', type=str, default=ROOT / 'data/100ask-images', help='file/dir/URL/glob, 0 for webcam')
检测效果如下图所示:
10.导出ONNX模型
修改export.py函数
parser.add_argument('--data', type=str, default=ROOT / 'data/data.yaml', help='dataset.yaml path') parser.add_argument('--weights', type=str, default=ROOT / 'runs/train/exp7/weights/best.pt', help='weights path')
在conda终端输入:
python export.py --include onnx --dynamic
导出的模型会与输入的模型位于同一路径下,假设我输入的模型位于:runs\train\exp7\weights
11.简化模型
简化模型前需要用到onnxruntime依赖包,输入以下命令安装:
pip install onnxruntime==1.13.1 -i https://pypi.doubanio.com/simple/
简化命令如下:
python -m onnxsim <输入模型> <输出模型> --input-shape <输入图像尺寸>
例如:
输入模型路径为runs/train/exp7/weights/best.onnx,输出模型路径为runs/train/exp7/weights/best-sim.onnx
输入图像尺寸固定为640x640。
python -m onnxsim runs/train/exp7/weights/best.onnx runs/train/exp7/weights/best-sim.onnx --input-shape 1,3,640,640
13.查看模型
访问:https://netron.app/ 1
可以看到输入已经固定为640x640,可看到模型有 4 个输出节点,其中 ouput 节点为后处理解析后的节点;在实际测试的过程中,发现 NPU 量化操作后对后处理的运算非常不友好,输出数据偏差较大,所以我们可以将后处理部分放在 CPU 运行;因此在导入模型时保留 350,498, 646 三个后处理解析前的输出节点即可。
14.验证模型
模型需要修改为简化后的模型路径。
新建文件夹存放固定的输入图像尺寸。假设上述中我设置输入图像尺寸为640x640,那么此时我在data目录下新建100ask-images-640文件夹存放640x640的图像作为待测数据。
修改detect.py函数parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'runs/train/exp7/weights/best-sim.onnx', help='model path(s)') parser.add_argument('--source', type=str, default=ROOT / 'data/100ask-images-640', help='file/dir/URL/glob, 0 for webcam')
在conda终端输入:
python detect.py
通过输出信息可知:检测结果存储在runs\detect\exp6
检测结果如下:
15.转换模型
15.1 创建工作目录
将简化后的best-sim.onnx模型传入配置到NPU模型转换工具的虚拟机中,创建模型工具目录,包含模型文件,量化文件夹data(存放量化图片),dataset.txt文件(存放量化图片的路径)。buntu@ubuntu2004:~/100ask-yolov5-test$ tree . ├── best-sim.onnx ├── data │ └── test01.jpg └── dataset.txt 1 directory, 5 files
工作目录如下所示:
15.2 导入模型
导入模型前需要知道我们要保留的输出节点,由之前查看到我们输出的三个后处理节点为:350,498,646 。pegasus import onnx --model best-sim.onnx --output-data best-sim.data --output-model best-sim.json --outputs "350 498 646"
导入生成两个文件,分别是是 yolov5s-sim.data 和 yolov5s-sim.json 文件,两个文件是 YOLO V5 网络对应的芯原内部格式表示文件,data 文件储存权重,cfg 文件储存模型。
15.3 生成 YML 文件
YML 文件对网络的输入和输出的超参数进行描述以及配置,这些参数包括,输入输出 tensor 的形状,归一化系数 (均值,零点),图像格式,tensor 的输出格式,后处理方式等等pegasus generate inputmeta --model best-sim.json --input-meta-output best-sim_inputmeta.yml
pegasus generate postprocess-file --model best-sim.json --postprocess-file-output best-sim_postprocess_file.yml
修改 best-sim_inputmeta.yml 文件中的的 scale 参数为 0.0039216(1/255),目的是对输入 tensor 进行归一化,和网络进行训练的时候是对应的。
修改过程如下图所示:
15.4 量化
生成量化表文件,使用非对称量化,uint8,修改 --batch-size 参数为你的 dataset.txt 里提供的图片数量。如果原始网络使用固定的batch_size,请使用固定的batch_size,如果原始网络使用可变batch_size,请将此参数设置为1。
pegasus quantize --model best-sim.json --model-data best-sim.data --batch-size 1 --device CPU --with-input-meta best-sim_inputmeta.yml --rebuild --model-quantize best-sim.quantize --quantizer asymmetric_affine --qtype uint8
15.5 预推理
利用前文的量化表执行预推理,得到推理 tensorpegasus inference --model best-sim.json --model-data best-sim.data --batch-size 1 --dtype quantized --model-quantize best-sim.quantize --device CPU --with-input-meta best-sim_inputmeta.yml --postprocess-file best-sim_postprocess_file.yml
15.6 导出模板代码与模型
输出的模型可以在 ovxilb/100ask-best-sim_nbg_unify 文件夹中找到network_binary.nb模型文件。
pegasus export ovxlib --model best-sim.json --model-data best-sim.data --dtype quantized --model-quantize best-sim.quantize --batch-size 1 --save-fused-graph --target-ide-project 'linux64' --with-input-meta best-sim_inputmeta.yml --output-path ovxilb/100ask-best-sim/100ask-simprj --pack-nbg-unify --postprocess-file best-sim_postprocessmeta.yml --optimize "VIP9000PICO_PID0XEE" --viv-sdk ${VIV_SDK}
可以进入下图所示目录中将network_binary.nb模型文件拷贝出来备用。
16.端侧部署
这里引用上一篇《100ASK-V853-PRO开发板支持yolov5模型部署》我们编写的yolov5端侧部署程序,这里进入端侧部署程序文件夹中拷贝一份新程序进行修改。主要修改vnn_post_process.cpp程序。16.1 修改draw_objects函数
修改draw_objects函数中的类名,这里我训练的模型的类别分别是T113、K510、V853类别名称需要yolov5-6.0项目data目录下data.yaml对应
16.2 修改generate_proposals函数
修改generate_proposals函数中的类类别数量为您类别数量。假设我训练的类别总共有T113、K510、V853,这3个类别,修改为3即可。修改后的文件如下所示:
16.3 编译
book@100ask:~/workspaces/tina-v853-open$ source build/envsetup.sh ... book@100ask:~/workspaces/tina-v853-open$ lunch ...1 ...
进入menuconfig选中yolov5-100ask配置,输入
make menuconfig
进入如下目录中
100ask NPU <*> yolov5-100ask… yolov5-100ask demo
编译并生成镜像
book@100ask:~/workspaces/tina-v853-open$ make ... book@100ask:~/workspaces/tina-v853-open$ pack
编译完成后使用全志烧写工具烧录镜像。
16.4 测试
主机端:传入640*640的图像文件和network_binary.nb模型文件
book@100ask:~/workspaces/testImg$ adb push test-100ask.jpg /mnt/UDISK test-100ask.jpg: 1 file pushed. 0.6 MB/s (51039 bytes in 0.078s) book@100ask:~/workspaces/testImg$ adb push network_binary.nb /mnt/UDISK network_binary.nb: 1 file pushed. 0.7 MB/s (7409024 bytes in 10.043s)
开发板端:
进入/mnt/UDISK/目录下
root@TinaLinux:/# cd /mnt/UDISK/ root@TinaLinux:/mnt/UDISK# ls lost+found network_binary.nb overlay test-100ask.jpg
运行yolov5检测程序
yolov5-100ask network_binary.nb test-100ask.jpg
执行完成后会在当前目录下生成输出文件yolov5_out.jpgroot@TinaLinux:/mnt/UDISK# ls
lost+found overlay yolov5_out.jpg
network_binary.nb test-100ask.jpg
主机端:拉取开发板端的输出图像yolov5_out.jpg
book@100ask:~/workspaces/testImg$ adb pull /mnt/UDISK/yolov5_out.jpg ./ /mnt/UDISK/yolov5_out.jpg: 1 file pulled. 0.8 MB/s (98685 bytes in 0.116s)
17.检测效果图
-
新的香橙派Zero3,比从前更强了一点
在树莓派涨价缺货潮中广受好评的香橙派,又迎来了它的新一代产品升级——Orange Pi Zero 3
作为香橙派经典品质的代表,Zero系列凭借其强劲的性能表现、小巧的外观以及高性价比一直拥有超高的人气,备受用户青睐。现在,官方在Zero 2的基础上进行了再度升级,全新推出的Zero 3配备了更强大的处理器全志H618以及更大、更多可选规格的内存,为用户提供更好的使用体验。
Orange Pi Zero 3搭载全志 H618 64位高性能四核Cortex-A53处理器,Arm Mali-G31 MP2 GPU,支持OpenGL ES 1.0/2.0/3.2,OpenCL 2.0,Vulkan 1.1等,拥有1GB /1.5GB/2GB/4GB四种内存规格可选,板载16MB SPI Flash,支持多种视频格式的编解码,Micro-HDMI输出支持4K显示,支持Android 12 TV,Debian11,Debian12,Ubuntu22.04,Ubuntu20.04等操作系统,可广泛应用于电视盒子、智能投屏设备等。
比起经典款Zero 2,Zero 3将处理器从H616升级到H618,运行内存从512MB/1GB两种可选升级到1GB /1.5GB/2GB/4GB四种可选,更大的运行内存令软件运行时有更快的速度和更好的流畅度。在外观上,Zero 3尺寸更小,仅有50mm*55mm,只有一张信用卡的2/3那么大,可以轻松塞到各种小巧的产品模具里。
Orange Pi Zero 3延续了Zero 2在接口设计方面的优势,提供了丰富多样的接口配置,优秀的拓展能力能够满足用户日常所有的外接需求。具体而言,Zero 3可以通过13Pin扩展口配合转接板扩展耳机、TV-Out、USB2.0、红外接收等功能,配备了千兆以太网、Micro HDMI、WiFi5和蓝牙5.0、3个USB 2.0 (其中两个从扩展板引出),采用Type-C 5V3A供电,另外板上的26Pin扩展功能口,进一步丰富了主板的功能接口,提升了开发的潜力。
价格上,依旧延续了香橙派高性价比的路线,1GB版本仅售99元,1.5GB版本为119元,2GB版本为149元,4GB版本为199元。在这个价格区间,Zero 3的表现是相当出众了。
很快,你就可以从以下渠道买到Orange Pi Zero 3:
- 天猫 - 香橙派电脑旗舰店
- 淘宝店铺 - 香橙派OrangePi
- 拼多多 - 香橙派数码官方旗舰店
- ……
相信,这次的全新升级定会满足你的期待!
-
为了实现上网自由,我做了一个多功能串口服务器
项目作者:小华的物联网嵌入式之旅
介绍:从事电气自动化行业,多次获得物联网设计竞赛,爱好嵌入式设计开发,物联网开发。
附件:多功能串口服务器PCB-Gerber.zip
多功能串口服务器BOM表.xlsx
多功能串口服务器PickAndPlace_PCB1_坐标文件.xlsx
基于V853多功能串口服务器-专业版.zip设计方案思路的由来,是因为我们现在的开发板基本需要通过串口与WIFI模组或以太网模组连接以实现联网功能,如果多个开发板就要配多个模组,所以做一个类似路由器的功能,将多种串口协议集中连接到串口服务器上面,然后就可以实现通过一个以太网功能实现联网。
串口服务器网上也有相关的产品售卖,虽然不知他们的控制原理,但是对我来说只需要将串口数据发送到V853上,通过它进行数据解析后集中通过以太网接口发送出去就实现了串口服务器和路由功能。
该服务器因为具备了WIFI模组,所以也可以组成局域网,将所有无线设备都可以连接到模组接收数据,然后再通过以太网接口与其他网络设备进行交互。
主要功能及用途
实现的功能是基于官方提供的V853原理图和晕哥设计方案的基础上进行了功能扩展,新增了串口转换电路:
1、V853最小系统,运行linux操作系统,尽可能运行桌面系统,这样可以像操作电脑一样编辑串口数据。
2、WIFI模组实现联网功能。
3、显示屏LCD接口,用来显示操作界面。所以有了它就更像一台小电脑服务器。
4、摄像头接口,这是预留接口,用来实现摄像头监控,在数控机房里面特别适合。
5、”USB-HUB扩展4路USB接口,通过USB转串口芯片CP2102实现2路R232,2路RS485,4路TTL,总共实现8路串口功能。满足了我们多功能串口服务器。软件设计
需要在linux系统上安装Node-Red软件,这个软件是一个图形化编程编辑界面,通过安装相对应的节点就可以实现想要的功能。
例如串口功能,MQTT功能,TCP功能等必要的组件都可以安装实现,只需要设置需要参数就可以完成相关功能,同时还可以进行数据解析,并通过Dashboard数据可视化界面做上位机显示到显示屏上面,摄像头的调用可以使用里面的组件去调用,可以说node-red可以轻松实现串口数据转以太网,实现任何一个串口设备都可以轻松连接到服务器。如下图就是各个节点功能的使用案例。
所以解决串口和无线有线的连接问题,就可以实现数据交互的服务器。外网如果想查看上位机界面,因为它是网页版,所以通过透传的方式就可以远程打开查看这个网页。
方案原理图
PCB是基于Yuzuki大佬的“高性能异构边缘AI视觉开发板”PCB板上画的,让我节省了很多时间。我只需要扩展我的串口功能部分和修改了部分电路与布局。
开始我的板子有个小插曲,板子刚回来时发现上电后没有反应,检查好几天才发现没有焊接晶振,我还在硬件设计大赛的群里打扰各位大佬为什么我的板子不能工作,识别不到USB等等问题。还好发现了问题并解决了。现在给大家介绍如何烧录Tina Linux系统。
固件烧写及点灯
在全志在线开发者社区的资料下载页面下载红框所示的全部量产工具。
下载出厂固件。
打开刷机软件:(该软件在全志资源下载里面都能找到)。
这个时候按住开发板上FEL按键不松手,然后用Type-C数据线连接电脑和板子的OTG接口,这个时候会进入USB模式,刷机软件就会自动识别并烧录固件。如果没有进入USB模式,可以通过按住FEL按钮,然后点击一下RESET按钮,这时候如果你的电脑开了音量,就听到声音。此时刷机软件也会自动进入烧写模式。
显示烧录成功:
刷机软件也自动连接上板子,显示了如下信息:
然后系统会自动运行,过了一会儿,我们会发现在设备管理中看到Tina ADB,刷机软件的首页也显示连接设备成功。
然后我们需要配置添加ADB到环境变量中:在win10系统中:
我的电脑-属性-高级系统设置-弹出“系统属性”窗口,选择高级栏中的环境变量,弹出的窗口中选择用户变量中的path路径,选择下载并解压的ADB。
新建一个路径,选择自己的adb路径:
然后再win10开始栏中输入cmd,打开命令提示符窗口,我们输入adb shell就会看到如下内容,这样我们就进入了linux系统。
点亮LED灯,连接PH11引脚到LED灯就可以通过控制gpio235的值来点亮和熄灭LED灯。
echo 0 > value点亮LED灯 echo 1 > value熄灭LED灯
如下图我板子的PH11引脚连接到串口的一个蓝色LED指示灯实现点亮LED灯功能。
-
【开源硬件】全志芯片系列优秀开源工程分享第一期
“全志芯片合集”正式上线立创开源硬件平台,涵盖多系列全志芯片,开源智能家居、游戏掌机等多个领域的开源应用工程. . . . . .
立创开源硬件平台:https://oshwhub.com/recommend/quan_zhi
YuzukiCK1N 触屏小电脑
YuzukiCK1N小电脑,基于全志V3x芯片制作,集成128M内存。
小电脑本身体积并不大,带有USB接口和3.5mm音频输出接口,同时板载百兆网络、Wi-Fi,支持eMMC储存,屏幕为4寸方屏,支持480480或720720分辨率,可使用电容触摸。
软件方面使用 Linux 5.4.180、U-Boot 2022.01,作者还提供了适配了小电脑的SDK,SDK采用作者个人整理的“Buildroot YuzukiSBC”,该Buildroot版本的SDK主要支持作者本人的YuzukiHD系列中的设备,包含全志F1C100s/200s、V3s、V3x、D1-H、D1s、T113等一众方案。
开源项目地址:https://oshwhub.com/GloomyGhost/yuzukick1n
2.8寸Miyoo横板掌机
掌机使用基于全志F1C200s设计的Lite200为核心板,集成64MB DDR可以帮助游戏快速加载。
掌机外观基于Miyoo横板开源掌机进行复刻,整体结构为亚克力盖板堆叠,由屏幕盖板(PCB)+PCB+底壳构成,屏幕采用耀元鸿2.8寸40Pin IPS屏幕,屏幕与屏幕盖板采用2.5MM铜柱垫高,螺丝长度为M2*16。
模拟器方面使用司徒修复闪屏系统,可以支持运行GBA和PS1的2D游戏,配合超频的Gmenu2x和超频252MHz的Dram,获得更好的游戏体验。
开源项目地址:https://oshwhub.com/sunnygold/miyoogame_2022-12-25_17-58-30
全志H6开发板
本项目开源主要目的是帮助想学ARM高速电路的小伙伴们,学会自己做一个ARM开发板。教程从最初的“需求分析”一直到成功实现“软硬件联调”,就算是0基础,跟着学习也可以做出硬件小白的第一块开发板。
开发板以全志H6为主控芯片,并板载2GB LPDDR3内存以及8GB EMMC,通信模块采用AP6212(WIFI+BT),还设置了常见的USB、HDMI、耳机音频等接口,以及开放了26Pin的GPIO,基本涵盖了一款完善开发板的基础功能设计。
硬件上面兼容Orange Pi 3 LTS,可以烧写香橙派的系统,完全对接它的软件,比如:使用香橙派提供的GPIO操作工具,操作IO端口。同时支持Ubuntu 22.04、Debian 11、Android TV 9.0等操作系统。
-
【行业观察】稚晖君刚拿了百度投资,估值被曝已超独角兽
“华为天才少年”稚晖君创业项目,刚被百度风投投了!
量子位获悉,稚晖君创业项目智元机器人,日前完成了第三轮融资,市场估值被曝在十几亿美元左右。
天眼查App显示,本轮新增股东包括李彦宏旗下三亚百川致新私募股权投资基金合伙企业(有限合伙),以及经纬、高榕等一线VC,注册资本增至约4847.02万元。
智元机器人关联公司名为上海智元新创技术有限公司,成立于2023年2月,法定代表人为舒远春。
经营范围含智能机器人的研发、人工智能理论与算法软件开发、人工智能硬件销售、电子产品销售等。
致力于AI和机器人深度融合
简而言之,智元机器人要做的事,就是致力于将AI和机器人深度融合。
这一点可以从稚晖君最新的B站视频中窥见端倪。
视频中,稚晖君剧透了全新双足机器人哪吒。用他自己的话来评价,这是“国风神话”和“赛博机械”的组合。
“国风神话”,体现在机器人的名字,以及“火尖枪”、“混天绫”和“风火轮”上:
“赛博机械”,主要体现在机器人的脚上。
即采用“轮+足”将传统双足机器人(如波士顿动力)和各式轮足机器人的脚步特点,完成地形适应/灵活性+高续航性。
稚晖君将此命名为轮足二相腿,“脚”横过来就是足,竖过来就是轮。
效果上是这样的:
视频中有个小细节,当时就被细心的网友们发现了——
稚晖君戴着头显,和哪吒的动作保持神同步。
这或许是后续哪吒要展示的功能之一。
至于哪吒的其余效果展示,稚晖君表示会随着后续的进度在之后的视频中做更多的露出。
在通用机器人和AI领域LLM结合上,团队还会有一些动作。
更重要的是,稚晖君在视频最后有个精彩剧透:
如果不出意外的话,哪吒会在今年晚些时候,在我们当前正在筹备的某个大事情的发布会上,作为彩蛋。
所以,哪吒“问世”,代表的只是稚晖君创业项目的一个开始。
现在的稚晖君B站主页,最新进展仍然停留在哪吒双足机器人的动态,“晚些时候”的发布会也还没传出消息。
但刚刚完成的第三轮融资,揭示了平静湖面下涌动的暗流的一角,也足以让人感知到市场对其的期待。
谁是稚晖君
稚晖君,本名彭志辉,在电子科技大学拿下本硕学位。
不过,本科时,他的专业是生物医学工程,因为一直自学计算机知识,研究生才顺利转向信息与通信系统专业。
2018年毕业后,他的第一站是OPPO研究院,面试时一口气拿下硬件岗和算法岗的两个Offer。
和后来在华为时一样,他当时的选择是AI算法工程师。
2020年,稚晖君加入**“华为天才少年计划”**,正式成为华为的一名员工。
通常来说,“天才少年”的招聘流程非常严格,一般需要经历7轮左右流程,最终还要通过华为总裁的面试。
根据这项计划招入的华为“天才少年”们,年薪100万起步。
成为计算产品线昇腾部门的一员后,华为给他的对外title是昇腾AI边缘计算专家。
关于昇腾计算,据华为官网消息,主要是打造面向“端、边、云”的全场景AI基础设施方案。
加入华为的次年,任正非在演讲中表扬了他,称其是华为创新的动力。
去年12月底,加入华为两年后,华为员工在线爆料华为内部已经搜不到稚晖君的工号,恐已离职。
随后,稚晖君正面回应:
传言属实,已离开华为,准备创业。
而关于为何突然离开华为,以及之后创业的计划和细节,稚晖君当时都没有作出详细解释。
但当时有知乎知情人士表示,稚晖君离职并非业务原因。
离职前,稚晖君在部门的绩效表现非常好(近几次绩效全A),而且内网的荣誉墙可以看到他入职这几年拿了不少奖项(总裁奖、明日之星、金牌团队等等)。
可以肯定不是业务原因离职,他做的确实是感兴趣且擅长的方向。
目前,他在GitHub上的职位动态仍停留在华为研究岗。
除开“华为天才少年”的光环,稚晖君最为大家熟悉的身份,应该是B站科技区拥有近250万粉丝的知名UP主。
2021年,他曾拿下“年度百大UP主”称号。
据他自己说,最初只是把B站当做视频存储服务器,没想到却收获了一批稳定的粉丝,于是开始转型做up主。
不过半年,稚晖君火了,还因为过于硬核的视频内容被被网友们戏称为“野生钢铁侠”、“栈溢出”工程师。
其中最为出圈的几条,包括“钢铁侠机械臂”“自动驾驶自行车”“mini卡片电脑”等,播放量都在300万+。
可以看到,他在B站上更新的内容大都和机器人相关。
这大概也能侧面说明,稚晖君离职华为加入智元机器人开启(又一次)创业生涯,是为了追求兴趣所在。
毕竟他曾经公开表示过对机器人领域的热爱,称最喜欢的还是智能交互和机电控制类的项目,说大点就是和机器人相关的。
他曾在与Gitee交流时表达过:
“如果程序员是数字世界的上帝的话,那亲手给机器人以身形,再用AI赋其灵魂,这就是真极客的浪漫啊!”
-
【行业观察】00后浙大博士创业,用AI建模把3D打印价格降到行业1/3
转载自硬氪 作者@王渝斐/张子怡
AI时代来临后,消费级3D打印市场正迎来巨变。
以前需要花费半个月时间才能操作的建模,如今几分钟即可完成;以前动辄几千元以上的产品,现在不到900元。
这就是魔芯科技创始人兼CEO陈天润正在用AI做的事。他不仅是浙江大学直博生,还跟随人工智能领域专家潘云鹤院士深造于视觉三维算法领域。陈天润的创业项目也获得了盛元智本和德石投资两轮融资。
3D打印行业已经爆火一段时间。在海外众筹平台上,安克旗下的AnkerMake M5,众筹金额曾高达888万美元,创下历史第一;由大疆团队组建的拓竹,发布Bambu Lab X1众筹金额也达700万美金。
成立于 2021 年的魔芯科技,是硬氪持续跟踪的公司。其自主研发的 KOKONI EC2 桌面级智能 3D 打印机,最在小米有品众筹首发上线,上线仅20分钟完成100%目标,5 小时销售额破百万元大关。
3D 打印市场,曾是个只存在于极客、创客群体中的小众市场。如今作为虚拟世界与现实世界的连接入口,应用场景已经拓展至教育、艺术、消费电子等领域,使用人群也越来越广。
让3D打印变得零门槛
对于消费者而言,要想灵活使用 3D 打印,需要具备不少技能:会组装、维修、熟悉材料、会建模等。
对于从未接触过3D打印机的消费者,入手一台机器后,面对的第一个问题是如何组装。
过去,不少3D打印机以零件形式出售,个人消费者组装时间可能高达40小时甚至一星期。
“3D打印机一般需要自己去组装、去调试,去了解很多知识。打印速度、加热底板、支撑类型等参数都需要用户自己去了解。”陈天润告诉硬氪。
KOKONI EC2 的特点之一是零门槛使用方式,用户在使用该机器时不需掌握机械结构相关知识,不需花费太多时间安装设备,使用前不再需要手动调平,开箱即用。
组装完成后的另一个高门槛——学习建模。
消费者只有学会使用CAD软件制作图纸,接着将模型转化为设备可以识别的文件,在专业的切片软件里决定打印方向,支撑设置等设置后,最终才能生成可以使用的打印文件。
上述操作对初次使用者而言,至少需要花费半个月。
所以,KOKONI EC2 的另一特点在于自研APP——KOKONI 3D APP ,作为硬件产品的配套软件,使用AI技术帮助用户迅速建模,降低用户学习成本,快速上手。
依托自研AI算法,KOKONI 3D APP 开放多种全新 AI 智能建模功能,包括手绘建模、拍摄建模、文字建模、电子积木等。
陈天润向硬氪演示了APP的使用过程。在APP中,用户可以自主选择建模方式。若选择手绘建模,可以在画布上画汽车轮廓,软件生成初步的汽车三维模型,用户再根据需求调整xyz轴参数,让模型更加精细。
拍摄建模能够让用户拍摄或上传照片,例如上传个人照片,生成人像三维模型后,进一步调整参数,即可打印出mini版的自己。
文字建模则类似于AI绘画,输入文字描述生成自己想要的模型。值得注意的是,该功能尚处于内测阶段。
“现在市场上大部分比较火的 AIGC 产品,它们主要生成的是平面内容。我们APP生成的是三维模型,你可以 360 度旋转看细节,后期可以自己手动调整。让 AI 帮用户去做前期工作,降低用户的学习成本。”陈天润说。
此外,魔芯科技也会不断通过积累的大数据以及用户在使用时对AI的训练,让AI建模的准确性不断提高。
在3D打印行业中,目前鲜少产品会嵌入AI算法。而魔芯科技在软件产品上的开发,以及对于AI技术率先的运用,跟创始人陈天润背景有很大关联。
在AI训练过程中魔芯科技采用了深度学习的方法。通过捕捉全局语义信息,再结合照明和纹理等先验知识,对图像进行初始估计。最后再通过优化,最大限度地将用户拍摄的图像合成为高保真且可3D打印的三维模型。
此外,3D打印机的打印速度也是对产品性能的重要考量。 KOKONI EC2 的最大打印速度为100mm/s,对比专业级3D打印机打印速度较低。
陈天润表示:“这和产品定位有关,KOKONI EC系列定位为入门的消费3D打印机,面向的是普通消费者。”
陈天润认为硬件性能的提升并不能完全解决这部分用户的核心痛点,他们更需要软件与硬件的结合,通过AI智能拓宽3D打印的使用场景,真正降低用户的使用门槛。
软件与硬件的结合并非易事。让软件更好地驾驭硬件,并且保障高并发场景下的稳定性,需要设计一个安全又高效的协议方法。
同时,KOKONI EC2 在产品价格范围内针对性做了提升。产品内置高清摄像头,可进行720p延时摄影,通过APP可查看打印状态,随用随停并支持视频分享。
“好玩的、好用的”消费品
当前的消费级 3D 打印机为满足专业用户需求,大多追求速度和精度上的性能提升,专注于存量市场。
价格也差距很大。桌面级的3D打印机价格多在千元以上,更高精度的3D打印机价格在两千元~几万元不等。
在魔芯科技看来,高昂的价格和复杂的操作让3D打印机难以成为一个合格的消费品,降低价格门槛是将3D打印推向消费电子市场,打开应用场景的其中一步。
值得一提的是, KOKONI EC2 售价仅899元。能够实现这样的定价依托于魔芯科技能够通过自有工厂实现供应链优化。
魔芯科技总部位于杭州地理信息小镇,通过地理优势集结AI人才开设研发中心。自主研发、自主生产帮助魔芯科技做到成本可控。
**同时魔芯科技通过消费电子的思路降低成本。**比如借鉴消费电子行业常用的方法——用更多能复用零件、用更多能够大批量生产的开模等。
陈天润告诉硬氪,“一般的3D打印机是通过硬件竞赛去实现产品迭代升级,同质化较为严重。我们是按照消费电子产品,通过AI算法技术,以低成本、高性能的产品思路去做。”
这一开发思路得益于魔芯科技团队内有深耕消费电子、3D打印行业的专业人士,在视觉三维算法等领域有丰富积累,也有交付数十万台的3D打印设备经验。
“对工程师来说,只要不计成本堆功能一定可以做出很厉害的东西。但这违背了消费产品的逻辑,我更需要做到如何在成本可控的情况下去做现在这件事。”陈天润将KOKONI EC系列定义为“好看的,好玩的消费产品”。
不过,目前国内的消费场景潜力尚未被完全开发。根据艾瑞咨询数据,80%-90%的消费级3D打印机出口海外。
魔芯科技选择主攻国内市场,这也是KOKONI EC2定价千元级以下的重要原因。
对于海外市场,魔芯科技也没有放弃。公司海外销售总监陈皓告诉硬氪,魔芯科技于2022年建立了独立站,通过线上渠道布局美、德、日市场,未来也计划进驻海外线下商超。
据悉,魔芯科技下一代产品 KOKONI SOTA 系列,其最大打印速度为600mm/s,加速度为21000mm /s^2,目前正在海外平台众筹。
-
Reply: H616静态IP设置失败
可能是还没写入文件就已经断电了,导致的数据丢失
linux内核写入文件的特性:先将内容写入缓存,在io空闲或者一段时间等情况下,再将内容写入磁盘,
当内容在缓存中时,可以通过 cat 命令查看内容,因此通过 cat 命令能查看到 IP 不能说明已经将内容写入
在设置完静态IP之后,调用相关方法,马上将内容写入磁盘。
代码路径:
frameworks/base / services/core/java/com/android/server/net/IpConfigStore.java
public void writeIpConfigurations(String filePath, ArrayMap<String, IpConfiguration> networks) { mWriter.write(filePath, out -> { out.writeInt(IPCONFIG_FILE_VERSION); for(int i = 0; i < networks.size(); i++) { writeConfig(out, networks.keyAt(i), networks.valueAt(i)); } + try { + sync(filePath); + } catch (IOException e) { + loge("Ipconfig sync error:" + e.toString()); + } }); } + public void sync(String filepath) throws IOException { + File f = new File(filepath); + RandomAccessFile raf = null; + + try { + raf = new RandomAccessFile(f, "r"); + FileDescriptor fd = raf.getFD(); + fd.sync(); + + } finally { + if (raf != null) { + raf.close(); + } + } + }
-
Reply: NPU算法模型推理时如何查看内存占用
查询进程所占内存的方法如下:
//VmSize: 表示进程当前虚拟内存大小 //VmHWM: 表示进程所占用物理内存的峰值 //VmRSS: 表示进程当前占用物理内存的大小(与procrank中的RSS) static const char *GREP_KEY = "-E \"VmSize|VmRSS|VmHWM\""; void print_mem(const char *prefix, const char *grep) { int pid = getpid(); char command[256]; sprintf(command, "cat /proc/%d/status | grep %s", pid, grep); printf("==== %s \n", prefix); system(command); printf("\n"); }
在应用中添内存使用查询接口,使用示例如下:
print_mem("before vip_run_network", GREP_KEY); status = vip_run_network(batchs[i].network); if (status != VIP_SUCCESS) { printf("fail to run network, status=%d, batchCount=%d\n", status, i); ret = -1; goto exit; } print_mem("after vip_run_network", GREP_KEY);
-
Reply: NPU模块如何实现多输入/多网络配置?
多输入sample.txt文件配置,当只有一个nb模型但需要有两个输入时:
[network] ./network_binary.nb [input] ./iter_0_images_262_out0_1_3_640_640.tensor ./input_0.dat
多网络sample.txt文件配置,当需要一次运行多个nb模型时,不同nb以标签为界限:
[network] ./network_binary.nb [input] ./iter_0_images_262_out0_1_3_640_640.tensor [network] ./network_binary.nb [input] ./input_0.dat
-
泰酷辣!开源超迷你安卓手持终端CyberPad,芒果派惊喜之作
继推出大小仅与普通SD卡不相上下爱的超迷你模组MCore-H616核心板之后,鸽了近半年时间的芒果派,又带来了一款惊喜之作——MCore-R818核心板。
该款MCore的设计也是基于R818的特性,做出了一些小小的改变。
芯片本体封装设计较小,核心板在3x3cm的大小下不仅预留了屏蔽罩安装接口,还集成起了R818+EMMC+LPDDR4+PMU四个部件,并提供2G+16G和4G+32G两种硬件配置。
R818集成了用于UI渲染的GE8300 GPU,更侧重于处理本地的显示和CSI工作,可以直接驱动 DSI/LVDS/RGB 接口的屏幕,同时 13MP 摄像头的 ISP 还可以支持 1080P 的视频通话功能,并提供 800 万单摄或 500 万+ 200 万双摄两种方案。
底板的设计一改往日芒果派精致小巧的风格,选择引出绝大部分功能资源。核心板与底板之间通过邮票孔的方式连接,得益于R818强大的音视频功能,底板上板载了3.1寸的电容触摸屏、RGB、MIPI等屏幕接口,还有15pin树莓CSI、OV2680、OV8858等摄像头接口,并板载了扬声器和mic音频接口。
资源:
显示部分:- 板载3.1寸 800*480 电容触摸屏
- RGB 40Pin输出,5寸屏,支持CTP
- 树莓DSI-15pin显示输出
- DSI+CTP 20pin显示接口,(dongshanpi MIPI屏)
摄像头部分:
- 树莓CSI-15pin
- 800W,OV8858
- 500W,OV5647
- 200W,OV2680
音频:
- 板载扬声器1个
- 板载双模拟mic
通讯:
- WiFi 12x12mm模组
其他:
- USB TypeC,支持快充,支持OTG
- 锂电池接口,充放电
- USB HOST 2.0 1个
- TF卡
- 系统按键:FEL,BOOT,电源。
- ADC按键:安卓vol+,vol-
- RGB LED 1个
引出pin:
UART0 (系统调试)
UART2(通用)
UART3(通用)
SPI2
TWI3
若干IO目前芒果派已经对R818进行了全志Tina Linux以及Android 10的适配工作,并释放出了对应的SDK。
安卓10在底板测试时的启动时间大概在20秒左右,电池电压为3.9V运行时,电流稳定在0.16A,而在安卓静态来回操作(没大型app)的情况下,主控在不加散热片的情况下依旧保持低温。
每一款新产品的诞生,往往都离不开创作过程中大开的脑洞。
秉持小巧风格的芒果派终于还是对偌大的底板下手了,一款小巧的手持终端——CyberPad,也就应运而生了。(看起来是否有一种从开发板到实际产品应用的感觉呢~)
CyberPad由屏幕、主板、电池以及转接板四个部分组成,芒果派为MCore重新设计了一块底板,该底板保留了屏幕和摄像头在内绝大部分的资源引出,并为了满足外接键鼠的需求,增加了一个Type-C接口。
CyberPad目前还处在调试阶段,暂时未能实现量产,后续会搭配上一套新的外壳,并走DIY路线将CyberPad的相关PCB在官网进行开源;MCore-R818的核心板和底板则都会进行公开售卖,更多详细信息请前往芒果派官网了解。
芒果派官网:mangopi.org
芒果派淘宝店:https://widora.taobao.com/ -
Reply: 哪吒D1的峰值性能是多少?
D1-H 超频 1.68GHz 测试,提升 67% CoreMark 跑分,ncnn 增速 24%:https://bbs.aw-ol.com/topic/1941/
-
到立创开源平台DIY 赢取万元奖金
- 星火计划报名页面:
https://oshwhub.com/activities/spark2023/fp#P1
- 全志H616电脑DIY报名页面:
https://oshwhub.com/activities/spark2023/fp/detail?demand_uuid=6bdf5f66bf064607b3fb371299c9bd22
什么是「星火计划」?
嘉立创旗下的开源硬件平台,特推【星火计划】活动,给想干一个大项目的电子人提供弹药,也提供展示的平台。
星火计划,是立创开源硬件平台面向全球电子爱好者发出的硬件开源助力活动。专门陪跑那种比较费钱的开源设计!
星火计划项目在2022年正式开启,每年举办一次,每次举办一年。
目前,星火计划分为两个赛道,分别是自由赛道和外包赛道。
自由赛道项目不限主题,不限参与人群,只要你有想法都可以来报名,该赛道下单个项目最高可提供一万元的耗材经费支持!
外包赛道为星火计划二期的全新赛道,有不同类型的外包项目需求,每个外包项目均提供定额项目奖金,外包项目仅对接一人,成功结项百分百获奖!
外包计划
纠结症患者在参赛时一般会想:我要做什么项目?我能做什么项目?我的项目要实现什么功能才能脱颖而出?做好了能不能评上奖?.......
这也是嘉立创通过对2022期参赛者的调研发现的普遍问题,大家把前因后果全都考虑了一遍才发现自己还是连一点项目头绪都没有,但又不想错过这个千载难逢的好机会!毕竟,这种史诗级羊毛不薅?这说不过去!
基于此类“通病”,星火计划外包赛道就为专门治愈这类“纠结症患者”而生!不同应用领域的需求让你应接不暇,总有一个适合你!
一套流程行云流水,每个外包项目均提供定额的项目奖金,且只对接一位参赛者,成功结项将百分百获奖!
贡献创意
如果 这里面没有你想要参加的项目,你也可以“贡献创意”,把你觉得还不错的项目创意提给我们,为星火计划推波助澜,成就更多开源好项目。
【贡献创意】的需求一经采纳,贡献者奖100元无门槛元器件券,无上限!
活动奖励
活动流程
Vlog记录奖励
全志方案赛道
在外包赛道中有全志H616电脑的悬赏项目,当然,有更好想法的开发者也可以选择自由赛道,无限发挥自己的脑洞,你的每一个创意都可以在星火计划中获得全力的支持。
H616电脑设计需求
外设接口
1、HDMI接口1(4k显示);
2、USB2.03
3、USB2.0_OTG1;
4、3.5mm音频接口1;
5、USB-Type-C供电*1;
6、TF卡槽;内置:
1、板载WiFi、蓝牙5.0;
2、运行存储:2GB;
3、内存:32GB;
4、电池充放电电路;
5、10.1寸触摸屏;设计说明
1、使用嘉立创EDA设计;
2、整体项目需设计合适的3D外壳,材料不限(公版模型也可以);
3、外壳模型必须有着对应的接口说明;
4、支持加载Android镜像载入;验收说明
1、电路部分需完全使用嘉立创EDA专业版进行设计,设计前需与工作人员确认方案的可行性后再进行;
2、原理图电路正确,PCB布局走线要求整理美观,无明显缺陷,设计合理,整体外形协调美观;
3、要求录制完整的演示视频,提供项目硬件、软件源文件、器件清单,填写完善开源项目描述。
4、中标后即可进行设计,设计过程中所需耗材与器件需自行准备,项目完成后发放奖金,规定时间内未完成将重新启动项目招标,原项目作废,且不报销已购买物料。
5、嘉立创EDA拥有完整的项目解释权,但会保留作者的著作权。 -
Reply: 【FAQ】全志V853芯片 Tina下RTSP环境搭建方法
@igbt70
make menuconfig进入以下目录
输入Y选中 mpp sample rtsp
自己编译一下使用
-
【开源方案】全志V85x硬件设计大赛作品精选第二期,快来Pick你心目中的最佳方案
01. V851s-显示终端
该参赛作品计划将V851S芯片设计成核心板和底板结构,驱动LCD显示,接收CAN和RS485通信的数据显示在LCD显示屏上。
02.V851s-多媒体开发板
该参赛作品基于全志V851s芯片设计了一个极简版本的双目摄像头开发板,可外接屏幕和以太网。
在开发板设计技巧方面,为了简化电路图采用的内部LDO输出的1.8V;为了方面模块化的特点,采用核心外设独立设计;为了便于开发与调试,采用了LCD;针对V851s自身的特点,采用MIPI高速摄像头进行设计。
03.V853-多功能串口服务器
该参赛作品基于全志V853芯片设计了一个单片机管理设备,通过以太网控制V853设备再对多台单片机进行管理,并设计了配套的上位机软件;原理图主要在官方参考设计上进行修改,通过RS232和TTL控制下位机。
04.V853-音频播放器开发板
该参赛作品基于全志V853芯片设计了一个小音频管理系统,类似于一个个人小声卡,主要用于家里音乐试听,并针对多通道功放进行音效调音,满足室内的音响效果调优,增加diy 调音乐趣。
开发板将实现codec音频驱动以实现基础硬件功能。硬件调试完成后,进行驱动验证、音频链路验证,主要涉及boot 文件系统驱动等调试,alsa 驱动移植等工作。在此基础上实现调音架构,实现delay gain biquad 等模块的功能实现,并整理出调音接口。
开源硬件设计大赛
本次大赛由华秋电子联合全志在线共同举办,感谢合一智联对比赛的赞助。
资料获取
以上参赛方案详细设计资料均可前往电子发烧友论坛-全志科技小组获取:https://bbs.elecfans.com/zhuti_1576_1.html
-
【FAQ】全志V853芯片 tina+v853+audio+dvr如何实现多路mic采集和回声消除?
1.主题
tina+v853+audio+dvr多路mic采集和回声消除方案
2.问题背景
产品:
硬件:主控 + audio +tp9930
软件:tina + audio/ai
其他:客户需要调试6路mic,其中2路为v853内部audio codec mic,四路为tp9930 外部i2s mic,且其中一路audio mic与lineout硬件相连,作为aec回声消除。3.复现步骤
1.搭建客户硬件环境。
2.配置tp9930音频输出,并用示波器查看bclk dout lrck波形。4.问题分析
需要配置好底层音频i2s1,ai中间件声卡插件,并在app层拆分各个声道数据。
5.解决办法
需求分解:
1.根据原理图配置i2s1板级配置;
&daudio1_plat { tdm-num = <1>; tx-pin = <0>; rx-pin = <0>; pinctrl-used; pinctrl-names= “default”,“sleep”; pinctrl-0 = <&daudio1_pins_a>; pinctrl-1 = <&daudio1_pins_b>; tx-hub-en; rx-sync-en; status = “okay”; //打开i2s1声卡 }; &daudio1_mach { soundcard-mach,format = “i2s”; //根据tp9930的输出格式选择dsp模式或者i2s模式 soundcard-mach,frame-master = <&daudio1_codec>; soundcard-mach,bitclock-master = <&daudio1_codec>; /* soundcard-mach,frame-inversion; / / soundcard-mach,bitclock-inversion; / soundcard-mach,slot-num = <16>; //tp9930默认配置16声道slot soundcard-mach,slot-width = <16>; //声道位深16bit status = “okay”; daudio1_cpu: soundcard-mach,cpu { sound-dai = <&daudio1_plat>; //作为从机配置配置为daudio1_plat,主机配置为daudio1_cpu soundcard-mach,pll-fs = <1>; / pll freq = 24.576M or 22.5792M * pll-fs / soundcard-mach,mclk-fs = <0>; / mclk freq = pcm rate * mclk-fs */ //不需要mclk时钟 }; daudio1_codec: soundcard-mach,codec { //mclk时钟源,做从机无需配置。 }; };
2.tp9930驱动配置i2s输出, 16bit 16slot,由于是v853做从机所以无需新增codec驱动,直接在sensor驱动配置。
static struct regval_list reg_audio_init[] = { {0x40, 0x40}, // clear first {0x00, 0x00}, {0x01, 0x00}, {0x02, 0x00}, {0x03, 0x00}, {0x00, 0x01}, {0x01, 0x02}, {0x08, 0x03}, {0x09, 0x04}, {0x17, 0x00 | (DATA_BIT << 2)}, // 16bit {0x1B, 0x01 | (DATA_BIT << 6)}, {0x18, 0x80 | (SAMPLE_RATE)}, {0x19, 0x0F}, {0x1A, 0x15}, {0x37, 0x20}, {0x38, 0x38}, {0x3E, 0x00}, {0x3d, 0x01}, // audio reset {0x40, 0x00}, }; static void tp9930_audio_dataSet(struct v4l2_subdev *sd) { sensor_write_array(sd, reg_audio_init, ARRAY_SIZE(reg_audio_init)); }
3.使用alsa原生工具测试,
arecord -Dplug:Capture1Mic:8000 /tmp/1.wav -f S16_LE -c 16 -r 8000 -d 10 可以录到tp9930四路pcm数据
使用sdk demo 发现无声音,经排查v853公版配置i2s1模式作为aec回录,自动打开回录功能,amixer cset numid=3 0 -c 1 修改控件后可以录到声音。
因此需要关闭sdk config aec开关
4.声卡复合插件的配置
在target/allwinner/v853-perf1/busybox-init-base-files/etc/asound.conf中配置复合插件如下复合声卡插件
pcm.Capture1MicPlusAec { type route slave.pcm { type multi slaves { a {pcm Capture2MicHard channels 2} //主控两路声卡 b {pcm CaptureI2SRX channels 4} //tp9930 4路 } bindings { 0 {slave a channel 0} 1 {slave a channel 1} 2 {slave b channel 0} 3 {slave b channel 1} 4 {slave b channel 2} 5 {slave b channel 3} } } ttable.0.0 1 ttable.1.1 1 ttable.2.2 1 ttable.3.3 1 ttable.4.4 1 ttable.5.5 1 } tp9930四路mic pcm.CaptureI2SRX { type hooks slave.pcm "hw:snddaudio1,0" hooks.0 { type ctl_elems hook_args [ { name "loopback debug" preserve true optional true value 0 } ] } } //主控两路mic pcm.Capture2MicHard { type hooks slave.pcm "hw:0,0" hooks.0 { type ctl_elems hook_args [ { name "MIC1 Switch" preserve true optional true value 1 } { name "MIC2 Switch" preserve true optional true value 1 } ] } } sampe ai conf修改如下 [parameter] pcm_file_path = "/tmp/sample_ai_pcm.wav" pcm_sample_rate = 8000 pcm_channel_cnt = 6 pcm_bit_width = 16 pcm_frame_size = 1024 pcm_cap_duration = 10 pcm_ai_gain = 100
测试后可以录到6路音频
5.aec应用层接口
首先需要拆分audio codec mic0 的数据,位深16bit,交错模式下,一个声道两个字节,参考aec demo mic1作为近端数据,mic1为远端录音
WebRtcAec_BufferFarend(aecmInst, far_frame, NN);//对参考声音(回声)的处理 WebRtcAec_Process(aecmInst, near_frame, NULL, out_frame, NULL, NN,40,0);//回声消除
最后可以录到out frame 回声消除后的pcm数据。
6.aenc编码
将拆分后的声道数据frame送到aenc chn编码输出为aac格式码流,可参考aenc_sample.c
-
【FAQ】全志系列芯片 如何在Tina Linux中使用脚本完成定制化升级?
1.主题
在Tina Linux中,如何使用脚本完成定制化升级
2.问题背景
硬件:全平台
软件:Tina
其他:支持OTA升级的平台,可实现脚本定制化升级3.具体表现
在OTA升级过程中,添加定制化需求,实现控制变量升级。
4.问题分析
利用swupdate升级满足定制化脚本需求
5.解决办法
因为swupdate支持脚本,所以在升级过程中,添加能够实现定制升级的脚本即可,将带有定制升级的脚本编入策略描述文件(sw-descrition)OTA升级配置文件中(sw-subimgs),在打包ota升级包时,将脚本一起打包进ota包中。在进行下面的配置后,输入升级命令时,首先开始执行脚本中的内容,满足升级条件后,再进行升级流程。下面进行详细的步骤介绍:
1.swupdate支持shellscript脚本,需要以下功能配置(默认选中)
执行:make menuconfig/make ota_menuconfig Allwinner ---> <*> swupdate............................. software update for embedded system Swupdate Settings ---> General Configuration ---> [*] enable pre and postinstall scripts Image Handlers ---> [*] shellscript
2.在swupdate文件夹下创建脚本,名字随意,在脚本中写入要实现的功能。例如:目前有一个方案需要升级,但是分为A,B两种产品,对应做了不同的功能,为了防止升级混淆,可以利用脚本去控制变量升级,比如A产品方案中的env,可以添加一个变量project=a,B产品方案中的env添加一个变量project=b,那么脚本中的内容就可以判断project=a或b时,继续完成升级。env中添加内容和脚本内容举例如下:
env中:
脚本内容如下:
3.在描述文件中添加脚本功能,在sw-description中添加以下代码:
4.将脚本打包进ota包中,脚本名字可以任意起,我这里是preinstall_checkAB.sh。
5.重新编译主系统和recovery系统,烧录固件,打包ota包,再进行验证。
6.验证:当校验失败时,返回值为1,会看到如下打印,不能升级。
校验成功时,返回值为0,看到如下打印,升级成功。
-
【FAQ】全志R128芯片 如何在FreeRTOS下对代码源文件进行快速预处理?
1.主题
FreeRTOS_R128_如何对代码源文件进行快速预处理
2.问题背景
硬件:R128
软件:FreeRTOS客户在日常的开发过程中,会碰到源文件中有许多的宏或许多条件编译的代码,有时候需要快速确认多个宏展开后的内容或快速确认条件编译到底编译的是哪一部分代码。
那么如何在现有SDK环境下对代码源文件进行快速的预处理?
3.问题分析
预处理思路:
目前R128的SDK使用了修改后的kbuild构建框架(原始kbuild构建框架来自linux kernel),kbuild构建框架在编译每个源文件时会同时生成一个.xxx.o.cmd文件,
这个文件里包含了编译此源文件时依赖的一些头文件以及编译时使用的编译命令,通过修改编译命令将编译时的-c参数修改为-E参数即可完成对源文件的预处理。
4.解决办法
可以手动从.xxx.o.cmd文件中拿到编译命令并修改,但这适用于要预处理的文件比较少的情况,且各个源文件的编译命令的修改过程基本相同,
因此可以使用shell脚本自动预处理来代替人工手动预处理。
这里提供一个generate_preprocess_file.sh脚本(脚本文件见附件),脚本使用方法为:./generate_preprocess_file.sh <source file path>
脚本输出的日志中最后2行会有生成的预处理文件的路径。
注意:脚本中调用了astyle工具将生成的预处理文件进行代码格式化,请在使用前安装astyle工具,否则脚本输出日志的最后一行将会报错。下面具体描述下对各个核心的代码源文件进行自动预处理的步骤。
M33核和C906核代码源文件自动预处理步骤
- 拷贝generate_preprocess_file.sh脚本到lichee/rtos目录,并执行命令chmod +x ./generate_preprocess_file.sh确保脚本文件有可执行权限
- 执行lunch_rtos选择对应方案的M33核或者C906核
- 执行./generate_preprocess_file.sh xxx.c命令对某个源文件进行预处理
DSP核代码源文件自动预处理步骤
- 拷贝generate_preprocess_file.sh脚本到lichee/dsp目录,并执行命令chmod +x ./generate_preprocess_file.sh确保脚本文件有可执行权限
- 执行./generate_preprocess_file.sh xxx.c命令对某个源文件进行预处理
脚本使用示例
下面是对M33核代码源文件arch/arm/armv8m/sun20iw2p1/sun20i.c进行预处理的结果
可以看到最终生成的预处理文件有如下2个:
build/r128s2_pro_m33/arch/arm/armv8m/sun20iw2p1/sun20i.i build/r128s2_pro_m33/arch/arm/armv8m/sun20iw2p1/sun20i.i.orig
其中xxx.i.orig表示最原始的由编译器生成的预处理文件,xxx.i表示进行代码格式化后的预处理文件。
用vi打开对应的预处理文件后可以看到代码中的宏以及条件编译已全部展开:
-
【FAQ】全志R128芯片 如何在FreeRTOS中调整系统运行在hspsram上?
1.主题
FreeRTOS_R128_调整系统运行在hspsram上
2.问题背景
硬件:R128
软件:FreeRTOS背景:R128的m33和c906两个核运行的系统都是默认运行在lspsram上的(低速psram,默认频率为192MHz),hspsram默认是分给dsp核使用的。如果方案不使用dsp,那么hspsram就可以留给m33或者是c906进行使用了。这里将讲述如何将hspsram的地址空间分配给m33或者c906使用。(hspsram的默认工作频率为800MHz)
3.解决办法
一、讲述如何取消启动dsp
首先,选择好m33的方案,因为dsp是由m33来启动的。这里以r128 pro方案来作为演示。
source envsetup.sh lunch_rtos r128s2_pro_m33
然后运行mrtos_menuconfig来取消选中启动dsp。
找到该项,然后取消选中,编译r128_pro_m33方案即可。
二、将m33和c906设置成在hspsram运行
首先选择m33的方案
source envsetup.sh lunch_rtos r128s2_pro_m33
接着运行mrtos_menuconfig修改启动地址,所需要修改的配置如下图所示:
lspsram地址空间为0x8000000~0x87fffff,hspsram地址空间为0xc000000~0xc7fffff。
这里将所需要的修改的核的地址,将8改成c即可。如修改m33的起始地址,将0x08004000,修改成0x0c004000即可,如下图。
修改完成后,重新编译m33方案。
三、如果需要修改c906的起始地址为hspsram,还需要重新配置c906方案
首先选择c906的方案
source envsetup.sh lunch_rtos r128s2_pro_c906
接着运行mrtos_menuconfig修改c906启动地址,修改方式如下图:
然后保存配置,重新编译c906方案。
四、最后修改配置文件
首先,确认自己方案使用的image_header文件,运行一次打包的命令pack,从打包的log中能看出方案所选的文件,如下图:
然后通过命令
cconfigs
即可跳转到image_header的路径下:${root_dir}/board/r128s2/pro/configs
如果需要修改m33的地址,则只修改m33的即可,c906同理。如果取消启动dsp,则直接注销掉dsp的配置代码。
最后,修改m33和c906在hspsram运行,并且取消运行dsp的image_header文件修改可如下所示:
diff --git a/r128s2/pro/configs/image_header_xip.cfg b/r128s2/pro/configs/image_header_xip.cfg index 5c83ac1..fc87d06 100755 --- a/r128s2/pro/configs/image_header_xip.cfg +++ b/r128s2/pro/configs/image_header_xip.cfg @@ -30,9 +30,9 @@ {"id": "0xa5e05a00", "bin": "boot0_spinor.fex", "attr": "0x01", "sram_offs": "0x40b0000", "ep": "0x40b0080"}, {"id": "0xa5e05a00", "bin": "boot0_sdcard.fex", "attr": "0x01", "sram_offs": "0x40b0000", "ep": "0x40b0080"}, {"id": "0xa5e15a01", "bin": "freertos-gz.fex", "attr": "0x01"}, - {"id": "0xa5e05a01", "bin": "rtos_arm.fex", "attr": "0x01", "sram_offs": "0x8004000", "ep": "0x8004000"}, - {"id": "0xa5e05a01", "bin": "rtos_riscv.fex", "attr": "0x01", "sram_offs": "0x8200000", "ep": "0x8200000"}, - {"id": "0xa5e05a01", "bin": "rtos_dsp.fex", "attr": "0x01", "sram_offs": "0xc000000", "ep": "0xc000660"}, + {"id": "0xa5e05a01", "bin": "rtos_arm.fex", "attr": "0x01", "sram_offs": "0xc004000", "ep": "0xc004000"}, + {"id": "0xa5e05a01", "bin": "rtos_riscv.fex", "attr": "0x01", "sram_offs": "0xc200000", "ep": "0xc200000"}, + // {"id": "0xa5e05a01", "bin": "rtos_dsp.fex", "attr": "0x01", "sram_offs": "0xc000000", "ep": "0xc000660"}, {"id": "0xa5e05a01", "bin": "etf.fex", "attr": "0x01", "sram_offs": "0x4000000", "ep": "0x4000000"}, {"id": "0xa5e05a01", "bin": "rtos_xip_rv.fex", "attr": "0x02"}, {}
-
全志V85x硬件设计大赛作品精选第一期,快来Pick你心目中的最佳方案
1、V853-智能交互摄像头开发板
该参赛作品基于全志V853开发板制作的一款类似眼镜外挂的小产品,可以对场景进行辅助识别,并通过云端交互实现物联网控制,进一步实现物联网与人机交互的融合。
开发板配置了摄像头和小屏幕接口,并外挂DDR3和EMMC,充分发挥了主控的编解码能力和边缘计算能力(NPU),是一个很有创意的边缘计算设计。
2、V853-DouPi方案设计
该参赛作品基于全志V853芯片设计了SCB 单板,使用了V853的音视频接口和丰富的外设接口,并外接AXP电源管理芯片。
在SCB单板上包含了一路千兆网口、一路UART、一路MIPI CSI、一路MIPI DSI、一路USB OTG、板载WiFi/蓝牙以及15个GPIO管脚输出。
3、V853-服务器管理及协处理卡
该参赛作品基于全志V853芯片设计了一个服务器的管理设备,实现服务器管理及协处理卡功能,对服务器进行管理和检测,实时反馈信息,通过物联网接入网络,可以远程在线管理。
开发板集成了1路百兆管理网口,1路UART调试功能,1路VGA显示功能,1路音频输出,1路USB功能,主板电压检测功能,1路视频检测功能,WIFI功能。
4、V853-全功能BTB学习开发板
该参赛作品基于全志V853芯片设计了一块开发板,分为核心板和底板两个部分,引用了V853所支持的大部分功能引脚,是名副其实的“全功能”开发板。
核心板采用BTB设计,并板载了eMMC、DDR、AXP电源芯片,最大支持 1G DDR3 32GB eMMC存储;核心板背面采用了3x60pin排针设计,支持自贴NAND FLASH。
底板上引出了绝大部分资源,具体包括两个百兆网口、RGB888及MIPI DSI显示接口、USB OTG、MIPI CSI摄像头、MIC、TF卡接口等其它接口。
目前开发板功能还在验证中,验证没有问题后,会公开底板配套的原理图、尺寸图、使用文档,配套的视频以及嵌入式AI开发等所有资源。
5、V853-全功能BTB学习开发板
该参赛作品基于全志V853芯片设计了一款开发板,引出console调试串口和端子外接4G+GPS模块,并集成SD CARD,千兆以太网,百兆以太网,WiFi,音频输入输出,MIPI CSI ,MIPI DSI ,按键,LED,G-SENSOR,USB及USB HUB,引出console调试串口,ADC引脚引出,2.54端子引出一路串口,两路PWM及GPIO。
开源硬件设计大赛
本次大赛由华秋电子联合全志在线共同举办,感谢合一智联对比赛的赞助。
资料获取
以上参赛方案详细设计资料均可前往电子发烧友论坛-全志科技小组获取:https://bbs.elecfans.com/zhuti_1576_1.html
-
【FAQ】全志R128芯片 在FreeRTOS下如何查看并更改各CPU核的默认运行频率?
1.主题
FreeRTOS_R128_如何查看并更改各CPU核的默认运行频率
2.问题背景
硬件:R128
软件:FreeRTOS客户在日常开发过程中,需要评估各CPU核的默认运行频率,有时候需要降低默认运行频率来降低功耗,有时候又需要提升默认运行频率来增加算力。
那么如何从查看并更改R128上各CPU核的默认运行频率?3.解决办法
查看各CPU核默认运行频率
默认启动各个CPU核时会打印对应CPU核的运行频率,如下图所示:
更改各CPU核默认运行频率方法
由于R128中各CPU核的默认运行频率是M33核上的代码配置的,因此只需修改M33核的代码即可。
具体步骤为:- 首先通过执行crtos命令切换到rtos代码目录,rtos代码目录路径为:lichee/rtos
- 然后修改文件arch/arm/armv8m/sun20iw2p1/sun20i.c里设置相关时钟频率的地方
M33核
M33核相关时钟硬件如下图:
目前SDK中M33核时钟ar200a_hclk的来源为:DPLL1输出时钟经过第一个分频器输出ck1_m33时钟,然后通过第二个分频器输出sysclk钟,最后通过一个多路选择器输出ar200a_hclk。
DPLL1输出时钟的频率已经确定为1920M,因此要修改M33核的时钟,则只需要修改这2个分频器的分频值即可。
由于SDK中默认将第一个分频器的分频值定为5(此分频器的分频值取值范围为4-8),也即ck1_m33时钟频率为1920/5=384M,而第二个分频器的分频值取值范围为1-16,因此如果要修改的M33核时钟频率在24M到384M之间且可以被384M整除,则只需要修改第2个分频器的分频值,例如将M33核默认运行频率修改为128M,则只需修改宏AR200A_FREQ即可,如下所示:
diff --git a/arch/arm/armv8m/sun20iw2p1/sun20i.c b/arch/arm/armv8m/sun20iw2p1/sun20i.c index 9b8c1cb1..c09444fc 100755 --- a/arch/arm/armv8m/sun20iw2p1/sun20i.c +++ b/arch/arm/armv8m/sun20iw2p1/sun20i.c @@ -445,7 +445,7 @@ static void rcosc_init(void) #define DPLL1_FREQ (1920000000) #define DPLL2_FREQ (1920000000) #define DPLL3_FREQ (1600000000) -#define AR200A_FREQ ( 192000000) +#define AR200A_FREQ ( 128000000) #define DEVICE_FREQ ( 192000000) static int sys_clk_init(void) {
若要修改的M33核时钟频率不满足上述条件,则需要同时修改函数ar200a_clk_set里设置ck1_m33时钟频率的地方,例如修改ck1_m33时钟为240M(1920/8=240M):
diff --git a/arch/arm/armv8m/sun20iw2p1/sun20i.c b/arch/arm/armv8m/sun20iw2p1/sun20i.c index 9b8c1cb1..29b71137 100755 --- a/arch/arm/armv8m/sun20iw2p1/sun20i.c +++ b/arch/arm/armv8m/sun20iw2p1/sun20i.c @@ -190,7 +190,7 @@ static int ar200a_clk_set(u32 freq) /*fixed 384M*/ //sr32(CCMU_AON_BASE+0xa4, 0, 3, 0x3); //0x4004c4a4: 0x8080000b - ret = hal_clk_set_rate(clk_ck1_m33, 384000000); + ret = hal_clk_set_rate(clk_ck1_m33, 240000000); if (HAL_CLK_STATUS_OK != ret) { ret = -1; goto err2;
C906核
C906核相关时钟硬件如下图:
目前SDK中C906核时钟rv_sys_clk的来源为:DPLL1输出时钟经过第一个分频器输出ck1_906时钟,然后通过第二个分频器输出rv_sys_clk时钟。
DPLL1输出时钟的频率已经确定为1920M,因此要修改C906核的时钟,则只需要修改这2个分频器的分频值即可,第一个分频器的分频值可取2、2.5、3、4、7,第二个分频器的分频值可取1、2、4、8。
例如将C906核默认运行频率修改为320M,需要修改sun20i_boot_c906函数中2处设置频率的地方,:
diff --git a/arch/arm/armv8m/sun20iw2p1/sun20i.c b/arch/arm/armv8m/sun20iw2p1/sun20i.c index 9b8c1cb1..5798657b 100755 --- a/arch/arm/armv8m/sun20iw2p1/sun20i.c +++ b/arch/arm/armv8m/sun20iw2p1/sun20i.c @@ -596,7 +596,7 @@ int sun20i_boot_c906(void) //set clk_ck1_c906 clk to 480M //sr32(CCMU_AON_BASE+0xa4, 4, 3, 0x1); - ret = hal_clk_set_rate(clk_ck1_c906, 480000000); + ret = hal_clk_set_rate(clk_ck1_c906, 640000000); if (HAL_CLK_STATUS_OK != ret) { ret = -1; goto err2; @@ -632,7 +632,7 @@ int sun20i_boot_c906(void) //set clk_ck_c906_div to 480000000; //sr32(CCMU_BASE+0x064, 0, 2, 0x0); clk_c906_div = hal_clock_get(HAL_SUNXI_CCU, CLK_RISCV_DIV); - ret = hal_clk_set_rate(clk_c906_div, 480000000); + ret = hal_clk_set_rate(clk_c906_div, 320000000); if (HAL_CLK_STATUS_OK != ret) { ret = -1; goto err6;
PS:由于第一个分频器无法输出320M时钟,故先配置第一个分频器输出640M的ck1_c906时钟,然后由第二个分频器再进行2分频,从而得到320M的C906核时钟。
DSP核
DSP核相关时钟硬件如下图:
目前SDK中DSP核时钟dsp_sys_clk的来源为:DPLL3输出时钟经过第一个分频器输出ck3_hifi5时钟,然后通过第二个分频器输出dsp_sys_clk时钟。
DPLL3输出时钟的频率已经确定为1600M,因此要修改DSP核的时钟,则只需要修改这2个分频器的分频值即可,第一个分频器的分频值可取3、4、5、6、7,第二个分频器的分频值可取1、2、4、8。
例如将DSP核默认运行频率修改为320M,只需修改宏DSP_CORE_CLOCK_FREQ即可,:
diff --git a/arch/arm/armv8m/sun20iw2p1/sun20i.c b/arch/arm/armv8m/sun20iw2p1/sun20i.c index 9b8c1cb1..97d03ad7 100755 --- a/arch/arm/armv8m/sun20iw2p1/sun20i.c +++ b/arch/arm/armv8m/sun20iw2p1/sun20i.c @@ -703,7 +703,7 @@ err1: #if defined(CONFIG_ARCH_ARMV8M_DEFAULT_BOOT_DSP) || defined(CONFIG_COMMAND_BOOT_DSP) \ || defined(CONFIG_PM_SUBSYS_DSP_SUPPORT) -#define DSP_CORE_CLOCK_FREQ (400000000) +#define DSP_CORE_CLOCK_FREQ (320000000) #define DSP_LDO_WORK_VOLT (1200) //400M@1.2V, 274M@1.1V int __sun20i_boot_dsp_with_start_addr(uint32_t dsp_start_addr) {
另外目前SDK代码中第一个分频器和第二个分频都配置成了相同的频率,若第一个分频器无法直接输出想要设置的频率,则需要分别将2个分频器配置成不同的输出频率。例如将DSP核默认运行频率修改为200M,第一个分频器最低输出时钟频率为1600/7=228.57M,无法直接输出200M,因此需要先配置第一个分频器输出400M的ck3_hifi5时钟,然后由第二个分频器进行2分频从而得到200M的dsp_sys_clk时钟,主要修改如下所示:
diff --git a/arch/arm/armv8m/sun20iw2p1/sun20i.c b/arch/arm/armv8m/sun20iw2p1/sun20i.c index 9b8c1cb1..53f6828a 100755 --- a/arch/arm/armv8m/sun20iw2p1/sun20i.c +++ b/arch/arm/armv8m/sun20iw2p1/sun20i.c @@ -703,7 +703,7 @@ err1: #if defined(CONFIG_ARCH_ARMV8M_DEFAULT_BOOT_DSP) || defined(CONFIG_COMMAND_BOOT_DSP) \ || defined(CONFIG_PM_SUBSYS_DSP_SUPPORT) -#define DSP_CORE_CLOCK_FREQ (400000000) +#define DSP_CORE_CLOCK_FREQ (200000000) #define DSP_LDO_WORK_VOLT (1200) //400M@1.2V, 274M@1.1V int __sun20i_boot_dsp_with_start_addr(uint32_t dsp_start_addr) { @@ -752,7 +752,7 @@ int __sun20i_boot_dsp_with_start_addr(uint32_t dsp_start_addr) //set clk_ck3_hifi5 clk to 400M //sr32(CCMU_AON_BASE+0xa8, 8, 3, 0x3); - ret = hal_clk_set_rate(clk_ck3_hifi5, DSP_CORE_CLOCK_FREQ); + ret = hal_clk_set_rate(clk_ck3_hifi5, 400000000); if (HAL_CLK_STATUS_OK != ret) { ret = -1; goto err2;
修改完成后重新编译M33核固件,因为R128中各CPU核的默认运行频率是M33核上的代码配置的。
可先执行lunch_rtos选择对应方案的M33核,然后再执行mrtos编译以及执行pack命令打包固件。下图是修改M33核频率为128M、C906核频率为320M、DSP核频率为320M后的效果:
-
【FAQ】全志V85x芯片 如何使用tiger lcd时lti锐化功能时程序abort?
1.主题
使用tiger lcd时lti锐化功能时程序abort
2.问题背景
产品:T113
软件:tina5.0
其他:使用tiger lcd调试lti参数3.问题描述
3.1复现步骤
- m kerne_menuconfig选中按照如下方式选中pq驱动
Device Drivers ---> Graphics support ---> Frame buffer Devices ---> Video support for sunxi ---> [*] Support PQ driver
- m menuconfig按照如下方式勾选下位机软件
Allwinner ---> Display ---> <*> pqd.................................................................. pqd
- 编译烧录后进入控制台,输入usbdevice命令打开切换usb role后,再输入pqd运行上位机软件。
- 电脑端打开tiger lcd,点击open后切换到lti调试界面,调节参数后点write写入
3.2具体表现
下位机程序abort退出,结果如图所示。
4.问题分析
- unsorted double linked list corrupted表明malloc时链表的被破坏,找不到下一个节点,该问题可能是越界写内存导致。
- 可以选择使用libasan进行调试,需要在Makefile中加入如下选项,
并且在menuconfig按照如下方式配置
Base system ---> [*] Use external toolchain ---> -*- libc........................................................... C library Configuration ---> (./lib/ld{-*.so,-linux*.so.*} ./lib/lib{anl,c,gomp,cidn,crypt,dl,m,nsl,nss_dns,nss_files,resolv,util,ssp,asan}{-*.so,.so.*}) libc shared library files (use wildcards)
-
重新编译并将未strip过的可执行文件用adb推至/usr/bin下,重新复现问题,得到如下信息。
-
可以看出问题在platform/allwinner/display/pqd/hardwares/de20x/de20x.c文件中的de20x_set_lti里。实际上这里malloc的数组是用来存储lti 11个寄存器的值
再通过ioctl写入物理寄存器,但是malloc的长度PEAK_REG_NUM只有6,因此这里会发生写越界。同时如下代码处也要改过来
5.根本原因
寄存器数量配置错误,导致写内存越界,破坏了链表结构LTI_REG_NUM
6.解决办法
修改platform/allwinner/display/pqd/hardwares/de20x/de20x.c中de20x_set_lti和de20x_get_lti函数malloc的大小为LTI_REG_NUM,具体方式可参考如下补丁。
diff --git a/hardwares/de20x/de20x.c b/hardwares/de20x/de20x.c index c8a1084..7aa66be 100644 --- a/hardwares/de20x/de20x.c +++ b/hardwares/de20x/de20x.c @@ -328,7 +328,7 @@ int de20x_set_lti(const char* data, int size) int ret; UNUSED(size); struct lti_sharp *lti = (struct lti_sharp *)data; - struct register_data* rdata = malloc(sizeof(struct register_data) * PEAK_REG_NUM); + struct register_data* rdata = malloc(sizeof(struct register_data) * LTI_REG_NUM); get_lti_register_offset(rdata); ret = de20x_get_registers(rdata, LTI_REG_NUM); if (ret) { @@ -371,7 +371,7 @@ int de20x_get_lti(char* data, int size) int ret; UNUSED(size); struct lti_sharp *lti = (struct lti_sharp *)data; - struct register_data* rdata = malloc(sizeof(struct register_data) * PEAK_REG_NUM); + struct register_data* rdata = malloc(sizeof(struct register_data) * LTI_REG_NUM); get_lti_register_offset(rdata); ret = de20x_get_registers(rdata, LTI_REG_NUM); if (ret) {
-
【FAQ】全志V85x芯片 OTA升级失败出现"Found installer for stream recovery ubivol"以及"cannot write 16384 bytes: Operation not permitted"报错如何解决?
1.主题
OTA升级失败出现"Found installer for stream recovery ubivol"以及"cannot write 16384 bytes: Operation not permitted"报错
2.问题背景
软件:Tina
3.问题描述
3.1复现步骤
- 在服务器生成OTA升级包。
- 将OTA升级包推入小机端,执行升级命令。
- 升级失败。
3.2具体表现
OTA升级失败,通过命令 cat /mnt/UDISK/swupdate.log查看升级失败log,出现 “cannot write 16384 bytes: Operation not permitted” 或 “Found installer for stream recovery ubivol” 错误。
4.问题分析
通过两条报错可以猜测,不允许操作,不能写入,以及报ubivol等问题。
可以在设备端确认当前介质,执行ll dev/by-name确认(例:当前为emmc介质,为mmc*,如果为nand ubi介质为ubi* 或 nand*)
5.根本原因
升级包的中文件的介质与当前板子的介质不对应,不能操作分区。
6.解决办法
- 对于非ubi方案,无需选中 CONFIG_SWUPDATE_CONFIG_UBIVOL选项,在打包OTA包时,命令无需使用ubi后缀。
- 对于ubi方案,需要选中MTD:SWUPDATE_CONFIG_MTD选项,再选中 CONFIG_SWUPDATE_CONFIG_UBIVOL 选项,在打包OTA包时,使用ubi后缀,例如:swupdate_pack_swu -ubi 或 swupdate_pack_swu -ab-ubi。
- 以上操作在recovery升级中,在menuconfig和ota_menuconfig中都要执行,而AB升级,在menuconfig中执行即可。
-
【FAQ】全志V85x芯片 如何放开快启方案的打印?
1.主题
如何放开快启方案的打印
2.问题背景
产品:v851系列快启方案
软件:tina
其他:特有版本信息添加自由描述 (如固件版本,复现概率,特定环境)
为什么在boot0增加打印启动过程无法看到?3.复现步骤
在brandy/brandy-2.0/spl/的代码流程中可以发现很多使用printf方式的打印未被打印出来
4.问题分析
快起方案为了缩短启动时间,将printf函数的打印关闭,使用printf函数无法在启动时打印,可使用以下三种方式的任意一种都可以放开打印。
- 编写代码时将printf替换为pr_emerg。
- 打包时,修改sys_config.fex文件中的debug_mode,置为1。
- 启动时,在键盘中输入D,只有一瞬间的捕获键盘输入的时间,可能需要重复几次才可成功。
-
【FAQ】全志V85x芯片 快起方式下如何配置isp led?
1.主题
快起方式如何配置isp led
2.问题背景
产品:v853,v851系列产品
软件:快启方案3.问题分析
sunxi平台在spl支持两种配置isp led的方式
1.通过修改源码方式
修改spl/common/update_ispparm.c文件中的的全局变量结构体
//spl/common/update_ispparm.c struct Camera_Param camera_param[] = { [enum_camera0] = { .sign = CAMERA1_SIGN, .addr = CFG_ISPPARAM_LOAD_ADDR, .adc_channel = CAMERA1_ADC_CHANNEL, //读取adc的通道 .gpio_info = { [enum_ir_cut0] = { .port = SUNXI_GPIO_D, //port 口 .port_num = 18, //port pin脚 .mul_sel = SUNXI_GPIO_OUTPUT, //功能配置 .pull = SUNXI_GPIO_PULL_DISABLE, //上拉模式 .drv_level = SUNXI_GPIO_DRV_LEVEL1, //驱动模式 .data = OUPUT_LOW_LEVEL, //初始化数据,此处表示初始化为低电平 ... },}},}
2.通过内核设备树方式
此方式需要打开fdt的宏CFG_SUNXI_FDT=y,此种方式优先级高于方式一
以853平台为例,增加以下节点即可
//arch/arm/boot/dts/sun8iw21p1.dtsi isp_boot0_gpio:isp_boot0_gpio@0 { device_type = "isp_boot0_gpio"; /* port:0x3--D 0xFF--no use * pin:0x5--5 * mul_sel:0x1 * pull:0xffffffff -- default * drv_level:0xffffffff * data:0x0 */ camera0_cut0 = <0x54 0x3 0x12 0x1 0x0 0x1 0x0>; camera0_cut1 = <0x54 0x3 0x8 0x1 0x0 0x1 0x0>; camera0_led = <0x54 0xFF 0xFF 0x1 0x0 0x1 0x0>; camera1_cut0 = <0x54 0x3 0x12 0x1 0x0 0x1 0x0>; camera1_cut1 = <0x54 0x3 0x8 0x1 0x0 0x1 0x0>; camera1_led = <0x54 0xFF 0xFF 0x1 0x0 0x1 0x0>; };
-
【FAQ】全志V系列芯片 在TinaLinux如何判断安全固件与rotpk.bin是否对应?
1.主题
TinaLinux如何判断安全固件与rotpk.bin是否对应
2.问题背景
客户在开发过程中,经常遇到安全固件烧录后,启动失败并不停烧录的问题。
这个问题有可能有多种原因,最常见的一种是安全固件与烧录到开发板efuse中的rotpk不一致。
如果可以从安全固件中提取rotpk的话,将提取的rotpk与efuse中烧录的rotpk(或一组签名密钥对中的rotpk.bin文件)对比,即可判断是否对应。
那么如何从安全固件中提取rotpk?
3.问题分析
提取思路:
安全固件中包含了各个镜像的签名证书,其中TOC1中包含了使用根密钥签名的证书。
全志安全启动使用的证书是X509格式,通过openssl可以解析根密钥签名的证书内容,提取证书中的公钥。
将公钥按照特定组织方式,再次计算sha256,即可获得安全固件中的根密钥公钥的hash值,即rotpk。
4.解决办法
这里提供一个genrotpkfromfw.sh的脚本,使用方法:
./genrotpkfromfw.sh <secure firmware>
执行完后,会在当前目录生成rotpk_rsa.bin,并打印其中的内容。
user@pc:$ ./getrotpkfromfw.sh tina_xxx_secure_v0.img Successfully get rotpk file: rotpk_rsa.bin from tina_xxx_secure_v0.img rotpk content: 00000000 90 fa 80 f1 54 49 51 2a 8a 04 23 97 06 6f 5f 78 |....TIQ*..#..o_x| 00000010 0b 6c 8f 89 21 98 e8 d1 ba a4 2e b6 ce d1 76 f3 |.l..!.........v.| 00000020
脚本内容如下:
#!/bin/bash function help_usage() { echo "Get rotpk from secure firmware" echo "USAGE: $0 <secure firmware>" } if [ -z "$1" ]; then help_usage exit 1 fi FW=$1 TOC_STR="|sunxi-secure" CERT=.cert_tmp GENPUBKEY_RSA=key_rsa_pub.bin ROTPK_RSA=rotpk_rsa.bin rm -f $CERT $GENPUBKEY_RSA $ROTPK_RSA ############################# # 1. get cert # ############################# toc_addr=`hexdump -C $FW | grep $TOC_STR | awk '{print strtonum("0x"$1)}'` cert_offset=`hexdump -s $(($toc_addr + 128)) -n 4 $FW | head -1| awk '{print strtonum("0x"$5$4$3$2)}'` cert_addr=$(($toc_addr+$cert_offset)) dd if=$FW of=$CERT bs=1 count=4k skip=$cert_addr 2> /dev/null if [ ! -f $CERT ]; then echo "Error: generate $CERT error" exit 1 fi ############################# # 2. get root public key # ############################# openssl x509 -modulus -in $CERT -inform der -noout | awk -F = '{print $2}' | xxd -r -ps > $GENPUBKEY_RSA openssl x509 -in $CERT -inform der -text -noout | grep 65537 > /dev/null if [ $? -eq 0 ]; then echo 010001 | xxd -r -ps >> $GENPUBKEY_RSA else echo "Error: RSA Exponent is not 65537" rm -f $CERT $GENPUBKEY_RSA $ROTPK_RSA exit 1 fi dd if=/dev/zero of=temp.bin bs=1 count=253 > /dev/null 2>&1 cat temp.bin | tr "\000" "\221" >> $GENPUBKEY_RSA rm -f temp.bin ############################# # 3. get rotpk # ############################# # generate $ROTPK_RSA based on $GENPUBKEY_RSA openssl dgst -sha256 -binary -out $ROTPK_RSA $GENPUBKEY_RSA rm -f $CERT $GENPUBKEY_RSA echo "Successfully get rotpk file: $ROTPK_RSA from $FW" echo "rotpk content:" hexdump -C $ROTPK_RSA
-
【FAQ】全志V853芯片 Tina Linux下网络ADB内存泄露如何修复?
1.主题
Tina Linux 网络ADB内存泄露修复
2.问题背景
硬件:V853
软件:Tina4.0 Linux-4.9
背景:使用网络adb时,反复connect disconnect,会发生内存泄露的问题。3.问题描述
3.1复现步骤
1、首先使能网络ADB功能。
killall adbd export ADB_TRANSPORT_PORT=5555 /bin/adbd -D > /dev/null &
2、连接无线网络,保持小机与测试电脑处于同一个局域网中。
由于每款产品连接无线网络的命令不大一致,因此此处就不对网络连接进行赘述了。3、编写bat脚本,进行压测。
:loop adb disconnect adb connect 192.168.0.101 adb disconnect timeout /t 3 goto :loop pause
4、使用内存泄露工具查看内存是否泄露。
3.2具体表现
使用内部一款内存泄露工具观察adbd工具内存占用情况:
行 2499: 632 504 74 /bin/adbd 行 2539: 632 504 74 /bin/adbd 行 2581: 632 504 74 /bin/adbd 行 2629: 632 504 74 /bin/adbd 行 2672: 632 504 74 /bin/adbd 行 2711: 632 504 74 /bin/adbd 行 2753: 632 504 74 /bin/adbd 行 2796: 632 504 74 /bin/adbd 行 2841: 632 504 74 /bin/adbd 行 2881: 632 504 74 /bin/adbd 行 2921: 632 504 74 /bin/adbd 行 2961: 632 504 74 /bin/adbd 行 3008: 632 504 74 /bin/adbd 行 3047: 632 504 74 /bin/adbd 行 3091: 632 504 74 /bin/adbd 行 3131: 632 504 74 /bin/adbd 行 3181: 632 504 74 /bin/adbd 行 3221: 632 504 74 /bin/adbd 行 3265: 632 504 74 /bin/adbd 行 3309: 632 504 74 /bin/adbd 行 3349: 632 504 74 /bin/adbd 行 3399: 632 504 74 /bin/adbd 行 3439: 632 504 74 /bin/adbd 行 3483: 632 504 74 /bin/adbd 行 3523: 632 504 74 /bin/adbd 行 3574: 632 504 74 /bin/adbd 行 3614: 632 504 74 /bin/adbd 行 3654: 632 504 74 /bin/adbd 行 3694: 632 636 206 /bin/adbd 行 3740: 632 636 206 /bin/adbd 行 3780: 632 636 206 /bin/adbd 行 3820: 632 636 206 /bin/adbd 行 3860: 632 636 206 /bin/adbd 行 3900: 632 636 206 /bin/adbd 行 3946: 632 636 206 /bin/adbd 行 3986: 632 636 206 /bin/adbd 行 4026: 632 636 206 /bin/adbd 行 4066: 632 636 206 /bin/adbd 行 4117: 632 636 202 /bin/adbd 行 4159: 632 636 206 /bin/adbd 行 4203: 632 636 202 /bin/adbd 行 4245: 632 636 204 /bin/adbd 行 4292: 632 636 206 /bin/adbd 行 4333: 632 668 234 /bin/adbd
发现确实存在内存泄露的情况。
4.问题分析
使能网络adb时,将命令改成:
killall adbd export ADB_TRANSPORT_PORT=5555 /bin/adbd -D &
将adbd的log信息输出到控制台上,观察adbd的运行情况。
根据log信息以及对比源码能够发现,在调用transport.c的transport_registration_func()函数时,当读到的action等于0,即退出adb时,就会free掉一些之前malloc的指针。
5.根本原因
通过在函数transport_registration_func()的free动作前后添加打印能够发现,在adb disconnect时,并没有调用到free的动作。
再在register_socket_transport()中calloc结构体atransport前后添加打印发现,每次adb connect时,都会重新调用register_socket_transport()去注册传输所需要的资源,并且会重新申请一篇内存。
那么就根据前后,就能知道在disconnect时有一篇内存没有释放,而后重新connect时又新申请内存,导致了内存的泄露。
对比有线adb,在连接时会申请结构体atransport的内存,在拔出usb线时也会free掉对应的内存。
再看回来函数transport_registration_func(),
在初始化时,这里注册了一个异步事情回调函数,当接收到事件的时候,就会调用transport_registration_func()去处理事件。对于拔出USB线来说,就会对gadget进行disconnect,然后composite gadget就会通过uevent通知应用层已经断开连接了,于是adbd就能够获取到事件从而去断开连接,释放资源。
而对于网络adb来说,暂无这种机制。所以就需要依靠在output_thread中,在通信失败后主动触发断连的操作。
在部分SDK中,存在这么一个补丁:
diff --git a/utils/adb/src/transport.c b/utils/adb/src/transport.c index 9fd6cc2..97a438b 100755 --- a/utils/adb/src/transport.c +++ b/utils/adb/src/transport.c @@ -285,7 +285,6 @@ static void *output_thread(void *_t) } else { D("%s: remote read failed for transport\n", t->serial); put_apacket(p); - break; } }
补丁的作用时,当通信失败时,就会断连、释放资源。这个补丁引入是为了修复USB ADB在通信不佳的情况下,触发了通信失败然后导致了USB重新枚举。
但是引入该补丁后,在使用网络ADB时,通信失败也不会被断连了,因此也造成了内存泄露的问题。6.解决办法
基于上述情况,在output_thread中加入限制的条件。在USB ADB时,取消break,让其一直在循环当中。对于网络ADB来说,则是执行break,当发生断连时,能够及时将资源释放掉。
修复的补丁如附件所示。
0001-adbd-only-transport_local-can-disconnect-in-outputth.patch
-
全志V85X系列芯片原理图要注意些什么?
全志V85X (包括V853、V853S、V851S、V851SE等)是一颗面向智能视觉领域推出的新一代高性能、低功耗的处理器SOC,可广泛用于智能门锁、智能考勤门禁、网络摄像头、行车记录仪、智能台灯等智能化升级相关行业。V85X 集成ARM Cortex-A7和RISC-V E907 双CPU,内置最大 1T 算力 NPU,使用全志自研 Smart 视频引擎,最大支持5M@25fps H.265编码和5M@25fps H.264编解码,同时集成高性能 ISP 图像处理器,可为客户提供专业级图像质量。V85X 还支持 16-bit DDR3/DDR3L,满足各类产品高带宽需求;支持 4lane MIPI-CSI/DVP/MIPI-DSI/RGB 等丰富的专用视频输入输出接口,满足各类AI视觉产品需求;采用先进的22nm工艺,具有更优的功耗和更小的芯片面积。
那么,在基于全志V85X芯片设计原理图的时候,需要注意什么呢?
大家可以根据下面的表格进行原理图设计的自查。其中各条注意事项也包括“必须遵守”和“建议”两个级别。顾名思义,必须遵守就是一定要按照我们的建议设计,不然会出问题。建议级别则是可选项,最好按照我们给出的建议进行设计。
模块 序号 检查内容 符合度 POWER TREE 1 POWER TREE红色部分电源具有默认的电压和上电时序,SOC部分的电源分配不能调整。 必须遵守 2 POWER TREE灰色部分电源默认上电为OFF,电源分配建议按照参考设计进行,减少软件适配工作。 建议 3 确保LCD/TP/SENSOR/CAMERA/AHD等外设的电压与PMIC电源电压匹配。 建议 4 确保PMIC各路电源的负载能力满足外设的需求。 必须遵守 5 POWER TREE 页请根据实际产品进行更新 建议 POWER(AXP2101) 1 ACIN接到AXP2101的VBUS管脚。 必须遵守 2 PMU的DCDC电源电感选型必须满足该路电源的电流需求,PMU部分的电容按推荐设计,不要随意更改; 必须遵守 3 PMU外围的电阻、电容参数值不能修改。1)AP-NMI 需要10K电阻上拉到RTC;2)AP-RESET不需要上拉电阻,由PMU内部集成,建议预留上拉电阻默认NC;3)PMU的I2C 无需上拉电阻,采用SOC 端IO内部上拉电阻,默认NC 方便调试;4)PWRON对地电容100nF请勿随意去掉; 必须遵守 4 TS PIN 为外接电池NTC电阻,若电池不带NTC电阻,此PIN接10K电阻到地。 必须遵守 5 CHGLED为OD输出,1K电阻接到PS,低电平指示灯亮; 必须遵守 6 BLDOIN的输入源可以为PS,也可以为DCDC1,选择DCDC1时需注意BLDO1/2的输出不能超过3.0V。建议使用DCDC1,提高电源效率。 必须遵守 7 DLDO2的输入源为DCDC4,只有使用DDR3/DDR3L电压超过1.35V时,才可作为1.2V输出(输出能力200mA) 必须遵守 8 VDD-SYSFB必须连接到AXP2101的DCDC3。 必须遵守 9 DCDC1的反馈作为DC1SW的输入,走线需加粗;DCDC4的反馈作为DLDO2的输入,走线需加粗; 必须遵守 10 需要根据选择的前置摄像头和后拉AHD 芯片确定供电电压和时序以及电源合并。 必须遵守 11 VCC-PC的电压选贴电阻必须符合FLASH部分的需求。 必须遵守 12 VCC33-USB的电压选贴电阻根据是否有4G待机场景需求进行选择,有USB待机需求时,VCC33-USB和VDD09-USB VCC5V-USB不能关闭(具体咨询全志FAE)。 必须遵守 13 VCC33-WIFI/VCCIO-WIFI/VCC18-WIFI的供电电压选配确认合理无误。 必须遵守 14 评估好各路电源的工作电压和最大工作电流,并建议在各路DCDC、LDO电源上标注清楚,以便PCB layout设计走线。 建议 15 若有其特殊待机场景或者供电需求,请列出让全志FAE确认。 必须遵守 DRAM 1 DRAM的原理图设计必须保持与标案参考设计相同,包含其中的元件位号、阻容器件参数值等。 必须遵守 2 DRAM的电源供电关系必须与标案参考设计相同。 必须遵守 3 DRAM的所使用的高精度电阻必须是1%,不能随意替用。 必须遵守 4 DRAM的物料选型必须采用DDR支持列表里面的型号。 必须遵守 5 特别注意DRAM 封装大小是否覆盖主流DRAM颗粒大小 建议 SOC 1 晶振部分的电路设计必须符合参考设计,串并接电阻不能删除,并联电容不能随意更改。 必须遵守 2 选用的晶振工作温度必须符合产品设计工作温度。 建议 3 SOC部分的电源滤波电容必须与参考设计相同,不能修改容值,也不能删减个数,需要备注靠近SOC pin放置。 必须遵守 4 VDD-SYS的电源电压需要根据产品CPU频率和NPU频率要求确定电压,具体参数请参考硬件设计指南钟的CPU/NPU 频率电压对应表。 必须遵守 5 VCC-RTC/VCC-PLL/AVCC等敏感电源电容靠近SOC PIN较放置 必须遵守 6 搭配PMU AXP2101方案时,PWR-BYPASS 默认接地,不使用PMC功能 必须遵守 7 AP-RESET、AP-NMI信号上必须接1nF下地电容。 必须遵守 8 SOC的系统功能配置脚必须正确无误,无特殊需求可以保持与标案设计一致。 必须遵守 9 使用内部LDOA时,注意评估供电电流不得超过50mA,超过50mA时,建议用外部LDO供电 必须遵守 10 PC口因在启动过程中有初始化EMMC/SPI等启动介质的操作,初始化过程中IO会有高电平信号,所以不建议PC口当做指示灯、喇叭或外设供电使能等功能使用 必须遵守 11 PF口因在启动过程中有初始化card介质的操作,初始化过程中IO会有高电平信号,所以不建议PF口当做指示灯、喇叭或外设供电使能等功能使用 必须遵守 12 GPIO口使用时,需确保GPIO口电平匹配,若需要加上拉电阻,需保证上拉电压为其供电电压域,防止有漏电情况发生。 必须遵守 FLASH 1 EMMC的选贴器件必须与贴片物料符合。 必须遵守 2 EMMC的IO电压VCC-PC必须符合实际工作电压需求。 必须遵守 3 EMMC的data信号线在SOC端的排序不同,确认信号设计与标案保持一致。 必须遵守 4 原理图中建议增加EMMC信号线走线的阻抗要求标注说明。 建议 5 原理图中建议标注清楚EMMC芯片的工作电压及最大工作电流。 建议 6 EMMC的物料选型必须采用EMMC支持列表里面的型号。 必须遵守 CARD 1 SDC0-CLK信号需串接33R电阻,并靠近AP摆放。 必须遵守 2 SDC0所有信号都不需要外接上拉,禁止使用外部上拉。 必须遵守 3 SD接口所有信号需挂ESD器件,若支持SD3.0高速模式,其中CLK、CMD、DATA信号的ESD器件容抗必须小于5PF。SD2.0需小于35PF。 必须遵守 4 Card 供电开关电路请保留。 建议 5 Card-DET信号建议串1K电阻,提高系统ESD 建议 6 建议在原理图中标注清楚TF卡信号线的走线阻抗要求,以便PCB layout设计。 建议 7 建议在原理图中标注清楚CARD电源的最大工作电流,以便PCB layout设计。 建议 USB 1 USB0接口电源需接到PMU的VBUS管脚。 必须遵守 2 USB接口必须挂ESD器件,USB D+/D-必须使用容抗小于5PF的ESD器件。 必须遵守 3 USB-DP/DM建议预留共模电感位置 建议 4 USB0具有OTG功能,USB-ID的设计必须参考标案原理图设计。 建议 5 建议在原理图中标注清楚USB信号线的走线阻抗要求,以便PCB layout设计。 建议 6 建议在原理图中标注清楚USB电源的最大工作电流,以便PCB layout设计。 建议 WIFI/BT 1 BT的PCM、UART数据流方向必须连接正确。PCM-DOUT ---- PCM-DINPCM-DIN ---- PCM-DOUTUART-RX ---- UART-TXUART-TX ---- UART-RXUART-RTS ---- UART-CTSUART-CTS ---- UART-RTS 必须遵守 2 WiFi/BT的中断唤醒、控制信号请按标案设计,请勿改动。 建议 3 需确保VCC33-WIFI电源的电压与WiFi芯片的工作电压保持一致。 必须遵守 4 WiFi的SDIO口需与PG口的电压保持一致,中断口的电压需与IO口的电压保持一致,不一致时需要加电平转换电路。 必须遵守 5 WiFi的天线需预留π型电路,便于天线匹配调试。 必须遵守 6 建议在原理图中标注清楚SDIO信号线的走线阻抗要求,以便PCB layout设计。 建议 7 建议在原理图中标注清楚WiFi电源的工作电压和最大工作电流,以便PCB layout设计。 建议 AUDIO 1 VRP、VRA2、AGND的接地点汇总成一点,必须通过0R电阻到大地。 必须遵守 2 Audio codec所有外围电阻以及电容的参数不能修改。 必须遵守 3 所有喇叭、LINEIN、MIC接口必须接ESD器件,且靠近座子摆放。 建议 4 单喇叭的默认使用LINEOUTP信号。 建议 5 MIC单端或差分配置是否正确。 必须遵守 6 功放的使能脚必须要有下拉电阻,推荐值为100K。 必须遵守 7 功放电源输入建议采用参考设计进行,方便后续ESD调试。 建议 8 建议在原理图中标注清楚AUDIO部分电源的工作电压和最大工作电流,以便PCB layout设计。 建议 RGB/MIPI-DSI 1 确保SOC端与LCD端的MIPI的信号差分对正确连接,正负不能反接,差分对之间不能调换。 必须遵守 2 PD口RGB的信号对应关系需与mapping保持一致,不能修改。 必须遵守 3 确保LCD的背光电路与LCD的规格匹配,反馈电路必须采用精度为1%的电阻,电流采样电阻精度必须为1%,封装满足功率需求。 必须遵守 4 确保LCD的正负压电源与LCD的规格匹配。 必须遵守 5 确保LCD的IO电压与SOC端的控制IO电压是否一致,若不一致,必须做电平转换处理,当前IO默认为3.3V电平。 必须遵守 6 建议在原理图中标注清楚LCD部分电源的工作电压和最大工作电流,以便PCB layout设计。 建议 CTP 1 CTP的I2C必须接上拉电阻,CTP与V853的IO电平必须匹配。 必须遵守 2 使用V853的TWI1与触摸屏进行通讯,此套TWI不与其他设备通讯 必须遵守 3 CTP的供电合理,不能存在漏电情况。 必须遵守 GSENSOR 1 sensor的供电及IO电平匹配必须合理。 必须遵守 2 sensor的I2C必须接上拉电阻。 必须遵守 3 同一路I2C挂多个sensor设备时,I2C地址不能重复。 必须遵守 4 sensor的供电和中断信号连接GPIO口需符合使用场景需求。 必须遵守 CAMERA 1 Camera的MCLK信号必须串接33R电阻,靠近AP端摆放,减少信号反射。 必须遵守 2 RST、STBY、CSI-SCK、CSI-SDA确保上拉到DOVDD-CSI 必须遵守 3 CAMERA供电电源AVDD-CSI、DVDD-CSI、DOVDD-CSI在接口处必须要挂滤波电容,具体容值请参考CAMERA sensor规格书。 必须遵守 4 AVDD-CSI为sensor内部模拟电路供电,必须独立供电,对地要加10uF电容靠近座子放置。目前推荐外挂高PSRR的LDO 供电防止低照度水纹情况。 必须遵守 5 检查摄像头对电源是否有是否有时序要求。 必须遵守 6 建议在原理图中标注清楚CAMERA电源的工作电压和最大工作电流,以便PCB layout设计。 建议 KEY 1 GPADC网络的采样范围为0-1.8V,需保证任意两个按键按下时GPADC电压差必须>=0.12V。 必须遵守 2 GPADC按键阻值建议和参考设计保持一致,采用1%的高精度电阻; 必须遵守 3 GPADC按键不使用时,也建议保留上拉电阻到AVCC; 建议 4 GPADC按键建议保留去抖电容和ESD器件。 建议 5 POWER、RESET按键建议保留去抖电容和ESD器件。 建议 6 硬件触发烧录固件的按键方式建议保留其中一种。 建议 DEBUG 1 CUPX的UART0调试接口必须保留,RX的电阻和二极管需要保留。 必须遵守 CONNECTOR 1 确保原理图中所有接口的线序与外设吻合一致,如LCD、TP、KEY、CAMERA等。 必须遵守 ESD 1 CPU/DRAM/晶振等ESD敏感的关键器件,建议预留金属屏蔽罩。 建议 2 复位信号在靠近AP端,必须保留一个对GND的滤波电容,容值固定选择1nF。 必须遵守 3 部分与外部直连或者裸露的接口,如speaker、MIC、耳机、USB、TF、DCIN等,必须加上ESD器件 。 必须遵守 4 所有按键必须挂ESD器件。 必须遵守 5 TEST系统配置脚未使用的,需悬空处理,PCB不能引出桩线。 必须遵守 6 外接容易受到ESD干扰的接口信号线上需预留串接电阻,用于ESD debug 调试;1)GPADC 按键功能或者光敏检测使用时,到主控间要串接K级电阻;2)MIC IN 输入到主控端预留串接0~5.1R电阻;3)LINE IN 输入到主控端(MIC1P/2P)增加K级分压电阻;4)USB 端口DM/DP信号串接0电阻需要保留; 必须遵守 DRC 1 所有电气规格检查必须无ERROR,所有WARNING与QUEStiON必须逐一确认合理,不合理的问题项需要优化处理。 建议 2 所有物理规格检查必须无ERROR,所有WARNING与QUESTION必须逐一确认合理,不合理的问题项需要优化处理。 建议 -
全志V85X系列芯片PCB设计注意事项
全志V85X (包括V853、V853S、V851S、V851SE等)是一颗面向智能视觉领域推出的新一代高性能、低功耗的处理器SOC,可广泛用于智能门锁、智能考勤门禁、网络摄像头、行车记录仪、智能台灯等智能化升级相关行业。V85X 集成ARM Cortex-A7和RISC-V E907 双CPU,内置最大 1T 算力 NPU,使用全志自研 Smart 视频引擎,最大支持5M@25fps H.265编码和5M@25fps H.264编解码,同时集成高性能 ISP 图像处理器,可为客户提供专业级图像质量。V85X 还支持 16-bit DDR3/DDR3L,满足各类产品高带宽需求;支持 4lane MIPI-CSI/DVP/MIPI-DSI/RGB 等丰富的专用视频输入输出接口,满足各类AI视觉产品需求;采用先进的22nm工艺,具有更优的功耗和更小的芯片面积。
那么,在基于全志V85X芯片设计PCB的时候,需要注意什么呢?
大家可以根据下面的表格进行OCB设计的自查。
其中各条注意事项也包括“必须遵守”和“建议”两个级别。顾名思义,必须遵守就是一定要按照我们的建议设计,不然会出问题。建议级别则是可选项,最好按照我们给出的建议进行设计。
模块 序号 检查内容 符合度 封装 1 全志提供的主控以及配套PMU和WiFi封装是否有更改 必须遵守 布局 1 主控需远离发热源(PMU/LDO/DCDC),板子发热源需分散。 建议 2 对温度比较敏感的器件,需远离发热源,如显示屏远离SOC和PMU。 必须遵守 3 所有模块的CLK串接电阻(SDC0-CLK/CARD-CLK/LCD-CLK)靠近主控摆放,串阻与主控CLK连接走线距离≤300mil。 建议 4 WiFi模组尽量靠近天线或天线接口。远离电源、DDR、LCD电路、摄像头、马达、SPEAKER等易产生干扰的模块。 建议 SOC 1 BGA 焊盘采用十字形连接,不要与GND铜箔全连接,焊接时防止散热过快,导致虚焊。电源 ball 除外。 建议 2 晶振尽量靠近IC摆放,使DCXO-XOUT/DCXO-XIN、X32KOUT/X32KIN走线小于600mil,减少PCB走线寄生电容,保证晶振频偏精度。 建议 3 晶振及其走线区域的外围和相邻层,用GND屏蔽保护,禁止其它走线。 必须遵守 4 时钟配置相关TEST 等PIN浮空处理 必须遵守 DRAM 5 DRAM部分完全参考DRAM模板进行设计,请勿随意更改叠层;若有模板更改需求,请联系全志FAE。 必须遵守 电源 6 所有电源走线必须满足电流大小要求; 必须遵守 7 VDD_SYS铜箔尽量宽,宽度不小于40mil,换层过孔不少于4个。 必须遵守 8 VDD-SYSFB 为电压反馈信号,远离板边及远离 DDR、CSI、SD、CARD 等干扰信号走线,走 Power 层沿其电源平面一起走到负载。如果与其他信号并排走,需要包地保护或 3W 间距。 必须遵守 9 VCC_DRAM铜箔尽量宽,宽度不小于40mil,换层过孔不少于4个。 必须遵守 10 所有电源走线必须满足电流大小要求; 必须遵守 11 敏感电源如VCC-RTC/VCC-PLL/AVCC等电容尽量靠近SOC PIN脚放置; 建议 12 VDD-SYS SOC 背面要放置一个10UF电容; 必须遵守 EMMC 13 CLK和DS信号做包地处理,如果不能包地则保持3W间距。 必须遵守 14 D0~D7、DS相对CLK等长控制≤300mil。 必须遵守 15 CLK 串接 33R 电阻靠近主控摆放,串阻与主控 CLK 连接走线距离≤300mil。 必须遵守 16 DS 下拉电阻靠近 EMMC 摆放。下拉电阻引入桩线长度≤200mil。 必须遵守 17 走线阻抗50 +/-10% ohm。参考平面完整。保持2W间距。 必须遵守 SD CARD 18 CLK做包地处理,如果不能包地则保持3W间距。 必须遵守 19 D0~D3相对CLK等长控制<500mil。 必须遵守 20 CLK 串接 电阻靠近主控摆放,串阻与主控 CLK 连接走线距离≤300mil。 必须遵守 21 走线阻抗50 +/-10% ohm。参考平面完整。保持2W间距。 必须遵守 CSI 22 PCLK的对地电容靠近主控,串联电阻靠近模组。 必须遵守 23 MCLK的对地电容靠近模组,串联电阻靠近主控。 必须遵守 24 Hsync的对地电容靠近主控。 必须遵守 25 Vsync、Hsync、Data串联电阻靠近模组。 必须遵守 26 PCLK单线包地,如果不能包地则保持3W间距。 必须遵守 27 MIPI差分走线需要100ohm阻抗匹配,优先走线,走线尽量短,少换层。 必须遵守 28 差分对内等长10mil,对间等长≤300mil(越小越好)。 必须遵守 29 各差分对间用地线隔开,或保持间距≥15mil。 必须遵守 LCD 30 LCD走线尽量满足3W原则,如不能,则至少要满足2W原则。 必须遵守 31 LCD-CLK要做包地处理,同时要注意对包地打孔。 必须遵守 32 LCD线的参考平面要完整。 必须遵守 33 MIPI-DSI阻抗要求:单端50ohm,差分100ohm。 必须遵守 34 MIPI-DSI差分对内长度差10mil内,差分对之间的长度差160mil内。 必须遵守 35 MIPI-DSI尽量保证走线的参考平面完整。 必须遵守 36 背光电路要求:PS,VLED+,VLED-所在的网络的线宽要在20mil以上。 必须遵守 AUDIO 37 AVCC、VRA1、VRA2和AGND接地电容、电阻靠近主控摆放 。 必须遵守 38 AGND铜箔宽度≥20mil,AGND接地电阻连接到GND平面的过孔≥2个。 必须遵守 39 MICxP、MICxN,类差分走线,线宽4mil,线距4mil,包地。 必须遵守 40 MBIAS与MICxP/MICxN并行走线,线宽10mil。包地。 必须遵守 41 LINEINL/R每对L、R信号分别包地,线宽4mil。走线及过孔远离高速信号及时钟信号。 必须遵守 42 LINEOUTP/N每对P、N信号分别类差分走线,线宽4mil,线距4mil,包地。 必须遵守 USB 43 USB-5V 线宽建议控制在40mil以上。 建议 44 USB-DM/USB-DP信号差分走线,差分阻抗为90ohm,保证走线参考层不跨分割。 必须遵守 45 USB-DM/USB-DP建议与其它信号的间距大于10 mil,避免走线走在器件下面或者与其他信号交叉。 建议 46 USB-DM/USB-DP走线在有空间的情况下,走线两边包地并打地过孔。 建议 47 USB-DM/USB-DP走线拐角的角度需保证大于等于135度;保证USB走线的长度控制在4000mil以内,走线的过孔不超过2个。 建议 WIFI 48 WIFI天线尽量远离电源、DDR、LCD电路、摄像头、马达、SPEAKER等易产生干扰的模块。 必须遵守 49 REF-CLK给WIFI模组使用,属于敏感信号,建议内层走线,需要包地走线。串接0R电阻靠近芯片放置; 必须遵守 50 天线馈线控制50ohm,为了增大线宽减少损耗,通常馈线相邻层挖空,隔层参考参考平面需要是完整地,同层地距离天线馈线距离保持一致,两边多打地过孔,地过孔需要回到芯片EPAD。 必须遵守 51 模组下方尽可能的增加地过孔和铺铜面积; 必须遵守 52 SDIO_CLK串接电阻靠近主控摆放。串阻与主控走线距离≤300mil。 必须遵守 53 SDIO_CLK做包地处理。如果不能包地则保持3W间距。 必须遵守 54 D0-D3相对CLK等长控制<500mil。 必须遵守 55 走线阻抗50 +/-10% ohm。参考平面完整。保持2W间距。 必须遵守 56 两层板时,D0-D3两两包地,CLK单线包地,线间距4mil。 必须遵守 PMU&DCDC 57 走线粗细需满足电源电流要求; 必须遵守 58 电压反馈线,输出电压经过电容滤波后,紧挨电容取点,用4~10mil的线引入PMIC即可。DCDC1的反馈走线给DC1SW供电,走线需要加粗。DCDC4的反馈走线给DLDO2供电,走线需要加粗。 必须遵守 59 反馈线在TOP面与LX的平行走线尽量短,禁止平行走线,推荐换层走线,不要从电感下方、交流路径下方或者紧挨CLK之类的跳变信号; 必须遵守 60 CPUFB/SYSFB采用远端反馈,反馈线从内层走线,避开CLK等时钟敏感信号,远离敏感信号过孔,沿其电源平面一起走到负载; 必须遵守 61 PMU 下方需尽可能的增加地过孔,尽可能的增大铜皮面积; 必须遵守 62 外挂DCDC走线要求如下:1)输入电容,输出电感反馈电阻尽量靠近IC放置;2)SW开关信号走线尽量短;3)从输出端到反馈电阻的反馈走线需避开SW信号;4)增加IC GND的铺铜面积和GND过孔散热; 建议 其他 63 其他未涉及模块请参照硬件设计指南或者其他器件datasheet layout要求 建议 ESD 1 CPU/DRAM/晶振等ESD敏感的关键器件,离外部金属接口的距离不小于20mm,如果小于20mm,建议预留金属屏蔽罩,并且距离其他板边不小于5mm。 建议 2 关键信号(RESET/NMI/Clock等)尽量避免与外部接口信号(USB/SD/HP等)或经过IO附近的走线相邻并行走线;如果不可避免,相邻并行的走线长度不超过100mils;IO保护地下方尽量不要走线,在必须走线的情况下建议走内层。 建议 3 部分与外部直连或者裸露的接口,如speaker、MIC、耳机、USB、TF、DCIN等,必须加上ESD器件 ,走线路径为先经过ESD器件再到SOC。 必须遵守 4 必须保证外部连接器(USB/SD)金属外壳接地良好,在板边直接通过过孔连接GND平面,每个GND焊盘与GND平面之间的连接过孔不少于3个。 必须遵守 5 在PCB四周增加地保护环;DDR线束四周建议用GND保护。 建议 -
【FAQ】全志V系列芯片如何实现mpp sample外编?
1.主题
V系列多媒体mpp sample外编方法
2.问题背景
用户希望Tina SDK 能提供编译工具链,多媒体库和头文件,使得自己编写的应用能编写Makefile 去链接多媒体库来编译生成app应用。
介于此方法,本FAQ提供一份编译系统demo样例。 里面包含说明了:- Tina SDK 如何输出多媒体库;
- 如何编写Makefile 去链接多媒体库;
- 如何将Tina SDK 里面MPP的sample 放到这里进行编译;
- 不需要Tina SDK 如何重新打包成全志固件;
- 指导如何制作SPINOR 的烧录器固件;
3.解决办法
请下载附件的编译系统,并放到linux 上运行。 执行./build.sh 既可以编译。每个目录下都有个REAMD说明,请查看。
README:
本编译系统是一个演示全志V系多媒体mpp sample 脱离Tian SDK 编译的并编译后放到rootfs下重新做固件的一个demo
1. 本编译系统目录结构介绍
├── aw_pack_src #这个目录是V系列Tina SDK 编译打包后输出的目录,里面包含了库和分区文件 ├── build.sh #编译脚本 ├── Makefile #编译Makefile,可作为自己工程的参考 ├── output #编译后的应用和中间产物 ├── sample #sample 放置的目录 ├── share_lib #需要依赖的动态库(设备端rootfs也有) ├── mk_firmware #制作全志固件的脚本 └── toolchain #编译工具链
2. 使用方法:
①将V系列多媒体sample 拷贝到./sample
目前下。阅读./sample/README
了解详情;
②将Tina SDK 新输出的文件夹aw_pack_src
重新替换当前的./aw_pack_src()
③执行./build.sh
进行编译
④编译成功后。在./out
可看到 sample 和 strip 后的sample3. Tina SDK 如何生成新的aw_pack_src(库和头文件)来替换?
- 选上配置
make menuconfig --->Target Images --->[*]support pack out of tina
- pack 打包,然后会在out/xx方案/生成一个目录:
aw_pack_src
,将此目录拷贝出来即可
4. 重新替换了个sample,但编译出错怎么解决?
-
cannot find -lxx 库
因为多媒体的库会根据make meunconfig
来配置一些功能组件。如果需要增加/裁剪功能,则编译出来可能就多或少一些库了。
如果发现报错cannot find -lxx
, 可以直接尝试修改Makefile,把这个-lxxx 去掉再编译试试。 -
undefined reference xxx: 函数
因为多媒体的库会根据make meunconfig
来配置一些功能组件。如果需要增加/裁剪,则编译出来可能就多或少一些库了。
如果发现报错undefined reference xxx:
,则可以库目录下执行grep -rn "xxx"
, 看能不能搜索出一些结果是关于库的,如:
grep -rn "AW_MPI_SYS_Init"
Binary file ./aw_pack_src/lib_aw/lib/eyesee-mpp/libaw_mpp.a matches
搜到AW_MPI_SYS_Init 结果在libaw_mpp.a库里面。 这时候在Makefile里面 加入-law_mpp 即可。
如果在本目录搜不到,则可以去Tina SDK目录搜索:
grep -rn "AW_MPI_SYS_Init" out/v851se-perf1/staging_dir/target/usr/lib #注意v851se-perf1 是板子的名称。 这个目录下是SDK 编译出来的所有库 。
-
【FAQ】全志T113芯片蓝牙音乐播放失败如何解决?
1.主题
T113-S3 蓝牙音乐播放失败问题
2.问题背景
硬件:T113 + XR829
软件:Linux(非Tina)3.问题描述
3.1复现步骤
#驱动路径要根据固件实际路径 insmod /lib/modules/5.4.61±ab179/xradio_btlpm.ko 等驱动安装完再执行后续操作 echo 0 > /sys/class/rfkill/rfkill0/state sleep 1 echo 1 > /sys/class/rfkill/rfkill0/state sleep 1 hciattach -n ttyS1 xradio & hciconfig hci0 up hciconfig hci0 piscan #启动蓝牙协议栈 bluetoothd -n & #设定本机为播放源 bluealsa -p a2dp-source & #进入蓝牙控制终端 bluetoothctl #扫描周边蓝牙设备 scan on #若例表中已找到设备则手动停止扫描 scan off #连接蓝牙音箱 connect <蓝牙音箱MAC>
连接成功提示Device 30:21:23:6F:18:E2 Connected: yes
#退出bluetoothctl exit #播放音乐aplay -D bluealsa:DEV=音箱mac 音乐文件路径 aplay -D bluealsa:DEV=30:21:23:6F:18:E2 /a.wav &
3.2具体表现
蓝牙音乐播放失败,并且出现蓝牙设备断开现象
4.问题分析
1、对比R328等Tina平台,以上的验证方法没有问题,bluez 和 bluealsa版本也一致,因此判断不是操作或者版本本身的问题。
2、由于蓝牙已经断开,查看进程情况,通过PS命令,看出Bluetoothd进程还在,但是bluealsa进程已经退出。
3、加打印分析bluealsa退出点,经过验证是在SBC编码环节。
4、排查SBC编码的代码,发现程序在某个点会崩溃。
5、在网上查找相关案例,疑似与编译配置有关系。5.根本原因
与SBC编译的配置有关系,在当前的编译工具链环境下,需要打开
--enable-high-precision
配置6.解决办法
如下修改配置:
- 修改sbc_primitives.h
diff --git a/sbc/sbc_primitives.h b/sbc/sbc_primitives.h index e01c957..b060484 100644 --- a/sbc/sbc_primitives.h +++ b/sbc/sbc_primitives.h @@ -27,6 +27,10 @@ #ifndef __SBC_PRIMITIVES_H #define __SBC_PRIMITIVES_H +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + #define SCALE_OUT_BITS 15 #define SBC_X_BUFFER_SIZE 328
- 在sbc.mk中增加
SBC_CONF_OPTS = --enable-high-precision
-
玄铁杯RISC-V大赛『三等奖』智能帘窗
智能帘窗采用D1-H哪吒开发板为主控,D1-H哪吒与下位机各模块/传感器进行数据通信并进行数据的处理,并在最后依据处理后的数据来对风扇、电机、OLED屏幕等上位机硬件进行控制。
系统硬件架构PART01 方案及硬件
产品实物图模拟平常卧室,其可能存在的场景有:突然下雨、户外湿度过大关窗以及户外天气较好开窗通风等场景。以上相关场景需要获取许多数据从进行准确的判定,其中包括室内外温湿度,当前时间,室外是否下雨,窗户状态,窗帘状态以及户外光照强度等,下图为系统方案。
系统方案图本项目采用器材如下:
- DHT11*2
- 舵机*1
- 普通步进电机*1
- 雨滴传感器模块*1
- PCF8591模块*1
- 光纤传感器模块*1
- OLED12864*1
- 按键*4
- 风扇*1
PART02 功能描述
首先系统上电后会显获取室内温湿度、可燃气体浓度、室外光照强度、温湿度以及是否下雨,自动关窗标识位,风扇标识位等信息(依靠”/project/”目录下的一些文件实现,例如“curtain”、“auto_window_flag”文件等),接着将读取本地存储的舵机以及步进电机的位置信息,四个按键(触控按键)分别对应窗户以及窗帘的开和关程度的控制,最后将室内外温湿度以及室外光照强度以及风扇开关状态和可燃气体浓浓度过高警告展示在OLED屏幕上。若室内可燃气体浓度超过阈值将默认打开风扇,并且此时是无法关闭的(手机APP操作),除非可燃气体浓度降低至阈值方可手动关闭风扇。
OLED屏幕状态显示除此之外本项目还将使用本地WIFI/有线网络通过MQTT协议连接腾讯云物联网服务,用户可以查看本地状态信息并依据光照强度、室内外温湿度、下雨自动关窗户,云端/本地控制窗帘或窗户,此操作于手机APP(腾讯云提供)服务上完成。
APP控制PART03 参赛团队
南通大学“孤勇队” 队员:The_Qiang
-
玄铁杯RISC-V大赛『二等奖』自跟随系统
本项目实现自动跟随采用了新的设计思路,D1-H哪吒开发板负责主控的工作做,自动跟随功能由UWB模块来实现,D1-H哪吒开发板会收集蓝牙模块、GPS模块以及ADXL345模块作为下位机提供的数据消息,并反馈到GPS模块和WiFi模块上,最后交由WiFi模块通过阿里云与上位机进行通信并反馈信息到终端的APP上显示。
系统架构图
实物图PART01 关键性能指标
(1)自动跟随功能,基于D1-H哪吒控制的自跟随助手,通过UWB模块,来实现自动跟随的功能。
主控板连线图
(2)检测意外摔倒并报警的功能物联网信息传输功能,配套的手环具有检测意外跌倒并报警的功能,并且通过主体将老人的状态信息,和位置信息上传到阿里云,然后向手机实时上传,老人的状态信息和位置信息,可以通过手机APP实时进行查看,当老人站起或者系统检测跌倒信息错误时,使用者可以通过按下手环上的手持终端按键,来关闭报警声音,同时手机APP实时更新老人的状态信息和位置信息。
手环实物图
物联网信息传输功能测试(3)PWN助力系统通过摇杆开关,功能转换开关,进行UWB自动跟随功能和助力功能两种功能模式之间的切换,可通过助行器上的摇杆开关来控制电机向相应的方向工作运行从而实现助力功能。
PWM系统摇杆开关PART02 工作原理
用于以D1-H哪吒作为主控的自跟随助手的跌倒紧急报警智能装置使用三块UWB模块,两块装在助行器机身,另外一块安置在配套的手环内。使用者将用于智慧家居的跌倒紧急报警智能装置上的两个UWB基站和UWB标签通上电并且打开开关后,UWB标签发射无线信号,安装在箱体上的两个UWB基站接收到信号后,计算出与UWB标签之间的距离及角度,单片机对距离及角度进行处理,然后单片机发出指令控制电机向相应的方向工作运行,从而实现跟随功能。
UWB模块放置图用于以D1-H哪吒作为主控的自跟随助手的跌倒紧急报警智能装置可以实现助力功能,以减轻使用者的负担。主要实现方法是,当使用者切换至助力模式后,助行器启用助力功能,使用者手扶着助行器行走时,可以通过助行器上的摇杆开关来调节电机的转速和工作方向,以此来实现电机转速的实时调节,从而减轻使用者的负担,达到省力的目的。以此来实现转速的实时调节。
UWB模块配合图PART03 参赛团队
山东华宇工学院“实践队”
-
Reply: 玄铁杯RISC-V大赛『一等奖』分布式能源智慧管理和M2M交易系统
@wmd340221 可以去平头哥的社区问问看,平头哥的奖金有5W RMB,应该是会提交完整源码的
-
【开发板试用】米尔电子MYC-YT507开发板试用申请开启
米尔电子为MYC-YT507核心板及开发板免费提供Linux,Ubuntu等多种系统a的驱动支持;并提供2.0版本MYIR MEasy HMI参考代码和丰富的开发资料。资料包含用户手册、PDF 原理图、外设驱动、BSP源码包、开发工具等。购买后提供完善的售后技术支持,米尔电子官方淘宝店开发板价格如下:
- 1G DDR工业级版本:核心板:218RMB,底板套装:650RMB
- 2G DDR工业级版本:核心板:248RMB,底板套装:680RMB
MYC-YT507开发板的相关资料也已开源,开发者可以在米尔电子官网获取相关资料,全志也为广大开发者提供了MYC-YT507开发板试用申请的活动,该活动将面向开发预研、学习科研、DIY项目等方向开放试用活动
试用申请通过邮件发送到:lizexi@allwinnertech.com
邮件应包括以下内容:
- 试用项目计划(申请重要依据);
- 预计输出成果;
- 过往项目经历;
- 其它认为有助于申请通过的内容
全志T507-H可达到车规级处理器的标准,在理论工作温度为-40℃~85℃的环境下,经过米尔电子低温运行、高温运行、高低温循环测试、低温通断电、高温通断电、低温存储、高温存储等苛刻条件下的环境测试,完全满足工业级实际应用的使用需求。
T507H芯片还是符合AEC-Q100认证的一款处理器,即可以满足汽车使用的标准,可以说是进一步认证了**“车规级”**的title。国外电子爱好者网站CNX在报到时更是将该认证标准作为题目,表达了对这款抗冻车规级芯片的青睐。
MYC-YT507H核心板,板载全志T507-H、PMIC电源管理芯片、LPDDR4、eMMC。全志T507-H集成了四核Cortex-A53的CPU和G31MP2的GPU,拥有十分强大的图像处理功能以及多路视频输入和输出的接口,这一特点也在MYC-YT507H开发板上得以体现。T507-H还支持4K@60fps H.265解码,4K@25fps H.264编码,以及绝大部分当前比较流行的视频及图片的解码格式。
MYC-YT507核心板采用邮票孔+ LGA设计,为方便开发者进行进一步的功能评估和开发预研,配套的MYD-YT507底板采用12V/2A直流供电,搭载了1路4G Mini PCIE接口、1路数字DVP摄像头输入、1路MIPI CSI、2路LVDS 显示接口(支持单/双通道)、1路HDMI、1路TV显示输出、1路耳机输出、1路SPDIF音频输出、1路千兆以太网接口、1路百兆以太网、2路USB HOST Type A、1路USB Type-C DRP、1路Micro SD、1路树莓派等外设接口。