FireBeetle 直接放音(PWM篇)

前面介绍了FireBeetle 通过 DAC 来播放音频,除此之外,还可以使用 PWM 方式来播放音频。

关于 PWM动力老男孩在“Arduino系列教程之 – PWM的秘密(上)”【参考1】有介绍,对于我们来说,能用到的就是下面这一段:

PWM是用占空比不同的方波,来模拟“模拟输出”的一种方式。靠,这个太拗口了,简而言之就是电脑只会输出0和1,那么想输出0.5怎么办呢?于是输出01010101….,平均之后的效果就是0.5了。早这么说就了然了嘛。

比如,当前最高电压是5V,如果输出50%的PWM信号,可以当作 2.5V 的信号输出。对于 ESP32来说,有对 PWM 的[......]

阅读全文

Magnetic Core Memory

在上古的电脑时代,计算机使用 Magnetic Core Memory 来作为 RAM 存储设备。

中文名称是“磁芯存储器”。简单的说,这种磁芯有着不同的磁化方向。用这种方式可以记录0 和 1 两种状态。当下方的导线通过电流时,不同磁化方向会对电流有着不同的影响,这样就能通过经过的电流大小得出当前存储的装态。

这种装置可以看作时现代 DRAM 的雏形。有兴趣的朋友还可以阅读下面的文章:

1.https://baike.baidu.com/item/%E7%A3%81%E8%8A%AF%E5%AD%98%E5%82%A8%E5%99%A8/10189808?fr=aladd[......]

阅读全文

ESP32 作为蓝牙音源

前面介绍过 ESP32 作为蓝牙音频接收端(蓝牙音箱),这里介绍它作为蓝牙音频的播放端。

首先需要确定蓝牙接收器的名称,用笔记本电脑连接后,可以再设备管理器中看到,这里我使用的是一款蓝牙耳机,名称是“JABRA TALK”:

接下来需要安装 ESP32-A2DP-master 这个库。下面的代码是从这个库的Example 中修改而来,代码如下:

特别注意,因为代码有音频数据需要特别选择 Huge APP 模式:

测试使用的板子是 ESP-WROOM-32,特点是价格偏移兼容性还不错(同样的我试验了 TinkerNode,播放时有卡顿,似乎后台有人一直占用 S[......]

阅读全文

Step to UEFI (230)OVMF 一个FV 的打包过程分析

前面介绍了如何EDK2在编译的最后过程中使用了 GenFds 进行打包。分析的目标是 QEMU 的 BIOS 文件 OVMF.FD,使用 UEFITool NE 打开之后,可以看到有三个 FV ,我们以中间的为例,分析它的生成方法。整体分析过程比较枯燥,对于大多数人来说了解大致的步骤就可以了。

首先,在 FDF 文件中,给出了这个 FV 的GUID 可以看到:

上面的FV 是由两个 Section 构成的,一个是 PEIFV,另一个是 DXEFV:

1.下面是对于 PEIFV 的定义:

2.下面是 DXEFV 的定义

[FV.DXEFV]

[......]

阅读全文

Step to UEFI (229)继续研究修改QEMU 显示的版本号

前面提到过 OVMF 的 Setup 首页版本号显示的代码【参考1】,在 \MdeModulePkg\Application\UiApp\FrontPage.c

就是说出了从 SMBIOS 之外,还可以在 PCD 中直接给定。实验,在\OvmfPkg\OvmfPkgX64.dsc 文件中加入下面的代码

编译之后,运行结果如下,可以看到新增加了  “Galileo 1.0.4”字样。

但是,非常奇怪的是按照之前的方法,无法在 FFS 文件中找到对应的字符串。为了进一步研究,打开生成 COD 的功能。在 \MdeModulePkg\Application\U[......]

阅读全文

学习 Verilog 的好去处:HDLBits

带着问题进行学习是掌握一门技术非常有效的方法。

https://hdlbits.01xz.net/ 网站提供了 Verilog 的一些题目,有兴趣的朋友可以尝试进行练习。同时这个网站在提供 Verilog 基础语法教程的同时,还能够在线仿真你的 Verilog 模块,将你的输出与正确的时序比较。

如果你在解题时遇到问题,还可以在知乎“HDLBits 中文导学”专栏中看到解析(比如我经常无法理解题目意思),还可以在评论中参加讨论。

https://zhuanlan.zhihu.com/c_1131528588117385216

[......]

阅读全文

Step to UEFI (228)QEMU Setup 首页研究

最近研究了一下 OVMF 项目的 Setup 首页界面,实现的方法挺有意思。

第一个问题,具体代码在什么地方,如果我想增加一行字应该如何实现。

经过研究,相关代码在  MdeModulePkg\Application\UiApp\FrontPage.c 中。首先,在 FrontPageVfr.Vfr 定义了8个字符串变量,例如:STR_CUSTOMIZE_BANNER_LINE4_LEFT。 在首页上面左右各有4个。在 UpdateFrontPageBannerStrings() 函数中动态填充这些字符串。例如:从 SMBIOS 中取得CPU 信息显示出来:

[......]

阅读全文

SleepStudy简介

SleepStudy 是微软提供的一个查看功耗相关的功能,在所有的 Windows 10 中都有无需额外下载安装。使用方法:

1.打开 CMD 窗口,特别注意需要管理员权限;

2.运行   powercfg /sleepstudy, 之后会将报告生成在一个 html 文件中

例如,下面就是一个 Pass 的结果,可以看到系统进入了 MS,98% 的 Software Residency和 Hardware Residency。

而这个是一个 Fail 的结果:Software Residency 为0 ,没有获得到 Hardware Re[......]

阅读全文