完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在博文“为什么单片机通常只有那么小的数据内存?”讨论在单片机内部集成大规模RAM的问题。但在有的时候还是需要有大容量的RAM作为数据缓存。比如在博文“扩展32KRAM的STC8H8K信号采集版”介绍了通过并行接口扩展单片机片外内存的方法。在STC8H8K单片机运行在40MHz总线的情况下,完成片外RAM的读写仅仅需要0.5微妙。这在很多情况下可以满足单片机数据访问的要求了。
但是通过单片机的并口扩展外部RAM,一个最大的缺点就是造成了单片机引脚的大量浪费,增加了电子线路布板空间的浪费。因此使用高速同步串行接口(Serial Peripheral Interface)开展外部RAM可以有效解决这个问题 本文下面通过具体实验来测试基于Microcchip公司的23LC1024(128MByte)的串口RAM的扩展方式,为今后构建数据采集单片机系统做好准备。 设计方案 实验AD工程: D:zhuoqingAltiumDesignerTest2020Test23ALC1024Test23LC1024.SchDoc * 1. 实验电路的原理图 ▲ 实验电路的原理图 2. PCB ▲ PCB 设计版图 3. 底层软件设计 (1)单片机ISP硬件配置: 单片机的工作主要频率: ▲ 单片机的硬件配置 (2)SPI设置: SPI基本信号,下图显示CS,CLK的信号。 ▲ SPI中的基本信号,CS,CLK SPI 的CLK的频率设置为: SPISendChar():消耗时间:1.6us SPISendReceChar(): 1.6us 特性测试 1. MODE REGISTER (1)上电后读取Mode Register 缺省值: 上电后读取LC1024: LC1024ReadMode: 0x40; ▲ MODE寄存器的定义 (2)对Mode Register 读写: void SerialDebugProcessBuffer(void) { unsigned char ucChar; SerialDebugBuffer2Argument(); if(g_ucSDANumber == 0) return; if(strcmp(“hello”, (char *)STD_ARG[0]) == 0) printf(“%s is ready !rn”, VERSION_STRING); else IFARG0(“mr”) { ucChar = LC1024ReadMode(); printf(“LC1024 Mode:%bxrn”, ucChar); } else IFARG0(“mw”) { sscanf(SDA(1), “%bx”, &ucChar); LC1024WriteMode(ucChar); printf(“Mode:%bxrn”, LC1024ReadMode()); } else printf(“Error command : %s !rn”, STD_ARG[0]); } 2. 测试对内部RAM读写 (1) 基本读写: 通过写入和读出验证,可以验证整个0x1ffff可以被测试正确存储。 (2)读写时间测试: 循环写入0x8000字节,需要时间为:0.671s 循环读出0x8000字节,需要时间为 : 0.671s nBegin = GetClickMS(); for(i = 0; i 《 nSize; i ++) { LC1024ByteRead(lnAddress + i); } nEnd = GetClickMS(); printf(“Time:%drn”, nEnd - nBegin); (3)测试读写单个字节的时间: 通过测试CS波形,可以测到对于LC1024单个字节的读写时间为:19.6us。 读写函数为: LC1024ByreRead(), LC1024ByteWrite()。 ▲ LC1024读写单个字节时间(CS) 测量:LC1024ByteReadDim, LC1024ByteWriteDim,读写两个字节所需要的时间为:23.2us。 测量LC1024 CLK的波形,可以观察其中的主要延长来自于对于地址的操作。在LC1024ByteWrite()函数中存在对于长整地址的移位操作。所以前面的时序特别长了。 ▲ 写操作中的CLK脉冲 将LC1024相关函数的地址进行改造,直接将24bit的三个字节的地址通过参数输入。 unsigned char LC1024ByteRead(unsigned long lnAddress); void LC1024ByteWrite(unsigned long lnAddress, unsigned char ucByte); void LC1024ByteReadDim(unsigned long lnAddress, unsigned char * pucDim, unsigned int nSize); void LC1024ByteWriteDim(unsigned long lnAddress, unsigned char *pucByte, unsigned int nSize); 改造后的读写速度波形为: ▲ 读写LC1024的CS和CLK波形 此时,读写一个字节所需要的时间为7.86us。 直接对长整地址移位所消耗的时间测量: 下面是测量的数据: ▲ 地址移位所消耗的时间 测试的代码: OFF(LC1024_CS); lnAddress = lnAddress 》》 8; ON(LC1024_CS); 结论 测试了23LC1024的基本的SPI模式的读写性能,这对于一般的数据缓存是满足的。 但是在高速数据采集过程中,高达20多微妙的访问时间受限。这需要通过芯片的SQI多数据线模式来提高访问速度。 还是受限于8051这个单片机的内核,使得该芯片的高速性能无法进一步提高了。将MCU更换成ARM的32位单片机则可以实质提高提高速度。 |
|
|
|
只有小组成员才能发言,加入小组>>
2627 浏览 0 评论
834浏览 1评论
293浏览 1评论
608浏览 0评论
335浏览 0评论
555浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-23 15:32 , Processed in 1.158344 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191