|
之前已经有L476 F7 QSPI扩展RAM,内存映射后只读不能写,当然有他的用处,不过不能写就很麻烦了,程序是动态的,数据会变化,不能写的内存映射即便芯片是RAM类型,也只能当FLash用,还贵。因此我探索了一番OCTO SPI 接口 驱动 四线SPI psRAM。 : E8 O1 b2 f, F) B8 G # L4R5扩展板外扩串行SPI RAM ## L4R5 OSPI特点 * 内存映射 * t$ \# i) @) t * 可以直接读写(与操作内部RAM无异) * 引脚少,本例6个脚7 {6 f; ^+ r5 \/ D* J& m f * 速度问题有待测试& z, X q8 z" }. f4 }& `* s >>>( X& [( U% W0 \4 v9 m# L 可用于LCD显示缓存,操作系统heap: K$ E4 u( {7 X3 Q+ e6 T, s ## 软件环境1 d( v: I$ _: L: W; S( ~0 L * STM32CubIDE 1.4 * STM32CubeMX 6.0 6 @- ~3 y: v( ~( m+ O: z ## 硬件环境, {+ E" x1 R6 y1 S8 S' N * Nucleo L4R5 * 本人自制扩展板 带8MB psRAM
## 主程序代码. G) ~* h$ M) b- ~ 2 T2 F t& ?2 k" I psRAM_Reset(); if( psRAM_ReadID() != 0x0D ) {' j& C J* n( V1 M% x) x; e o Error_Handler(); } psRAM_Read(r_buf, 0, 4);! T5 Z5 {9 h* C9 V/ v psRAM_Write( (uint8_t *)"ABCD", 0, 4); psRAM_Read(r_buf, 0, 4);9 m, q" y& L" w- N9 A! K! q# x4 ] EnableMemMapped();" Z+ t) a- g( f" j7 `. l8 z uint8_t *p = (uint8_t *)0x70000000;/ f/ `8 _# e1 f% c) j1 k6 E' s6 y // memset(p, 0, 8*1024*1024);9 ~! j8 {4 ^5 V; d for(uint32_t i=0; i<8*1024*1024;i++) { *p = (uint8_t)i;& m+ o$ a9 c, W" e- q, \$ N p++; }6 G; H6 Y5 P6 K ## 结果4 x2 a$ K: F! K' Y
( @; I, O8 ], N+ ]5 L0 I * 最后有一部分内存出现了问题,后续测试速度,稳定性 * a' U. f9 L0 W& e |
| OSPI 扩展一个psRAM,一个nor Flash,就有了8M外部RAM,32M外部Flash(W25Q128)。nuc L4R5 OSPI 速度上最快86MHZ. |
| 支持一下 |
|
厉害了厉害了: X/ K, q: r- r; { |
| 厉害了 |
微信公众号
手机版