- 2024-11-21
-
回复了主题帖:
入围名单公布:嵌入式工程师AI挑战营(进阶)的挑战者们,领取板卡啦
个人信息已确认,领取板卡,可继续完成任务。
- 2024-11-18
-
回复了主题帖:
【米尔-全志 T527 开发板-试用评测】-OpenCV行人检测
Jacktang 发表于 2024-11-16 09:15
OpenCV行人检测代码不会这么少吧
调用库调用完了 不就很简洁了嘛
-
回复了主题帖:
【米尔-全志 T527 开发板-试用评测】-OpenCV手势识别
也可以的
- 2024-11-15
-
发表了主题帖:
【米尔-全志 T527 开发板-试用评测】-OpenCV手势识别
一、软件环境安装
1.安装OpenCV
sudo apt-get install libopencv-dev python3-opencv
2.安装pip
sudo apt-get install python3-pip
二、OpenCV手势识别步骤
1.图像获取:从摄像头或其他图像源获取手部图像。使用OpenCV的VideoCapture类可以捕获视频流,或者使用imread函数加载图像。
2.图像预处理:对图像进行预处理,以提高特征提取的准确性。常用的预处理操作包括灰度化、滤波、边缘检测、二值化、噪声去除和形态学处理等。
灰度化:将彩色图像转换为灰度图像,去除颜色信息,简化图像。
滤波:使用滤波器去除图像中的噪声。
边缘检测:使用边缘检测算法提取图像中的边缘信息。
二值化:将灰度图像转换为二值图像,将像素值分为黑色和白色。
形态学处理:使用形态学操作增强手势轮廓。
3.特征提取:从预处理后的图像中提取手部特征。常用的特征包括形状特征、纹理特征和运动轨迹特征等。
形状特征:提取手部轮廓、面积、周长、质心等形状特征。
纹理特征:提取手部皮肤纹理、皱纹等纹理特征。
运动轨迹特征:提取手部运动轨迹、速度、加速度等运动轨迹特征。
4.分类和识别:使用机器学习算法对提取的特征进行分类,以识别特定的手势。
三、代码实现
# -*- coding: utf-8 -*-
import cv2
def reg(x):
o1 = cv2.imread('paper.jpg',1)
o2 = cv2.imread('rock.jpg',1)
o3 = cv2.imread('scissors.jpg',1)
gray1 = cv2.cvtColor(o1,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(o2,cv2.COLOR_BGR2GRAY)
gray3 = cv2.cvtColor(o3,cv2.COLOR_BGR2GRAY)
xgray = cv2.cvtColor(x,cv2.COLOR_BGR2GRAY)
ret, binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY)
ret, binary2 = cv2.threshold(gray2,127,255,cv2.THRESH_BINARY)
ret, binary3 = cv2.threshold(gray3,127,255,cv2.THRESH_BINARY)
xret, xbinary = cv2.threshold(xgray,127,255,cv2.THRESH_BINARY)
contours1, hierarchy = cv2.findContours(binary1,
cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
contours2, hierarchy = cv2.findContours(binary2,
cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
contours3, hierarchy = cv2.findContours(binary3,
cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
xcontours, hierarchy = cv2.findContours(xbinary,
cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
cnt1 = contours1[0]
cnt2 = contours2[0]
cnt3 = contours3[0]
x = xcontours[0]
ret=[]
ret.append(cv2.matchShapes(x,cnt1,1,0.0))
ret.append(cv2.matchShapes(x,cnt2,1,0.0))
ret.append(cv2.matchShapes(x,cnt3,1,0.0))
max_index = ret.index(min(ret)) #计算最大值索引
if max_index==0:
r="paper"
elif max_index==1:
r="rock"
else:
r="sessiors"
return r
t1=cv2.imread('test1.jpg',1)
t2=cv2.imread('test2.jpg',1)
t3=cv2.imread('test3.jpg',1)
# print(reg(t1))
# print(reg(t2))
# print(reg(t3))
# ===========显示处理结果==================
org=(0,60)
font = cv2.FONT_HERSHEY_SIMPLEX
fontScale=2
color=(255,255,255)
thickness=3
cv2.putText(t1,reg(t1),org,font,fontScale,color,thickness)
cv2.putText(t2,reg(t2),org,font,fontScale,color,thickness)
cv2.putText(t3,reg(t3),org,font,fontScale,color,thickness)
cv2.imshow('test1',t1)
cv2.imshow('test2',t2)
cv2.imshow('test3',t3)
cv2.waitKey()
cv2.destroyAllWindows()
四、实践
1.程序运行
2. 原始图片
3、识别结果
识别出剪刀 石头 布
-
发表了主题帖:
【米尔-全志 T527 开发板-试用评测】-OpenCV行人检测
一、软件环境安装
1.安装OpenCV
sudo apt-get install libopencv-dev python3-opencv
2.安装pip
sudo apt-get install python3-pip
二、行人检测概论
使用HOG和SVM构建行人检测器的关键步骤包括:
准备训练数据集:训练数据集应包含大量正样本(行人图像)和负样本(非行人图像)。
计算HOG特征:对于每个图像,计算HOG特征。HOG特征是一个一维向量,其中每个元素表示图像中特定位置和方向的梯度强度。
训练SVM分类器:使用HOG特征作为输入,训练SVM分类器。SVM分类器将学习区分行人和非行人。
评估模型:使用测试数据集评估训练后的模型。计算模型的准确率、召回率和F1分数等指标。
三、代码实现
import cv2
import time
def detect(image,scale):
imagex=image.copy() #函数内部做个副本,让每个函数运行在不同的图像上
hog = cv2.HOGDescriptor() #初始化方向梯度直方图描述子
#设置SVM为一个预先训练好的行人检测器
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
#调用函数detectMultiScale,检测行人对应的边框
time_start = time.time() #记录开始时间
#获取(行人对应的矩形框、对应的权重)
(rects, weights) = hog.detectMultiScale(imagex,scale=scale)
time_end = time.time() #记录结束时间
# 绘制每一个矩形框
for (x, y, w, h) in rects:
cv2.rectangle(imagex, (x, y), (x + w, y + h), (0, 0, 255), 2)
print("sacle size:",scale,",time:",time_end-time_start)
name=str(scale)
cv2.imshow(name, imagex) #显示原始效果
image = cv2.imread("back.jpg")
detect(image,1.01)
detect(image,1.05)
detect(image,1.3)
cv2.waitKey(0)
cv2.destroyAllWindows()
四、实际操作
-
发表了主题帖:
【米尔-全志 T527 开发板-试用评测】-OpenCV人脸识别
OpenCV人脸识别
一、软件环境安装
1.安装OpenCV
sudo apt-get install libopencv-dev python3-opencv
2.安装pip
sudo apt-get install python3-pip
3.安装依赖库
pip install opencv-contrib-python
face模块实际上并不是opencv库的一部分。更确切地说,face是部分的的opencv-contrib库。所以,需要安装opencv-contrib库
二、基本流程
1.人脸检测:
首先需要检测图像中的人脸。OpenCV提供了基于Haar级联分类器的detectMultiScale函数来进行人脸检测。这个函数可以在图像的不同尺度上查找可能的人脸区域。
2.人脸特征提取:
一旦检测到人脸,接下来需要提取人脸的特征。这一步是为了将人脸表示为一个特征向量,该向量可以用于后续的识别过程。
3.训练分类器:
使用提取的特征向量和相应的标签来训练一个分类器。OpenCV提供了多种机器学习算法,如支持向量机(SVM)、k最近邻(k-NN)等,来训练分类器。
4.人脸识别:
在测试阶段,对于新的图像,首先检测图像中的人脸,然后提取其特征,并使用训练好的分类器进行识别。
三、程序代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 读取训练图像
images=[]
images.append(cv2.imread("f01.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("f02.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("f11.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("f12.png",cv2.IMREAD_GRAYSCALE))
# 给训练图像贴标签
labels=[0,0,1,1]
# 读取待识别图像
predict_image=cv2.imread("fTest.png",cv2.IMREAD_GRAYSCALE)
# 识别
recognizer = cv2.face.FisherFaceRecognizer_create()
recognizer.train(images, np.array(labels))
label,confidence= recognizer.predict(predict_image)
# 打印识别结果
print("识别标签label=",label)
print("置信度confidence=",confidence)
四、实验过程
NumPy(Numeric Python)是Python的一种开源的数值计算扩展,也是Python科学计算的基础库
1.程序对应图像如下:
2.运行程序的结果
3.程序对应的彩色图像
4.运行程序结果
5.注意事项
图片的像素大小有要求,要求训练图像的像素大小与检测图像的大小相同
注意更改图像的名称
-
回复了主题帖:
【米尔-全志 T527 开发板-试用评测】-FacenetPytorch人脸识别
Jacktang 发表于 2024-11-15 07:30
人脸识别的算法还真多
说的安装facenet_pytorch库的步骤还不太明白
1.GitHub下载程序
2。更改facenet。py程序
3。运行preditct。py
4.输入想要对比图片的文件夹名称和文件名称
5.环境安装 就是缺啥按啥
- 2024-11-14
-
发表了主题帖:
【米尔-全志 T527 开发板-试用评测】-FacenetPytorch人脸识别
一、facenet_pytorch算法实现人脸识别
深度神经网络
简介
Facenet-PyTorch 是一个基于 PyTorch 框架实现的人脸识别库。它提供了 FaceNet 模型的 PyTorch 实现,可以用于训练自己的人脸识别模型。FaceNet 是由 Google 研究人员提出的一种深度学习模型,专门用于人脸识别任务。
在利用PyTorch神经网络算法进行人脸图像对比的实验设置中,我们专注于对比环节,而不涉及实际项目的完整实现细节。但为了贴近实际应用,我们可以构想以下流程:
1)捕捉新人脸图像:首先,我们使用摄像头或其他图像采集设备捕捉一张新的人脸照片。
2)加载存储的人脸图像:接着,从数据库中加载所有已存储的人脸图像。这些图像是之前采集并存储的,用于与新捕捉到的人脸照片进行对比。
3)构建神经网络模型:为了实现对比功能,我们需要一个预先训练好或自定义的神经网络模型。这个模型能够提取人脸图像中的关键特征,使得相似的图像在特征空间中具有相近的表示。
4)特征提取:利用神经网络模型,对新捕捉到的人脸照片和存储的每一张人脸图像进行特征提取。这些特征向量将用于后续的对比计算。
5)计算相似度:采用合适的相似度度量方法(如余弦相似度、欧氏距离等),计算新照片特征向量与存储图像特征向量之间的相似度。
6)确定匹配图像:根据相似度计算结果,找到与新照片相似度最高的存储图像,即认为这两张图像匹配成功。
7)输出匹配结果:最后,输出匹配成功的图像信息或相关标识,以完成人脸对比的实验任务。
核心组件
MTCNN:Multi-task Cascaded Convolutional Networks,即多任务级联卷积网络,专门设计用于同时进行人脸检测和对齐。它在处理速度和准确性上都有出色的表现,是当前人脸检测领域的主流算法之一。
FaceNet:由Google研究人员提出的一种深度学习模型,专门用于人脸识别任务。FaceNet通过将人脸图像映射到一个高维空间,使得同一个人的不同图像在这个空间中的距离尽可能小,而不同人的图像距离尽可能大。这种嵌入表示可以直接用于人脸验证、识别和聚类。
功能
支持人脸检测:使用MTCNN算法进行人脸检测,能够准确识别出图像中的人脸位置。
支持人脸识别:使用FaceNet算法进行人脸识别,能够提取人脸特征并进行相似度计算,实现人脸验证和识别功能。
二、安装facenet_pytorch库
更新系统
更新ubuntu系统,详情查看米尔提供的资料文件
更新系统软件
apt-get update
安装git等支持软件
sudo apt-get install -y python3-dev python3-pip libopenblas-dev libssl-dev libffi-dev git cmake
安装Pytorch支持工具
# 克隆 PyTorch 源代码
git clone --recursive https://github.com/pytorch/pytorch
# 进入 PyTorch 目录
cd pytorch
# 安装 PyTorch (需要根据你的需求选择 CUDA 版本,如果不需要 GPU 支持则不需要 --cuda 参数)
pip3 install --no-cache-dir torch -f https://download.pytorch.org/whl/torch_stable.html
# 测试 PyTorch 安装
python3 -c "import torch; print(torch.__version__)"
5.安装facenet_pytorch
pip3 install facenet_pytorch
三、CSDN参考案例
1.代码实现
############face_demo.py#############################
import cv2
import torch
from facenet_pytorch import MTCNN, InceptionResnetV1
# 获得人脸特征向量
def load_known_faces(dstImgPath, mtcnn, resnet):
aligned = []
knownImg = cv2.imread(dstImgPath) # 读取图片
face = mtcnn(knownImg) # 使用mtcnn检测人脸,返回人脸数组
if face is not None:
aligned.append(face[0])
aligned = torch.stack(aligned).to(device)
with torch.no_grad():
known_faces_emb = resnet(aligned).detach().cpu()
# 使用ResNet模型获取人脸对应的特征向量
print("\n人脸对应的特征向量为:\n", known_faces_emb)
return known_faces_emb, knownImg
# 计算人脸特征向量间的欧氏距离,设置阈值,判断是否为同一张人脸
def match_faces(faces_emb, known_faces_emb, threshold):
isExistDst = False
distance = (known_faces_emb[0] - faces_emb[0]).norm().item()
print("\n两张人脸的欧式距离为:%.2f" % distance)
if (distance < threshold):
isExistDst = True
return isExistDst
if __name__ == '__main__':
# help(MTCNN)
# help(InceptionResnetV1)
# 获取设备
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
# mtcnn模型加载设置网络参数,进行人脸检测
mtcnn = MTCNN(min_face_size=12, thresholds=[0.2, 0.2, 0.3],
keep_all=True, device=device)
# InceptionResnetV1模型加载用于获取人脸特征向量
resnet = InceptionResnetV1(pretrained='vggface2').eval().to(device)
MatchThreshold = 0.8 # 人脸特征向量匹配阈值设置
known_faces_emb, _ = load_known_faces('yz.jpg', mtcnn, resnet) # 已知人物图
faces_emb, img = load_known_faces('yz1.jpg', mtcnn, resnet) # 待检测人物图
isExistDst = match_faces(faces_emb, known_faces_emb, MatchThreshold) # 人脸匹配
print("设置的人脸特征向量匹配阈值为:", MatchThreshold)
if isExistDst:
boxes, prob, landmarks = mtcnn.detect(img, landmarks=True)
print('由于欧氏距离小于匹配阈值,故匹配')
else:
print('由于欧氏距离大于匹配阈值,故不匹配')
此代码是使用训练后的模型程序进行使用,在程序中需要标明人脸识别对比的图像。
2.实践过程
第一次运行时系统需要下载预训练的vggface模型,下载过程较长,后面就不需要在下载了运行会很快。如图所示:
3.程序运行异常呗终止
运行程序,提示killed,系统杀死了本程序的运行,经过多方面的测试,最终发现是识别的图片过大,使得程序对内存消耗过大导致。后将图片缩小可以正常运行了。
以下是对比图像和对比结果。
四、gitHub开源代码
首先下载代码文件
代码库中,大致的介绍了facenet算法的训练步骤等。
代码实现
以下是facenet的python代码,注意需要更改下面的一条程序"cuda" False,因为t527使用的是cpu,芯片到时自带gpu但是cuda用不了,因为cuda是英伟达退出的一种计算机架构。
import matplotlib.pyplot as plt
import numpy as np
import torch
import torch.backends.cudnn as cudnn
from nets.facenet import Facenet as facenet
from utils.utils import preprocess_input, resize_image, show_config
#--------------------------------------------#
# 使用自己训练好的模型预测需要修改2个参数
# model_path和backbone需要修改!
#--------------------------------------------#
class Facenet(object):
_defaults = {
#--------------------------------------------------------------------------#
# 使用自己训练好的模型进行预测要修改model_path,指向logs文件夹下的权值文件
# 训练好后logs文件夹下存在多个权值文件,选择验证集损失较低的即可。
# 验证集损失较低不代表准确度较高,仅代表该权值在验证集上泛化性能较好。
#--------------------------------------------------------------------------#
"model_path" : "model_data/facenet_mobilenet.pth",
#--------------------------------------------------------------------------#
# 输入图片的大小。
#--------------------------------------------------------------------------#
"input_shape" : [160, 160, 3],
#--------------------------------------------------------------------------#
# 所使用到的主干特征提取网络
#--------------------------------------------------------------------------#
"backbone" : "mobilenet",
#-------------------------------------------#
# 是否进行不失真的resize
#-------------------------------------------#
"letterbox_image" : True,
#-------------------------------------------#
# 是否使用Cuda
# 没有GPU可以设置成False
#-------------------------------------------#
"cuda" : False,
}@classmethod
def get_defaults(cls, n):
if n in cls._defaults:
return cls._defaults[n]
else:
return "Unrecognized attribute name '" + n + "'"
#---------------------------------------------------#
# 初始化Facenet
#---------------------------------------------------#
def __init__(self, **kwargs):
self.__dict__.update(self._defaults)
for name, value in kwargs.items():
setattr(self, name, value)
self.generate()
show_config(**self._defaults)
def generate(self):
#---------------------------------------------------#
# 载入模型与权值
#---------------------------------------------------#
print('Loading weights into state dict...')
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
self.net = facenet(backbone=self.backbone, mode="predict").eval()
self.net.load_state_dict(torch.load(self.model_path, map_location=device), strict=False)
print('{} model loaded.'.format(self.model_path))
if self.cuda:
self.net = torch.nn.DataParallel(self.net)
cudnn.benchmark = True
self.net = self.net.cuda()
#---------------------------------------------------#
# 检测图片
#---------------------------------------------------#
def detect_image(self, image_1, image_2):
#---------------------------------------------------#
# 图片预处理,归一化
#---------------------------------------------------#
with torch.no_grad():
image_1 = resize_image(image_1, [self.input_shape[1], self.input_shape[0]], letterbox_image=self.letterbox_image)
image_2 = resize_image(image_2, [self.input_shape[1], self.input_shape[0]], letterbox_image=self.letterbox_image)
photo_1 = torch.from_numpy(np.expand_dims(np.transpose(preprocess_input(np.array(image_1, np.float32)), (2, 0, 1)), 0))
photo_2 = torch.from_numpy(np.expand_dims(np.transpose(preprocess_input(np.array(image_2, np.float32)), (2, 0, 1)), 0))
if self.cuda:
photo_1 = photo_1.cuda()
photo_2 = photo_2.cuda()
#---------------------------------------------------#
# 图片传入网络进行预测
#---------------------------------------------------#
output1 = self.net(photo_1).cpu().numpy()
output2 = self.net(photo_2).cpu().numpy()
#---------------------------------------------------#
# 计算二者之间的距离
#---------------------------------------------------#
l1 = np.linalg.norm(output1 - output2, axis=1)
plt.subplot(1, 2, 1)
plt.imshow(np.array(image_1))
plt.subplot(1, 2, 2)
plt.imshow(np.array(image_2))
plt.text(-12, -12, 'Distance:%.3f' % l1, ha='center', va= 'bottom',fontsize=11)
plt.show()
return l1
代码实现
此代码调用的签名的代码,但其可以直接的去调用图片进行人脸识别。
from PIL import Image
from facenet import Facenet
if __name__ == "__main__":
model = Facenet()
while True:
image_1 = input('Input image_1 filename:')
try:
image_1 = Image.open(image_1)
except:
print('Image_1 Open Error! Try again!')
continue
image_2 = input('Input image_2 filename:')
try:
image_2 = Image.open(image_2)
except:
print('Image_2 Open Error! Try again!')
continue
probability = model.detect_image(image_1,image_2)
print(probability)
程序运行
运行程序后首先显示的是程序的配置信息,然后可以输入图像对比检测的内容。以下是图像识别的效果和对比的准确率。
五、参考文献
CSDN博客
https://blog.csdn.net/weixin_45939929/article/details/124789487?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-124789487-blog-142987324.235^v43^pc_blog_bottom_relevance_base6&spm=1001.2101.3001.4242.2&utm_relevant_index=4
官方源码来源
https://gitcode.com/gh_mirrors/fac/facenet-pytorch/overview
- 2024-11-06
-
回复了主题帖:
嵌入式工程师AI挑战营(进阶):在RV1106部署InsightFace算法的多人实时人脸识别实战
InsightFace是由旷视科技(Megvii)开发的一款高效的人脸识别、人脸检测和人脸对齐算法库。
开发环境搭建,安装Python和相关的依赖库,在ubuntu PC系统进行人脸识别算法的开发。
使用RKNN-Toolkit2进行算法程序的转换,因为RKNN是在电脑端进行应用的,在嵌入式端无法直接运行。所以需要使用工具进行算法程序的转换。
实际开发,在pc端进行人脸识别算法的开发和训练,最终将算法程序部署到rv1106电路板上进行实际的使用和调试。
- 2024-10-16
-
回复了主题帖:
【新定义TBK-RD8T3x 触摸滑条和按键评估板】三、触摸滑动触摸&RDS魔盒
程英茂 发表于 2024-10-16 07:48
提出了问题,之后忽然找到了答案,
厉害厉害 这几天没看消息 错过了
- 2024-09-19
-
回复了主题帖:
【 匠芯创D133CBS】-小火苗-PWM测试
Jacktang 发表于 2024-9-14 07:46
用不了其他引脚进行PWM测试,这个最后怎么处理的呢
蜂鸣器用的是PWM1 用的蜂鸣器
-
回复了主题帖:
【 匠芯创D133CBS】-网络通讯测试
Jacktang 发表于 2024-9-15 08:48
评估板不知道怎么回事下载不了其编译后的镜像,这个是个小遗憾
是啊
- 2024-09-13
-
发表了主题帖:
【 匠芯创D133CBS】-小火苗-PWM测试
PWM工作原理
PWM 信号
< class="p" style="">PWM 信号通常由一列占空比不同的矩形脉冲构成,其占空比可以调节。用数字输出来控制 PWM 占空比,占空比提高意味着高电平脉宽增大,输出的能量就会增加,PWM 就相当于一个 功率版的 DA 转换模块。下图是一个典型的 PWM 信号波形:
图典型的 PWM 信号波形
< class="p" style="">占空比的计算方法: 占空比 = (脉宽时间 / 周期) * 100%
< class="p" style="">结合上图,我们可以说: 脉宽时间 1 相比 脉宽时间 2 提供较小的占空比。
< class="p" style="">PWM 通常用于背光亮度调节、电机控制、舵机控制等。本文仅限于 PWM 调节背光的功能,通过调节 PWM 中的占空比,达到控制 LED 背光电流的通和断,进而可调整背光亮度。
PWM驱动配置
打开VsCode软件,打开该文件,在VsCode下打开终端,输入list命令查看系统,使用lunch 11 选择程序系统。
在文件夹下打开win_cmd.bat终端,因为VsCode打开menuconfig配置文件的时候显示和操作会很卡。所以直接用电脑自带的终端打开。
编译
使用终端命令scons进行编译
下载
测试
查看手册和板子原理图,PWM引脚接入蜂鸣器,其余的PWM引脚被其他功能复用,所以在此使用不了其他引脚进行PWM测试。
-
发表了主题帖:
【 匠芯创D133CBS】-网络通讯测试
一、MAC 使用指南
支持全双工/半双工
支持 100/10 Mbps,部分 SoC 支持 1000 Mbps
支持 RMII 接口,部分 SoC 支持 RGMII 接口
支持内部 DMA
TXFIFO/RXFIFO 的大小均为 2048 Byte,均支持阈值模式和存储-转发模式
支持 VLAN 哈希过滤
支持 64-bit 哈希地址过滤、完美地址过滤(支持 8 个地址寄存器)
支持源地址的插入/替换,VLAN 的插入/替换/删除,CRC 的插入/替换/删除
支持接收校验和错误检测
支持发送校验和计算
二、以太网介绍
以太网(Ethernet)是一种计算机局域网组网技术,基于 IEEE802.3 标准,它规定了包括物理层的连线(RJ45),电气信号(PHY)和媒体访问层(MAC)协议等, 以太网的特征是有线网络,网络中的各终端必须通过网线进行连接,以太网模块可以简单的理解为 MAC 通过 MII 总线控制 PHY 共同完成终端之间数据交换的一种设备。
使用拓扑
一个典型的以太网电路至少需要如下器件的参与
RJ45 连接器
网络变压器
晶振
PHY 收发器
MAC 控制器
AP 处理器
D211 集成 MAC 控制器模块,AP 内部也可以提供 PHY 收发器所需的时钟,从而不使用外部晶振模块。
如果要提升硬件的防静电能力,外部一般会增加 ESD 保护电路。
三、MAC 架构
图模块架构
图MAC 架构
图PHY 架构
四、程序开发--上点干货
五、测试过程
1、镜像选择
Built-in configs:
8. d13x_demo88-nand_baremetal_bootloader
9. d13x_demo88-nand_rt-thread_helloworld
10. d13x_demo88-nor_baremetal_bootloader
11. d13x_demo88-nor_rt-thread_helloworld
12. d13x_kunlunpi88-nor_baremetal_bootloader
13. d13x_kunlunpi88-nor_rt-thread_helloworld
以上六种程序系统适配当前的开发板,d13x_demo88-nand_rt-thread_helloworld系统更适合开发网口程序,但是我的评估板不知道怎么回事下载不了其编译后的镜像,问官方也未得到反馈。后面使用的是d13x_kunlunpi88-nor_rt-thread_helloworld系统进行的实验。
Lwip简介
LWIP是一个轻量的开源的TCP/IP协议栈,专为嵌入式系统设计,在RTOS应用非常多。
特点:LwIP可以在有无操作系统的情况下运行,重点是在保持TCP协议主要功能的基础上减少对RAM的占用,通常只需十几KB的RAM和40K左右的ROM即可运行。
应用:适用于资源受限的嵌入式设备,如云台接入、无线网关、远程模块等。
接口:提供RAW API、NETCONN API和SOCKET API三种编程接口,方便开发者根据需求选择使用。
优势:代码量小、可配置性强、支持多平台,广泛应用于物联网项目中
- 2024-09-12
-
发表了主题帖:
【 匠芯创D133CBS】-小火苗-CAN通讯测试实验
一、CAN配置
驱动配置
Board options --->
Using CAN0
Using CAN1
luban-lite CAN 的 driver 层是基于 RT-Thread 的 CAN 驱动框架实现的,所以需要使能 RT-Thread 的 CAN 驱动框架:
RT-Thread options --->
RT-Thread Components --->
Device Drivers --->
Using CAN device drivers
Enable CAN hardware filter
[ ] Enable CANFD support
EEWORLDIMGTK0
二、CAN 测试程序配置
在 Luban-Lite 根目录下执行 scons --menuconfig,进入 menuconfig 的功能配置界面,按如下选择:
Drivers options --->
Drivers examples --->
Enable CAN driver test command
三、程序编译
程序经过以上配置后编译程序系统便带有了RTC的例程,编译命令为scons。如图所示:
四、程序下载
程序下载使用USB下载会很快,首先连接好设备后,按住BOOT按键不松手再按RESET按键,下载软件便可以发现设备。
五、CAN 收发测试
正常模式收发测试
将测试板上的 CAN0 接口连接到CAN分析仪上。执行 sample 命令,CAN0 会向 CAN1 发送数据,CAN分析仪会打印接收到的数据。
aic /> can_sample
回环模式收发测试
在打开 test_can 的编译后,板子上可直接运行 test_can 命令:
aic /> test_can
test_can - test CAN send frame to itself (loopback mode)
Usage:
test_can <can_name> frame_id#frame_dataFor example:
test_can can1 1a3#11.22.9a.88.ef.00
执行命令,CAN 设备会向自己发送数据,并会打印接收到的数据。
aic /> test_can can1 1a3#11.22.9a.88.ef.00 # 设置 CAN1 为接收端和发送端,发送数据帧 1a3#11.22.9a.88.ef.00
The can1 received thread is ready...
received msg:
ID: 0x1a3 DATA: 11 22 9a 88 ef 00
以上是官方的教程,实操如图所示:
六、相关资料
电路引脚,如图所示:
- 2024-09-11
-
发表了主题帖:
【 匠芯创D133CBS】-小火苗-RTC时钟测试
一、RTC配置
参考官方文档手册,配置如下:
在 Luban-Lite 根目录下执行 scons --menuconfig,进入 menuconfig 的功能配置界面,按如下选择:
Board options --->
Using RTC
RTC parameter --->
(3276800) The actual rate of 32K clock
[ ] Enable the alarm IO output
[ ] Enable the 32K clock output
当使用 RT-Thread 内核的时候,RTC 驱动需要依赖 Thread 的 RTC 设备驱动框架和 alarm 框架,也是在 menuconfig 界面中打开:
Rt-Thread options --->
RT-Thread Components --->
Device Drivers --->
Using RTC device drivers
Using RTC alarm
二、时区配置
1、在 RT-Thread 组件中提供了时区管理功能,Luban-Lite SDK 中默认配置时区为 中国的 +8 时区。 在 Luban-Lite 根目录下执行 scons --menuconfig,进入 menuconfig 的功能配置界面,进入功能配置:
Rt-Thread options --->
RT-Thread Components --->
C/C++ and POSIX layer --->
(8) Set the default time zone (UTC+)
2、使用命令配置:
串口
Aic命令界面使用的是串口通讯,板子载有UART0-DEBUG接口,通过USB转TTL进行通讯,串口波特率为115200
三、程序编译
程序经过以上配置后编译程序系统便带有了RTC的例程,编译命令为scons。如图所示:
四、程序下载
程序下载使用USB下载会很快,首先连接好设备后,按住BOOT按键不松手再按RESET按键,下载软件便可以发现设备。
五、程序验证测试
aic /> test_alarm 3#
aic /> [I] test_alarm_callback()9 Test alarm callback function.
- 2024-08-26
-
发表了主题帖:
【 匠芯创D133CBS】-小火苗-仿真和开发环境搭建
淘宝买的调试器
安装驱动
驱动配置
VS Code设置
VS Code编译
Vs debug
- 2024-08-16
-
回复了主题帖:
【 匠芯创D133CBS】-小火苗-开发前期理论分析
wangerxian 发表于 2024-8-16 09:23
这是国产芯片吗?有参数吗
国产芯片 售价在18元左右一颗 https://www.artinchip.com/p/25.html
-
发表了主题帖:
【 匠芯创D133CBS】-小火苗-开发前期理论分析
一、硬件外观
硬件电路设计的还是比较板正。
二、系统架构探索
接收到开发板之后一脸蒙,是linux系统还是RTOS系统呢?
从官方资料上看使用的是RTOS系统,Luban-Lite 是 ArtInChip 基于 RT-Thread 系统深度优化的 RTOS SDK,支持 baremetal 构建模式,支持 freerots, rt-thread 核,支持 rt-thread 生态。
Baremetal 是 ArtInChip 的嵌入式裸机系统。
总结,匠芯创D133CBS是用的是ROTS系统和裸机系统两种方式实现软件的开发。
三、开发环境
个人理解,linux系统下开发,和Windows系统下 还有Eclipse软件开发环境,我分析是有这三种开发方式,在之后我选择使用linux系统下进行软件开发。
四、开发用的的下载工具
程序下载工具将编译好的镜像烧录到开发板中,程序烧录有三种种方式,串口(JTAG)、SD卡和USB升级。
五、使用手册
https://www.artinchip.com/knowledge/oxy_ex-1/topics/chapter-system-luban-lite.html
六、JATG
个人分析JATG调试工具在后面的开发调试比较重要
- 2024-08-06
-
回复了主题帖:
测评入围名单: 工业级智能控制MCU 匠芯创D133CBS,追加了3块
个人信息无误,确认可以完成测评分享计划