总线错乱
扫描二维码
随时随地手机看文章
简介
RAM是计算机系统中保存临时结果的器件,它的大小也决定了计算机处理数据的规模。在嵌入式计算机(单片机中),由于受到价格、功耗等原因,内部的RAM的容量往往比较小,比如从几百字节到十几k字节不等。这能够满足大部分单片机应用的需求了。
但是在一些特殊的应用情况下,有时需要大容量的RAM来存储采集到的数据,或者缓存通信数据。此时则需要通过外扩内存来完成。比如最近实验声音信标信号[1]相关系统测试和算法优化,则需要采集到多路音频信号。此时需要通过外扩RAM来解决。
通常静态RAM芯片接口包括有数据、地址和控制总线,与单片机对应的端口相连便可以加成数据的写入和读出。
有的单片机在扩展外部RAM的时候,为了节省有限的IO端口,通过使用外部锁存器来复用同一八位地址端口来扩展地址总线到16位的目的。比如8051单片机。这样设计的代价就是需要增加外部锁存器芯片74LS372。
虽然数据总线和地址总线按照逻辑都标有数据位的顺序:比如16位地址总线按照A0~A15,8位数据总线表明D0-D7。但是在访问静态RAM的时候,数据总线,地址总线内部的这些位的顺序是可以任意调整的。
比如在下面设计的单片机系统中,为了满足能够尽量减少PCB布线的交叉,就是通过调整数据线和地址总线内部位的顺序来满足的。
扩展STC8H8K外部32k字节RAM
1. 设计说明
STC8H8K单片机具有16路12位的AD转换器,在本实验中用于采集信标发出的Chirp声音,并传送给计算机加以处理。
在博文“基于STC8G8K64U三通道高速ADC采集板[2]"给出了利用STC8H8K内部的8kRAM进行声音信号采集电路设计方案。但是受限于内有8KRAM的空间限制,所能够采集音频信号的路数和时间长度都无法满足研究的目的。所以此次通过外部扩一片32k字节的SRAM来扩展信号采集的容量。
同样通过WiFi-UART转换模块,实现采集数据与PC机之间的数据传送,这一点设计与前面博文中的设计方案是一致的。
2. 原理图
所使用的STC8H8K芯片的封装为TSOP48。使用P2端口作为数据总结,使用P0,P4端口作为地址总线。不需要外部的锁存器。
使用UART3与WiFi-UART模块通信。将ADC中的AD0~AD2引到输入端口接收外部被采集的信号。
具体的电路图如下图所示:
外部接口设计:
(1) ISP端口:
序号 | 符号 | 功能 |
---|---|---|
1 | VCC | +5V工作电源 |
2 | GND | 工作电源地 |
3 | TXD | MCU串口输出 |
4 | RXD | MCU串口输入 |
(2) ADC端口:
序号 | 符号 | 功能 |
---|---|---|
1 | ADC0 | ADC通道0 |
2 | ADC1 | ADC通道1 |
3 | ADC2 | ADC通道2,可以作为普通IO |
2. PCB板
这里需要需要说明的是,为了能够适应快速制版的实验需要。使用了单面PCB板工艺。为了消除在布线中的交叉部分(因为交叉部分则需要过孔和双面布线),对数据总线和地址总线的顺序进行了调整,由此可以仅仅使用一面PCB便将所有的数据和地址总线完成连接。
下面给出了具体的PCB连接方式。前面原理图中显示了调整后(总线错乱)的地址线和数据线的逻辑设计。
在实际电路设计工程中,有的时候为了方便布线,需要对引线的顺序进行调整。在复杂电路设计中,优势会通过FPGA、CPLD等大规模可编程逻辑器件来对芯片外部引线的顺序进行调整,方便进行布线。当然这也需要付出设计的复杂度和额外增加的芯片价格。
硬件调试
1. 扩展RAM实验
通过设计,电路板腐蚀、焊接与安装,很快得到实验电路。下面对其进行测试。
STC8H单片机硬件编程选项配置如下:
单片机工作的主要指标:
-
内部工作主频:40MHz -
ISP UART1 波特率:500000bps; -
WiFI-UART波特率:460800bps
(1)访问外部RAM时间长度
使用MCU的端口来测量访问外部RAM的时间,下面是测量写入外部RAM的时间,为534ns(包括对FLAG_PIN的操作时间。)
ON(FLAG_PIN);
ExtSramWrite(0x0, 0x0);
OFF(FLAG_PIN);
使用相同的方法,测试 ExtRamRead()的时间为490ns。
2. AD转换实验
(1)AD的通道设置:
使用了P1.0, P1.1 来采集两路外部模拟信号。
(2)AD转换时间:
-
AD参数设置:STC8H内部转换启动 -
AD转换时间:通过ADC2(P1.4)输出脉冲来测量。 -
测量结果:两次ADC转换,时间为5微秒;
ON(FLAG_PIN);
ADCSetChannel(0);
g_nADResult1 = ADCConvert();
ADCSetChannel(1);
g_nADResult2 = ADCConvert();
OFF(FLAG_PIN);
采集实际信号
1. 采集两路测试信号
下图显示了采集两路测试信号的波形:
2. 采集Chirp音频信号
采集两路分别来自于调频接收模块以及麦克风传感器的Chirp信号并求取它们的相关信号,来判断时间延迟。
下图是采集到的声音信号,长度为0.8192秒。包含了两个Chirp信号周期的数据。
公众号留言
卓大大,实话实说,这次比赛实在是太太太太太赶了,学校大概六月初左右返校,然后还要准备期末考试。我们队伍参加的是直立节能组。别的组别或许还可以在没有仪器的情况下就把车做出来,但是我们是万万不可能的。充电板和车模一旦有一点问题更正周期是以周计算的,按照以往学长的进度,正常比赛留给软件调试的时间也不过就是半个月左右,现在准备时间压缩到两个月,这次规则的软件又比以往都要难一些,感觉除非开学之后每天通宵,不然实在是不能确保小车的稳定性。
求大大考虑考虑节能的兄弟们。
回复:现在,我只能说:兄弟们加油。
卓老师好,深夜打扰。请问这款芯片可以在信标组中使用,还是说只要涉及到控制的微处理器都要用infineon的呢?
回复:这款芯片如果只是专用于电机驱动设计,不参与其它运动控制,是可以应用到信标组别的。
卓老师,我听说了一种想法,有些同学在群里讨论用1064自制openmv,事实上偷偷用1064跑信标,我虽然没有验证过可行性,但是不希望有这种想法伤害到比赛的公平性,也不愿意看到openmv因此而被禁止,所以也跟卓大提及一下这种想法。
再提出一个建议:音标比赛只允许使用成品openmv
回复:谢谢你反映的这种情况,以及提出的建议。
参考资料
声音信标信号: https://blog.csdn.net/zhuoqingjoking97298/category_9689868.html
[2]基于STC8G8K64U三通道高速ADC采集板: https://zhuoqing.blog.csdn.net/article/details/105731860
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!