《安富莱嵌入式周报》第315期:开源USB高速分析仪,8GHz示波器开发, 600行C编写RISC-V内核,英特尔推出用于开发人员等宽字体,便携物联网监测器

周报汇总地址:嵌入式周报 - 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

猜你喜欢

转载自blog.csdn.net/Simon223/article/details/131257474