单片机交流
登录
直播中
笑过就走
10年用户
991经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术
私信
关注
[问答]
如何对基于23LC1024的SPI模式读写性能进行测试
开启该帖子的消息推送
SPI
模式
串口
如何对基于23LC1024的串口RAM扩展方式进行测试?
如何对基于23LC1024的SPI模式读写性能进行测试?
回帖
(1)
李四民
2021-10-22 14:22:29
在博文“为什么单片机通常只有那么小的数据内存?”讨论在单片机内部集成大规模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位单片机则可以实质提高提高速度。
在博文“为什么单片机通常只有那么小的数据内存?”讨论在单片机内部集成大规模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位单片机则可以实质提高提高速度。
举报
更多回帖
rotate(-90deg);
回复
相关问答
SPI
模式
串口
为什么SRAM
23LC1024
中SRAM没有响应?
2019-08-08
2193
无法关闭重置连接到Arduino的SRAM
23LC1024
2020-04-02
1694
ATMEGA2560的I/O口模拟
SPI
和25
LC1024
进行
通讯的正确程序
2015-08-28
8359
STM32外扩SRAM
2018-11-16
4825
SPI
RAM Tx/Rx总线操作怎么指向读取地址?
2019-11-05
2347
光纤是如何
进行
分类的?如何对光纤的
性能进行
测试
?
2021-05-27
2182
蓝牙产品怎么
进行
射频
性能进行
测试
?
2019-09-17
4613
如何使用
SPI
?如何对
SPI
的操作时序
进行
读写
呢
2021-12-20
5015
SPI
是什么?MCU主机是如何
进行
SPI
读写
数据的?
2021-07-07
1950
使用外部MCU控制PGA450
进行
测距,怎么才
能进
入
SPI
模式
?
2025-01-08
288
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分