之前已经有L476 F7 QSPI扩展RAM,内存映射后只读不能写,当然有他的用处,不过不能写就很麻烦了,程序是动态的,数据会变化,不能写的内存映射即便芯片是RAM类型,也只能当FLash用,还贵。因此我探索了一番OCTO SPI 接口 驱动 四线SPI psRAM。 m/ s4 p9 H5 J! ~$ C' e9 @ # L4R5扩展板外扩串行SPI RAM ## L4R5 OSPI特点* }" L/ J$ ]; B6 _. {8 B9 { * 内存映射 * 可以直接读写(与操作内部RAM无异)! ~/ M3 v9 T, ]; w6 y! a+ z( v: O) q * 引脚少,本例6个脚 * 速度问题有待测试3 ~9 e( D' j: _ \ >>>) Q$ e/ k; J& P k. X8 h0 z 可用于LCD显示缓存,操作系统heap ## 软件环境 * STM32CubIDE 1.42 ^9 ~+ H% Y' C: E5 j * STM32CubeMX 6.0 9 {/ ], w% V" q$ { ## 硬件环境 * Nucleo L4R5 * 本人自制扩展板 带8MB psRAM4 X4 Z/ R0 G" n8 H6 D $ @, l, d$ Q5 }9 ?1 I ## 主程序代码 . Y+ p: C |& W$ ^$ Y# e psRAM_Reset(); if( psRAM_ReadID() != 0x0D ) { Error_Handler(); } psRAM_Read(r_buf, 0, 4);( }7 g6 v8 _9 g8 m2 Y/ F& J psRAM_Write( (uint8_t *)"ABCD", 0, 4); psRAM_Read(r_buf, 0, 4);% |- ^4 Q9 ~5 w6 y EnableMemMapped();/ A* a8 B5 \+ V: N$ G uint8_t *p = (uint8_t *)0x70000000; // memset(p, 0, 8*1024*1024);# s. P+ U; J- \* h, W% B, N for(uint32_t i=0; i<8*1024*1024;i++)9 a4 h! I3 |# x: h {2 U) X/ S" ]: a# h& F *p = (uint8_t)i; p++; } ## 结果 * 最后有一部分内存出现了问题,后续测试速度,稳定性 % d0 B- l+ _2 o |
OSPI 扩展一个psRAM,一个nor Flash,就有了8M外部RAM,32M外部Flash(W25Q128)。nuc L4R5 OSPI 速度上最快86MHZ. |
支持一下 |
厉害了厉害了 |
厉害了 |