米克罗莎。第一章。SD卡控制器



许多人都记得这台出色的PC。我11岁时就知道了这一点。花了28年的时间,现在我决定制造一种我当时真正缺乏的扩展设备作为业余爱好。

理念


在网络上,我看到了用于此类PC的SD下载器的多个选项,我不喜欢其中包含微控制器,我想使用“老式,温暖的DIP”电路,这就是为什么我决定在家用逻辑电路上使用“ KR1533”的原因。

作为补充。我应用了UT62256的RAM。这是该项目中唯一导入的芯片。当然,可以安装KP537RU10或KP537RU25A,但首先,它们必须安装的不是一个,而是两个(我计划增加4 KB的额外RAM),其次,我具有UT62256,但我没有KR537,也不必订购我想 因此,我允许自己自由导入,然后想到了使用所有32kB的额外RAM进行页面切换的想法。


对于ROM,我选择了KR573RF5,只有两个干净的ROM。

流程图


坐在一杯茶后,我画了这样的框图。



这是RAM芯片,ROM芯片和PORT模块。 PORT模块具有一个并行接口,具有8个输入和8个输出。写入EFFF地址时,将在输出端设置写入的代码,而从同一地址读取时,读取的值将对应于输入的状态。其中的三个输出和一个输入通过电平转换器连接到SD卡。

RAM由UT62256芯片表示,具有32kB的内存。由于E000-EFFE地址的范围几乎为4kB(4095字节),因此我们获得了由PORT块第1,2和3位选择的8个页面。即,写入EFFF地址将根据这三个位设置页面。从该端口读取的数据还会显示当前选中的页面(相同位)。总共,我们有32760字节的额外RAM(4095x8str)。

ROM芯片是KR573RF5。它连接到地址空间F000-F7FF,并包含BSVV代码(BIOS),该代码的任务是初始化SD卡,从中加载OS并将控制权转移到其中。

因此,在打开PC后,我们输入GF000 System Monitor并按VK。

将来,有一种想法可以修改系统监视器的本机ROM,以从SD卡自动启动操作系统,如果下载失败或被中断(例如,按某些键),则PC会进入标准监视器提示。
我会再考虑一下。

方案


在计算机上大约需要2-3个小时,我在EAGLE中绘制了下图。 我根据我拥有的微电路绘制了


Zoom

如果使用其他门,则可以减少逻辑芯片的数量,但我只有一个。将来,我很可能会优化电路。

低电平电路解析...

...在扰流板下取下,我想很少有人对此丛林感兴趣。
V3/1, A14 A15 , N3 , .1. V1/2 G, IC2. A B, A12 A13 . , , A14 A15, A12 A13. — 1110,
A15-1; A14-1; A13-1; A12-0. N2. , 5 11, - , , . 1 5, 2 11. , 1C , 2C , .1 5, .0 — 11.

: Exxx =1, «PORT», Exxx C=0, «RAM».

«C» , (A0-A11). xFFF, =1, =0. : «PORT» EFFF, «RAM» E000-EFFE.

«RAM» CS IC3, , , E000-EFFE . E000-EFFE . EFFF IC4, . «PORT» «WR» c V1/5, V1/6 V3/4.

EFFF IC5,
B0-B7.

. « » CS3 CS .

布局装配


现在我没有机会在家中毒该板了,我拿起一块铝箔涂层的双面PCB,从中锯出了必要的矩形。

此矩形已牢固地插入PC的“内部接口”插槽中,没有挂出,也没有移动。接下来,我在背面和正面刮擦了垫子。结果很好。然后是微电路的粗略排列和孔的侦察。在正面,我用大钻头钻了一下,以使微电路的端子不与正面箔片接触。在反面,我刮擦了每个接触行的周边,并将其分成接触垫。

下一步,我将所有的微电路(和插座)放回了后面。安装过程花费了很多时间,而我是使用薄型MGTF进行安装的。他从正面将引线直接焊接到微电路的两腿,从背面一直焊接到两边。



焊接过程结束后,我决定注意信号电平转换器。事实是,SD卡的工作电压为3.3V,芯片KR1533AP6和KR1533IR22 TTL 5v。因此,我不得不制作一条小的适配器围巾,其水平仅限于齐纳二极管。

从SD卡到控制器的信号我刚刚拉到源3.3v。 10k电阻。如实践所示,该信号不需要转换。



虽然在最终版本中,我可能会基于比较器制造一个逆变器。

我使用microSD到SD适配器作为卡夹。

通常,尽管我担心某些微电路可能会出现故障,但在组装布局时没有特殊问题。

布局测试


首先,我检查了RAM操作,使用系统监视器指令“ F”向E000-EFFE区域写入了“ AA”,“ 55”,“ F0”和“ 0F”模式,并使用“ D”指令对其进行了检查。一切都正常了。

然后,使用``M''指令,我开始将不同的值写入EFFF地址,并用万用表观看153322寄存器的脚上的变化,其状态与记录的代码相对应。另外,当从该端口读取数据时,代码按照计划包含了选定的页面,即使MISO信号在低位接地时,它也变为0,并在打开时为1。

甚至有些怀疑所有微电路都在工作并且安装成功没错

BSVV


当然,我没有为58080编写程序的任何特殊工具。我必须在笔记本(记事本)中编写一个程序,然后手动将其转换为代码。
在DOS“ HIEW”下的编辑器中创建一个文件,并开始用代码填充它。作为基础,我将项目放在AVR下进行,其中有SD卡的标准初始化。该项目很旧,它没有使用任何文件系统,只是一个记录器。

首先,我编写了SPI编程接口的低级功能,然后编写了高级SD卡初始化例程。

原来是这样的算法...

...放在扰流板下面,我认为它已经为大家所熟知。
1. () 90;
2. CS .1 10 FF;
3. CS .0;
4. CMD0;
5. 01, 7;
6. . =0, , 2;
7. CMD8;
8. ACMD41;
9. 00, 11
10. . =0, , 8;
11. CMD58.
12. 2 EFFE.
13. .

还从初始化例程中读取了OCR卡寄存器,并将其中的第二个字节写入EFFE地址。这对于确定卡的类型是必需的。

对于SDSC-80h,对于SDHC-C0h。

如果未通过初始化,则显示消息“ SD CARD ERROR”,然后监视器熄灭且未复位。

我将此BSVV转换为WAV,并通过磁带输入将其下载到PC,然后对其进行调试,更正了源代码并再次下载了它。

桥梁


现在,我有32,760字节大小的额外RAM,分为8页。但是如何在页面之间导航?在第一页上运行的程序如何调用位于第四页上的例程?

为了解决这个问题,我提供了软件桥。桥接器是ROM中的一小块区域,可调节控制传输。

例如,执行代码必须将控制权转移到第3页到地址E4B5。然后,执行代码将低12位(4B5)放置在处理器HL的寄存器对中,并且将高4位放置值3-页号。现在在寄存器对HL中写入值34B5。然后代码跳转(JMP)到ROM区域,即所谓的JMP-Bridge,它只是转到ROM中的固定地址。该区域中的代码从HL寄存器对的高位提取页码,并将它们写入EFFF地址处的PORT块的寄存器。 RAM的第三页现在显示在E000-EFFE区域中。 JMP-Bridge程序会重置HL寄存器对的四个高位,并在其中写入“ E”。现在在HL寄存器对中已经有一个物理地址E4B5,在这里JMP-Bridge程序将控制权转移给它。

这将在页面之间转移控制。

有一个CALL-Bridge,它需要使用返回来调用子例程,并且与JMP-Bridge有所不同,它通过将当前页面保存在堆栈中,以及与返回相反的过程。

接下来的两个桥是STA桥和LDA桥。顾名思义,第一个将Battery寄存器写入逻辑地址(在HL中),第二个从逻辑地址读取数据到该寄存器。

由于这两座桥,从一个页面执行的程序可以将数据存储在另一个页面中。

操作系统加载


如果查看SD卡的启动扇区,可以看到文本“磁盘错误,按任意键重新启动”位于地址1AC-1D4。



是的,照片中的外观非常奇怪,因为Mikroshi的字符编码与ASCII不符。

我决定使用此区域将数据放置在此处以下载PC。

首先,我将代码00放在1BA位置,从而削减了记录。现在,仅应显示“磁盘错误”。剩下的字节是我的。原理很简单,有6个字节的MicrOS签名,并在带有OS的文件开头的SD卡上有4个字节的地址。在BSVV中,我写道,从SD卡接收到引导扇区后,将检查签名,如果签名存在,则取下4个字节并将其用作加载OS的扇区地址。

如果没有签名,则会显示消息“ OS DOWNLOAD ERROR”,并且系统监视器将不复位而熄灭。


现在,最后,一切正常。BSVV已编写,但我仍然需要将其写入ROM。



为此,我需要编辑子例程调用和跳转的所有地址,因为该处理器具有绝对寻址。然后我为区域6000-67FF编写了BSVV以加载到RAM中。但是现在我们需要将所有6xxx更改为Fxxx。

另外,我处于“ popanetsky”状态。我有一个ROM编程器,但是它是一个旧的,在LPT端口下。而且没有一台装有LPT的计算机。但是,PDIP40封装中有一对Atmega32A和一块面包板。您可能需要使用AVR模拟LPT。但是,也许一切都会奏效……仅

而已感谢您的关注!未完待续…

All Articles