z80 的 SPI 硬件接口

Posted

技术标签:

【中文标题】z80 的 SPI 硬件接口【英文标题】:SPI Hardware interface to z80 【发布时间】:2016-01-24 23:34:22 【问题描述】:

我正在尝试使用 z80 制作一台复古计算机,理想情况下希望它能够从 SD 卡启动。我 100% 准备使用 z80,不想使用带有内部 SPI 硬件接口的微控制器。我想了解计算机的硬件和软件方面,因此 arduino 和微控制器不在讨论范围内,因为硬件方面在您购买之前就已经完成。无论如何,我的主要问题是是否可以结合移位寄存器、一些解码逻辑和软件通过 SPI 模式从 SD 卡读取?我已经在互联网上搜索了几个小时并阅读了几篇文章,但似乎找不到教程。我了解 SPI 协议,但是缺乏关于硬件方面的信息,因为微控制器倾向于内置所有硬件。我计划将 SD 卡的 SOMI 连接到移位寄存器的串行输入引脚 SIMO将SD卡的串行输出引脚连接到移位寄存器的串行输出引脚,然后将一些数据引脚连接到一些触发器,中间有一些解码逻辑,这样如果我输出到特定端口,它将切换触发器。触发器将用作 SD 卡的时钟和芯片使能线。我还将 z80 的一个引脚连接到移位寄存器的锁存引脚(同样在中间有解码逻辑),这样如果我输出到特定端口,它将锁存移位寄存器的数据。我不关心速度/效率,只要我能准确地从 SD 卡读取数据。另外,我是否将移位寄存器时钟输入连接到与连接 SD 卡的时钟相同的时钟?任何关于如何实现这一点的建议将不胜感激,谢谢!

【问题讨论】:

【参考方案1】:

您真的可以在常规 IO 上使用 SPI。您所需要的只是时钟信号的边沿中断和片选的电平中断。其他一切都可以在软件中完成。要发送,请将芯片选择保持在低电平,并以所需的速率输出 MOSI 上的位。要接收,通过在时钟线上的所需边沿上从 MISO 采样位来处理芯片选择变低。将所有内容粘贴在缓冲区中并在芯片选择线返回高电平时处理缓冲区。

【讨论】:

这不是我在本质上对移位寄存器所做的吗? z80 没有串行输入引脚,无法自行更改各个输出引脚的状态/创建电平输出。这就是为什么我使用连接到输出端口的触发器来生成时钟/芯片使能信号。请原谅我缺乏知识,这是我最近的一个爱好,我必须自学到目前为止所学的几乎所有东西,并且可能在此过程中误解/误解了一些事情。 是的,我只是建议不需要移位寄存器。当然,如果您的特定微机没有任何方法可以从外部信号触发中断,则可以使用外部移位寄存器。但实际上,任何 IO 都可以是串行 IO。大多数 micros 都有“并行 IO”,但没有什么能阻止你串行使用它们。 我应该补充一点,通常你会看到一个外部移位器,主要是当它直接连接到内存总线时,或者如果你需要高速。显然位敲击会更慢,但在微控制器项目中,速度通常不是问题。通常的目标是让微控制器尽可能少地运行以节省电力。 其他可能有用的观察:在 Z80 上,NMI 线是边沿触发的,IRQ 线是电平触发的。虽然我猜您可能希望将 NMI 与时钟信号联系起来,并在每次触发时对芯片选择以及数据进行采样。 @Tommy 唯一的问题是,当您尝试发送时,您还将对数据进行采样,并且当其他设备将芯片选择拉低时,这意味着服务的中断比您需要的更多。如果您将片选路由到 IRQ,并将时钟路由到 NMI,则在 IRQ 线 ISR 中,当它变为低电平时将中断向量设置为 NMI,并在变为高电平时将其复位。使用单独的布尔标志设置发送模式,并在采样数据之前检查它以避免回显。

以上是关于z80 的 SPI 硬件接口的主要内容,如果未能解决你的问题,请参考以下文章

LM401STM32WLE5+SPI接口驱动 2.66inch e-paper 墨水屏

硬件设计基础----通信协议SPI

硬件设计基础----通信协议SPI

基于硬件 SPI 的数据抽象实例

S5PV210硬件结构

SPI通信