eeprom - 使用 AT28C256 作为 Z80 的非易失性 SRAM
问题描述
我一直在使用 AT28C256 作为 Z80 项目的 EEPROM 'ROM',非常成功。由于 AT28C256 可以使用 /WE 引脚在 5V 下编程,我正在考虑将其用作非易失性 SRAM 的一种形式,而不是添加另一个芯片。
是的,AT28C256 的大小只有 32kB,所以我没有使用 Z80 上的整个 16 位地址空间——但我想知道这是否可能?
我可以将 Z80 上的 /MREQ 和 /WR 线 OR 一起用于 AT28C256 上的 /WE 吗?还是我错过了什么?
然后我可以将堆栈指针 (SP) 设置为 32k 边界,而不是通常的 0xFFFF。
解决方案
您可以像 RAM 一样使用 EEPROM,但前提是您必须考虑到它的行为。
您可以简单地连接:
- Z80-/MREQ 到 EEPROM-/CE,但您需要对此进行门控
- Z80-/WR 转 EEPROM-/WE
- Z80-/RD 转 EEPROM-/OE
需要考虑的事项,请参阅数据表了解详细信息:
如果您写入一个字节(或使用页面写入算法),那么如果您读取它,EEPROM 将不会输出存储的值,直到自定时写入周期过去。
写周期大约是几毫秒长。
EEPROM 可能会在几个 10k 写入周期后出现故障(感谢 Stefan Paul Noack)。
由于第 1 点,您不能将其用于更改芯片内容的程序。
由于第 2 点,您不能将它用于堆栈或任何其他需要快速存储和检索的数据。
但是,您可以将其用于应用程序的数据。但是您将需要另一个内存来运行程序。
如果您的程序需要快速写入堆栈或其他变量,您将需要额外的 RAM。(注意:我记得一个 Z80 应用程序用简单的 DRAM 实现了一个打印机队列,只使用 CPU 的寄存器来存储程序的变量,并且只使用 DRAM 来缓冲数据。)
要将多个芯片用作内存,您需要根据它们的地址范围对这些内存的 /CE 引脚进行门控。
推荐阅读
- laravel - 如何手动调用传递数据到模态观察者并触发观察者
- angular - 如何为其他模块导出在 entryComponents 中声明的组件?
- javascript - 如何为可折叠表格行添加分页?
- excel - EXCEL VBA 忽略 Solver 更改值
- google-analytics - 使用网站脚本通过 Google Analytics 跟踪移动网络应用
- angular - 类型“{}”上不存在属性“nodeQuery”
- node.js - 将整个 mongoDB 数据备份到 json 文件/压缩形式的 NodeJS 脚本
- r - 调整 ggplot2 中 facet_wrap 面板标题和轴的位置
- python - 如何通过可变长度路径遍历到同一目的地?
- matplotlib - Matplotlib:将图例分配给不同的数字