簡介
在博文"為什麼單片機通常隻有那麼小的數據内存?[1]"讨論在單片機内部集成大規模RAM的問題。但在有的時候還是需要有大容量的RAM作為數據緩存。比如在博文“擴展32KRAM的STC8H8K信号采集版”介紹了通過并行接口擴展單片機片外内存的方法。在STC8H8K單片機運行在40MHz總線的情況下,完成片外RAM的讀寫僅僅需要0.5微秒。這在很多情況下可以滿足單片機數據訪問的要求了。
但是通過單片機的并口擴展外部RAM,一個最大的缺點就是造成了單片機引腳的大量浪費,增加了電子線路布闆空間的浪費。因此使用高速同步串行接口(Serial Peripheral Interface)開展外部RAM可以有效解決這個問題
▲ 郵購五片23LC1024芯片
本文下面通過具體實驗來測試基于Microcchip公司的23LC1024(128MByte)的串口RAM的擴展方式,為今後構建數據采集單片機系統做好準備。
實驗AD工程:
“
D:\zhuoqing\AltiumDesigner\Test\2020\Test23ALC1024\Test23LC1024.SchDoc *
▲ 實驗電路的原理圖
▲ PCB 設計版圖
(1)單片機ISP硬件配置:
單片機的工作主要頻率:。
▲ 單片機的硬件配置
(2)SPI設置:
SPI基本信号,下圖顯示CS,CLK的信号。
▲ SPI中的基本信号,CS,CLK
SPI 的CLK的頻率設置為:
SPISendChar():消耗時間:1.6us SPISendReceChar(): 1.6us
(1)上電後讀取Mode Register 缺省值: 上電後讀取LC1024: LC1024ReadMode: 0x40;
▲ MODE寄存器的定義
(2)對Mode Register 讀寫:
voidSerialDebugProcessBuffer(void){
unsignedcharucChar;
SerialDebugBuffer2Argument();
if(g_ucSDANumber*0)return;
if(strcmp("hello",(char*)STD_ARG[0])*0)
printf("%sisready!\r\n",VERSION_STRING);
elseIFARG0("mr"){
ucChar=LC1024ReadMode();
printf("LC1024Mode:%bx\r\n",ucChar);
}elseIFARG0("mw"){
sscanf(SDA(1),"%bx",&ucChar);
LC1024WriteMode(ucChar);
printf("Mode:%bx\r\n",LC1024ReadMode());
}
elseprintf("Errorcommand:%s!\r\n",STD_ARG[0]);
}
(1) 基本讀寫: 通過寫入和讀出驗證,可以驗證整個0x1ffff可以被測試正确存儲。
(2)讀寫時間測試:
循環寫入0x8000字節,需要時間為:0.671s 循環讀出0x8000字節,需要時間為 : 0.671s
nBegin=GetClickMS();
for(i=0;i<nSize;i ){
LC1024ByteRead(lnAddress i);
}
nEnd=GetClickMS();
printf("Time:%d\r\n",nEnd-nBegin);
(3)測試讀寫單個字節的時間:
通過測試CS波形,可以測到對于LC1024單個字節的讀寫時間為:19.6us。 讀寫函數為: LC1024ByreRead(), LC1024ByteWrite().
▲ LC1024讀寫單個字節時間(CS)
測量:LC1024ByteReadDim, LC1024ByteWriteDim,讀寫兩個字節所需要的時間為:23.2us。
測量LC1024 CLK的波形,可以觀察其中的主要延長來自于對于地址的操作。在LC1024ByteWrite()函數中存在對于長整地址的移位操作。所以前面的時序特别長了。
▲ 寫操作中的CLK脈沖
将LC1024相關函數的地址進行改造,直接将24bit的三個字節的地址通過參數輸入。
unsignedcharLC1024ByteRead(unsignedlonglnAddress);
voidLC1024ByteWrite(unsignedlonglnAddress,unsignedcharucByte);
voidLC1024ByteReadDim(unsignedlonglnAddress,unsignedchar*pucDim,unsignedintnSize);
voidLC1024ByteWriteDim(unsignedlonglnAddress,unsignedchar*pucByte,unsignedintnSize);
改造後的讀寫速度波形為:
▲ 讀寫LC1024的CS和CLK波形
此時,讀寫一個字節所需要的時間為7.86us。
直接對長整地址移位所消耗的時間測量: 下面是測量的數據:
▲ 地址移位所消耗的時間
測試的代碼:
OFF(LC1024_CS);
lnAddress=lnAddress>>8;
ON(LC1024_CS);
測試了23LC1024的基本的SPI模式的讀寫性能,這對于一般的數據緩存是滿足的。
但是在高速數據采集過程中,高達20多微妙的訪問時間受限。這需要通過芯片的SQI多數據線模式來提高訪問速度。
還是受限于8051這個單片機的内核,使得該芯片的高速性能無法進一步提高了。将MCU更換成ARM的32位單片機則可以實質提高提高速度。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!