周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz!
视频版:
https://www.bilibili.com/video/BV1gV4y117UD/
《安富莱嵌入式周报》第315期:开源USB高速分析仪,8GHz示波器开发, 600行C编写RISC-V内核,英特尔推出用于开发人员等宽字体,便携物联网监测器
1、开源USB2.0高速分析仪
GitHub - ataradov/usb-sniffer: Low-cost LS/FS/HS USB sniffer with Wireshark interface
usb-sniffer-main.zip (2.05 MB)
分析仪上位机直接采用的Wireshark。
硬件采用Cypress CY7C68013A MCU + Lattice LCMXO2 FPGA + Microchip USB3343 USB PHY实现
2、8GHz示波器开发
8 GHz Sampling Oscilloscope | Hackaday.io
这是一个未完成作品,不过作者分享的一些设计问题,有兴趣可以看看
做了很多测试:
硬件也做了很多:
3、创意设计,RGB 全彩荧光管
这里是采用的LCD显示屏实现的效果,视频实际展示效果很棒
视频:
《安富莱嵌入式周报》第315期:2023.06.05--2023.06.15 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz!
截图:
4、超低功耗无线振动传感器监控电机参考设计,实现预防性维护,CR2032纽扣电池可供电10年
TIDA-01469 reference design | TI.com
本地计算2048点 FFT振动频谱,蓝牙无线,传输距离72米,平均待机电流879.5nA
框图:
5、小知识:为什么我们看到的各种SD卡移植在底层接口都没有做擦除操作
本质原因是SD卡有擦写均衡机制,每次主机写入数据时到相同的逻辑地址,实际上数据会被写入一个新分配的空物理地址。如果人为的对相同地址擦除再写入,实际上是破环了这个机制。
闪迪的规格书:
04db416b291011446889dbd6129e2644.pdf (405.78 KB)
6、软硬件开源便携监测器CatSniffer升级至V3.1,支持Zigbee,蓝牙,LoRa,Thread,Sub 1GHz,6lowpan
https://github.com/ElectronicCats/CatSniffer
规格和效果:
兼容各种Sniffer监测组件,
比如TI的
7、软件资讯
(1)IAR9.40发布
IAR各个历史版本集合(2023-06-08) - 开发环境 - 硬汉嵌入式论坛 - Powered by Discuz!
(2)Silicon Labs的Gecko SDK升级至V4.3,加强各种物联网协议支持
https://community.silabs.com/s/s ... t-v43-now-available
(3)Autodesk宣布计划于2026年停止支持EAGLE PCB
Autodesk EAGLE Announcement - Next steps and FAQ
(4)英飞凌全家桶开发环境ModusToolbox升级至V3.1
Release Announcement: ModusToolbox™ 3.1 available ... - Infineon Developer Community
(5)上海先楫半导体获TUV莱茵国内首张ISO26262 和IEC61508 功能安全管理体系双认证
8、硬件资讯:
(1)Silicon Labs发布面向物联网的单片机AI芯片FG28 SoC,支持蓝牙/sub-GHz双频,实现远距离广覆盖Wi-SUN及专有协议连接
https://www.silabs.com/wireless/ ... b-ghz-wireless-socs
业界首款集成AI/ML硬件加速器的sub-Ghz SoC,业界领先的Secure Vaul安全技术。
FG28为用户提供了一种在网络上配置和部署新设备的简便方法,而且sub-Ghz频段的设计旨在支持超过一英里的设备间通信。
(2)新版I3C HCI V1.2规范
mipi-I3C-HCI-specification-v1-2p.pdf (4.15 MB)
(3)扬声器性能测量笔记
AppNote-Loudspeaker-EA-Measurements.pdf (1.47 MB)
9、纯硬件打造的上古游戏机雅达利
https://www.atariage.com/2600/archives/schematics/index.html
Atari Document Archive (Search Results)
10、600行C编写RISC-V内核
https://github.com/mnurzia/rv
用这个代码来学习RISC-V内核非常不错
rv-main.zip (13.29 KB)
支持的指令:
代码如下:
#include <stdio.h>
#include <string.h>
#include "rv.h"
rv_res load_cb(void *user, rv_u32 addr, rv_u8 *data) {
if (addr - 0x80000000 > 0x10000) /* Reset vector is 0x80000000 */
return RV_BAD;
*data = ((rv_u8 *)(user))[addr - 0x80000000];
return RV_OK;
}
rv_res store_cb(void *user, rv_u32 addr, rv_u8 data) {
if (addr - 0x80000000 > 0x10000)
return RV_BAD;
((rv_u8 *)(user))[addr - 0x80000000] = data;
return RV_OK;
}
rv_u32 program[2] = {
/* _start: */
0x02A88893, /* add a7, a7, 42 */
0x00000073 /* ecall */
};
int main(void) {
rv_u8 mem[0x10000];
rv cpu;
rv_init(&cpu, (void *)mem, &load_cb, &store_cb);
memcpy((void *)mem, (void *)program, sizeof(program));
while (rv_step(&cpu) != RV_EECALL) {
}
printf("Environment call @ %08X: %u\n", cpu.pc, cpu.r[17]);
return 0;
}
11、英特尔推出一款等宽免费字体One Mono,提高可读性,解决开发人员眼疲劳,方便纠错
https://github.com/intel/intel-one-mono
这是一个富有表现力的等宽字体家族,在构建时充分考虑了清晰度、易读性和开发人员的需求。
最大程度地提高可读性,以解决开发人员的眼睛疲劳,并减少编辑错误
ttf.zip (276.95 KB)
12、Makefile基础入门文档
当前只有英文版,搞个中文版就更好了
Makefile Tutorial By Example
13、好帖,图文并茂介绍C的动态内存分配的malloc和free实现
Memory Allocation
14、H7-TOOL本周进展
H7-TOOL详细介绍:H7-TOOL开发工具,1拖4/16脱机烧录,高速DAPLINK,RTOS Trace,CAN/串口助手, 示波器, RTT等,支持WiFi,以太网,高速USB和手持 - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!
开始着手H7-TOOL新版固件2.22收尾工作,本次升级更新的内容非常多,同时感谢大家反馈的问题,大部分得到修复
这周在实现uCOS-II的Trace功能上花了不少时间,uCOS-II不像已经发布的uCOS-III Trace,uCOS-II获取通信组件的信息后,使用LUA做了个任务调度器计算,用于获取当前等待信号量,消息队列,消息邮箱等通信组件的任务和任务个数,含等待的最高优先级任务:
if(OSLowestPrio <= 63) then
OSEventCnt = pg_read16(pcb + 8)
OSEventGrp = pg_read8(pcb + 0x0a)
for i=0, OS_EVENT_TBL_SIZE, 1 do
off = (OSEventGrp & (1<<i) ) >> i
if(off == 1) then
for j=0, 7, 1 do
OSEventTbl1 = pg_read8(pcb + 0x0b + i)
off = (OSEventTbl1 & (1<<j) ) >> j
if(off == 1) then
TaskCount = TaskCount + 1
TaskBuffer[TaskCount] = j + i*8
end
end
end
end
else
OSEventCnt = pg_read16(pcb + 8)
OSEventGrp = pg_read16(pcb + 0x0a)
OSEventTbl1 = pg_read16(pcb + 0x0c)
for i=0, OS_EVENT_TBL_SIZE, 1 do
off = (OSEventGrp & (1<<i) ) >> i
if(off == 1) then
for j=0, 15, 1 do
OSEventTbl1 = pg_read16(pcb + 0x0b + 2*i)
off = (OSEventTbl1 & (1<<j) ) >> j
if(off == 1) then
TaskCount = TaskCount + 1
TaskBuffer[TaskCount] = j + i*8
end
end
end
end
end