专栏名称: 安富莱电子
由武汉安富莱电子有限公司负责维护。每周发布嵌入式周报,嵌入式领域最新消息和技术分享。内容原创。
目录
相关文章推荐
小北的梦呓  ·  接入AI之后,跨境搞钱的速度飞快 ·  22 小时前  
小北的梦呓  ·  接入AI之后,跨境搞钱的速度飞快 ·  22 小时前  
楼主说楼市  ·  曾经以为在做梦,现在真的来了 ·  2 天前  
楼主说楼市  ·  曾经以为在做梦,现在真的来了 ·  2 天前  
环球物理  ·  【物理科普】“薛定谔的猫”到底是什么? ·  2 天前  
51好读  ›  专栏  ›  安富莱电子

《安富莱嵌入式周报》第346期:2024.11.06--2024.11.24

安富莱电子  · 公众号  ·  · 2024-11-25 07:51

正文

说明:
谢谢大家的关注,继续为大家盘点上两周精彩内容。

1 开源2GHz带宽,12bit分辨率,3.2Gsps采样率示波器

软件和硬件全开源,这个是早期Haasoscope开源项目的升级版,不过这次升级与之前版本已经没有任何关系,只是示波器名字没变。但性能是质的飞跃
效果:






规格:
两个设备同步,可以做到6.4Gsps采样率



由于示波器带宽比较高,普通探头是无法满足需求的,所以专门设计了一个2GHz带宽探头


2 开源嵌入式固件安全分析器

EMBA 会自动发现固件中可能存在的弱点和漏洞。例如,不安全的二进制文件、旧的和过时的软件组件、可能易受攻击的脚本或硬编码的密码。EMBA 是一个命令行工具,可以生成易于使用的 Web 报告以供进一步分析
视频效果:

有详细的文档说明:


3 TI分享的8通道隔离 ±12.288 V 模拟采集参考设计

此参考设计是具有 8 个通道的高压模拟输入模块。每个通道都可用于电压和电流测量。该设计使用 16 位模数转换器 (ADC) ADS8681,可处理 ±12.288 V 的输入电压。此外,该设计的四个通道能够处理高达 ±160 V 的共模电压。因此,用户无需担心接地回路或补偿电流在连接的输入之间流动。

1、±12.288 V 的高压输入
2、每个通道的电压和电流测量
3、4 个通道,共模电压高达 ±160 V
4、-85dB 的邻道串扰抑制
5、100 MΩ 输入阻抗
6、浪涌瞬态抗扰度符合 EN 61000-4-5 2 类标准(±1 kV,24 A)


4 C编译器原理书籍

有助于深入了解C以及编译原理


每个章节配套例题


5 FreeCAD V1.0版本发布

经过 22 年的发展,FreeCAD 终于达到了 1.0 版的里程碑。各大平台都提供了下载:


视频:

6 两年未更新的FatFS发布V0.15a版本

上一次更新还是2022年的11月份,更新记录:


7 开源USB Type-C口袋电源,支持3.3 -20 V,最大5 A

电压和电流可调,电压支持3.3V-20V,单步50mV可调。电流1A-5A可调,单步50mA可调。






规格:


8 IDE相关

1、Embedded Studio发布V8.20版本



2、新唐自家所有M内核芯片免费使用MDK专业版,授权到2027年9月

Arm 与新唐科技为软件开发者提供免费的Keil MDK专业工具:Keil MDK Nuvoton Edition - Full Cortex-M,此服务可支持所有基于 Arm Cortex-M 处理器为内核的新唐产品,包括M0/M0+/M23/M33/M4/M55/M7/M85,并可用于商业用途。
此服务亦包含 Arm Keil MDK v6 提供的所有工具和软件套件,包括 Arm C/C++ 编译程序、Arm Keil Studio Pack - the Visual Studio Code extensions、Keil uVision 与除错环境。
此免费服务的使用范围仅适用于 Keil MDK 5.37(含) 或更高的版本,并且仅支持 Arm Compiler 6。

9 【实测】使用STM32H7板子FatFS文件系统每秒读写2MB文件,实时写入7450个文件不出错,写满16GB SD卡

【测试平台】
STM32-V7开发板
【测试例子】
V7-025_FatFS文件系统例子(SD卡 V1.2)
【测试条件和校验】
运行例子里面的命令6,命令6是个测速函数,每次写入2MB文件,同时读取出来校验,保证写入的没问题。

/***********************************************************************************************************        函 数 名: WriteFileTest*        功能说明: 测试文件读写速度*        形    参:无*        返 回 值: 无**********************************************************************************************************/static void WriteFileTest(void){        FRESULT result;        char path[64];         uint32_t bw;        uint32_t i,k;        uint32_t runtime1,runtime2,timelen;        uint8_t err = 0;        static uint32_t s_ucTestSn = 0;                    for (i = 0; i < sizeof(g_TestBuf); i++)        {                g_TestBuf[i] = (i / 512) + '0';        }            /* 挂载文件系统 */        result = f_mount(&fs, DiskPath, 0);                        /* Mount a logical drive */        if (result != FR_OK)        {                printf("挂载文件系统失败 (%s)\r\n", FR_Table[result]);        }          /* 打开文件 */        sprintf(path, "%sS%05d.txt", DiskPath, s_ucTestSn++); /* 每写1次,序号递增 */              result = f_open(&file, path, FA_CREATE_ALWAYS | FA_WRITE);          /* 写一串数据 */        printf("开始写文件%s %dKB ...\r\n", path, TEST_FILE_LEN / 1024);                  runtime1 = bsp_GetRunTime();        /* 读取系统运行时间 */        for (i = 0; i < TEST_FILE_LEN / BUF_SIZE; i++)        {                result = f_write(&file, g_TestBuf, sizeof(g_TestBuf), &bw);                if (result == FR_OK)                {                        if (((i + 1) % 8) == 0)                        {                                printf(".");                        }                }                else                {                        err = 1;                        printf("%s文件写失败\r\n", path);                        break;                }        }        runtime2 = bsp_GetRunTime();        /* 读取系统运行时间 */                  if (err == 0)        {                timelen = (runtime2 - runtime1);                printf("\r\n  写耗时 : %dms   平均写速度 : %dB/S (%dKB/S)\r\n",                        timelen,                        (TEST_FILE_LEN * 1000) / timelen,                        ((TEST_FILE_LEN / 1024) * 1000) / timelen);        }          f_close(&file);                /* 关闭文件*/            /* 开始读文件测试 */        result = f_open(&file, path, FA_OPEN_EXISTING | FA_READ);        if (result !=  FR_OK)        {                printf("没有找到文件: %s\r\n", path);                return;        }          printf("开始读文件 %dKB ...\r\n", TEST_FILE_LEN / 1024);                  runtime1 = bsp_GetRunTime();        /* 读取系统运行时间 */        for (i = 0; i < TEST_FILE_LEN / BUF_SIZE; i++)        {                result = f_read(&file, g_TestBuf, sizeof(g_TestBuf), &bw);                if (result == FR_OK)                {                        if (((i + 1) % 8) == 0)                        {                                printf(".");                        }                          /* 比较写入的数据是否正确,此语句会导致读卡速度结果降低到 3.5MBytes/S */                        for (k = 0; k < sizeof(g_TestBuf); k++)                        {                                if (g_TestBuf[k] != (k / 512) + '0')                                {                                          err = 1;                                        printf("Speed1.txt 文件读成功,但是数据出错\r\n");                                        break






请到「今天看啥」查看全文