【求助】关于STM32使用SPI的DMA方式读写外部flash的几个问题

2019-12-08 14:42发布

环境:HAL库 + USB + Fatfs
硬件:stm32f103c8t6 + MX25L64

问题:
1、因为FLASH一个扇区为4096,但每次写入只能一页256byte,能否使用DMA循环模式写入整个扇区数?
其中:uint8_t buffer[4096];

2、在Fatfs中,f_write一次只能写入512字节,超出会卡死。
我已设置了
cubemx中:
无标题.png (20.31 KB, 下载次数: 0) 下载附件 2019-11-28 17:39 上传
SECTOR_SIZE 为 4096
#define _MIN_SS    512  /* 512, 1024, 2048 or 4096 */
#define _MAX_SS    4096  /* 512, 1024, 2048 or 4096 */
还要设置哪些地方?

3、usb与fatfs驱动中,我增加了红 {MOD}语句,网上例程很多是没有的,理论上单扇区操作是没问题的,但多个扇区操作buf地址应该要发生改变,是否正确。
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  /* USER CODE BEGIN 7 */
  uint16_t i;
  for (i=0;i<blk_len;i++)
  {
    ExtFlash_SectorWR(buf, blk_addr * SECTOR_SIZE, SECTOR_SIZE);
    blk_addr++;
    buf += SECTOR_SIZE;
  }
  return (USBD_OK);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
tomzbj
1楼-- · 2019-12-08 21:26
两个SS我都用4096, 以及write_fs这里没有先擦除? 你的extflash_sectorwr函数里包括擦除么?
网络孤客
2楼-- · 2019-12-09 02:12
 精彩回答 2  元偷偷看……
网络孤客
3楼-- · 2019-12-09 05:40
tomzbj 发表于 2019-12-2 23:18
两个SS我都用4096, 以及write_fs这里没有先擦除? 你的extflash_sectorwr函数里包括擦除么? ...

这个原因找到了。
是我的CSTACK设小了,导致数组不支持1024及以上。

后面测试以下参数不影响结果。
#define _MIN_SS    512  /* 512, 1024, 2048 or 4096 */
USBD_MAX_STR_DESC_SIZ   512

一周热门 更多>