ProtoType Shield V3

很多时候,我们需要制作自己的 Shield板,这时候可以选用 Prototype Shield,可以理解为就是形状为Shield 的洞洞板。

这样做的好处是:方便使用,即插即用;成本比较低。

淘宝上也有做好的这样的 Shield 板, 价格为 6元

相比之下,我的设计的好处是:可以使用排针+排母的方式进行扩展。这样就避免购买长脚排母的麻烦。同时Taobao上找不到足够硬的排母,这意味着安装好的排母经不起几次插拔。

下面是焊接好的样子:

附件是 Eagle版的电路图。
zProtoShieldv1.1

此外,存在的问题:

1.在 leonrado上用力下压会顶到9V电源,没有短路之虞但是对于追求完美的人可能无法忍受;
2.在Uno 上,左上角会接触到 USB口,可能会短路,在使用的时候我都是贴上胶带的.

祖国版 USB HOST MINI 使用

第一, 我们淘宝上能买到的,不是原本的设计,有一些修改,这样的修改会导致USB设备的供电问题。下面是原版的设计,在绿色圈标记的位置,有一个焊接的跳线还有一个排针的位置。当焊接跳线接起来的时候,USB设备收到的是3.3V的电压(我不清楚有什么设备可以在3.3V供电的情况下工作,所以这个设计让我觉得莫名其妙)。

下面是我们能买到的祖国版

可以看出标记的位置是有差别的。对于我们来说,需要切开上面的连接,然后在排针上送入5V即可正常驱动 USB 设备工作。

第二, 模块有一个 USB Host Reset Pin,在正常使用的时候需要设置为High。为了简单起见,可以将这个 Pin 直接连接到3.3v。

实做:读取Audio Codec 的 VID/PID

最近在研究 Audio ,目前使用最广泛的是 Intel 的 HD Audio,和之前的 AC97 相比复杂多了,网上也少有关于如何驱动这个 Audio 的文章,看起来很痛苦。因为音频的数据量通常很大,所以通讯方面都是以 DMA 为主。好在除此之外设计上还提供了一套简单发送命令的机制。下面就是我在 Kabylake-R 的平台上实验直接发送 command 读取 codec 的 VID 和 PID的实验。

1. 找到 audio pci 设备,在 KBL-R 上是 D32:F2

我们需要的 Memory Mapped I/O 在 Offset 10 和 14 (一共是8 Bytes)

但是这时,对应的内存位置全都为0xFF:

2. 对 PCI_COMMAND_OFFSET(0x04)发送 EFI_PCI_COMMAND_MEMORY_SPACE (0x02) command:

3. 再打开 Memory Mapped I/O Register,在 0x2F FB43 0000,可以正常工作;

4. 根据 HD Audio Spec, ICW(0x60) IR(0x64) ICS(68h)。在 ICW 中写入NID=0,Verb ID=0xF00,Parameter ID=0x0的Verb Command

然后在ICS(68h) 写入 0x3

5. 很快,我们就能在IR(0x64) 看到返回值。这里我们用的是 Realtek 的 codec ,所以给出的VID 是 Realtek的,也证明方法的正确性。

如果细心观察BIOS中使用的 Verb Table 会发现在头部有一个 VID 和 PID,每次在Load 这个 Table 之前是有一个上述获取然后比较的动作的,因此,不用担心型号上的错误。比如:Realtek 298 和 798 的 PID 不同,如果使用错误会通过 Debug 口输出信息。