ESP32 YModem 的测试例子

根据 https://github.com/loboris/ESP32_ymodem_example 修改的 Arduino 版本的 ESP32 代码,在 FireBeelte 上测试通过。通过USB 串口进行测试,接收到的数据并不会存放在任何地方。

使用 Windows XP 的超级终端测试,在 921600 波特率情况下(超级终端支持的最高频率),传输速度可以达到 34KBytes/s。

DFRobot 的 FireBeetle 上面使用的是 CH340C,最高可以支持 2,000,000的波特率。但是

[......]

阅读全文

Acpica 工具的重新编译方法

我们编译使用的 ACPI 工具iASL .exe通常来自Acpica。这个工具是开源的,本文将介绍如何在 Window 下编译。

首先,源代码可以来自https://github.com/acpica/acpica/releases 或者 https://acpica.org/downloads/windows-source。个人更推荐前者,后者在很多时候会有奇怪的问题。

接下来准备编译环境和工具。这次我使用 VS2019, 有兴趣的朋友可以使用这个 VS2019 离线安装包,安装方法很简单的,默认选项不需要联网即可完成安装。接下来需要安装3个工具:

1.GnuWin32 &[......]

阅读全文

Step to UEFI (232)UEFI Shell 下控制 USBNotifer

前面的文章介绍了如何使用 CH55X 制作一个 USB 提醒器【参考1】,这次介绍如何在 UEFI Shell 下编写 Application 来控制使用它。

从思路上来说,可以使用加载驱动,然后调用驱动引入的 protocol 来进行控制。比如,FT232 有一个驱动,可以在 UEFI Shell 下直接调用【参考2】.但是,这次的USB 提醒器并没有这样的Driver(估计需要等待 WCH 来进行开发吧)。于是,我们只能尝试直接对其发送数据。

首先使用 USBView 查看一下:

这里需要特别关注的是 Endpoint, 可以看到有下面三个 Endpoint, 第一个[......]

阅读全文

VC 获得系统的 MCFG Table

之前介绍过我们可以从内存来进行 PCI 配置空间的访问,前提是需要找到 PCI Base Address。在现在的系统中,这个地址是放在 ACPI MCFG Table 中来通知系统的。例如,下面就是我电脑上的 Base Address。

为了完成这个目标,分作两步,第一步是取得 MCFG Table,通过 GetSystemFirmwareTable() 函数来完成;第二步,根据 MCFG Structure Definitions 来解析 MCFG Table,即可获得我们需要的值。最终代码如下:

运行结果:

[......]

阅读全文

国产高速芯片 CH9344 测试板

 CH9344是南京沁恒出品的一款串口芯片。现在市面上常见的 CH340 也是他们家的产品。相比之下,CH9344有下面2个显著的特点:

1.      最高支持 12,000,000串口频率;

2.      一颗芯片带有4个串口。

更具体的信息可以在官方页面【参考1】上看到。

这次我尝试使用这个芯片制作了一个测试板。首先是绘制电路图,基本上就是照搬 Datasheet上提供的参考设计。需要特别注意的[......]

阅读全文

VC 宏展开

相信很多人入门时都使用 MASM,这的 MASM 就是 Microsoft‘s Macro Assembler。其中的 Macro 就是宏的意思。相比函数,宏具有更加简洁,运行速度快(编译器会对代码进行“宏展开”,直接修改代码)等等特点。但是,如果需要调试和阅读具有多层宏定义就非常痛苦了。很多年前我接触到的P公司的BIOS代码就是这样,乍一看代码非常规整,每一行就像一个洋葱,追踪起来一层又一层,让人感叹阅读代码是个系统工程。

最近偶然看到 GCC 有展开宏功能,同样的在Microsoft 的Visual C++上也有类似功能,通过编译指令 /p 或者 /ep 即可实现。这两个参数的区别在[......]

阅读全文

UEFI TIPS: 定义一个注释宏

最近看了一下C语言中 Define 的用法,这个可以看成是C 语言的宏定义,在使用时会进行展开。从这个角度来说,可以用它实现编译过程中自动删除代码的功能。

比如下面的代码中,当定义LAB_APP_DEBUG 1 后,编译过程中 zPrint  会被解释成为 “\\” 这样对应的一行就会被注释掉。

此外,EDK2 中一些宏将一些函数定义为空,在编译时通过当前时 DEBUG 还是 REALSE 进行区分,可以做到和上面相同的效果。

[......]

阅读全文

Arduino CH376 模块调试指南

去年的时候,介绍过通过串口来和 CH376 通讯【参考1】,最近又将它拿出来玩,和之前不同,这次是和 ESP32 通讯,没想到遇到了奇怪的问题,以此为契机仔细研读 datasheet 总结如下。

  1. 硬件连接:USB 转串口卡,上面的 5V(必须5V),接VCC;GND 接 GND;TX接 RX; RX 接TX; 特别注意,这种板子上有一个5V转3.3V的ASM1117,就是说5V提供给USB 设备,但是芯片是工作在3.3V 下,这种情况下串口一般都能正常工作,但是如果用 SPI 模式,需要特别注意和单片机的电平匹配问题;
  2. 串口发送 CHECK_EXIST (57 AB 06 AA),正确的回[......]

    阅读全文