请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 252|回复: 5
收起左侧

[有问必答] 关于V5-107e_FatFS文件系统例程(SPI串行Flash)中disk_write()的疑问

[复制链接]

1

主题

3

帖子

5

积分

新手上路

积分
5
发表于 2019-2-25 18:41:18 | 显示全部楼层 |阅读模式
本帖最后由 孤独的_sczu0 于 2019-2-26 12:04 编辑

当count > 1时,数据能正确的写进spi flash中吗?

当count > 1时,数据能正确的写进spi flash中吗?

当count > 1时,数据能正确的写进spi flash中吗?
回复

使用道具 举报

5667

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
45615
QQ
发表于 2019-2-26 00:11:32 | 显示全部楼层
是的,这个sf_WriteBuffer函数做的略复杂。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

1

主题

3

帖子

5

积分

新手上路

积分
5
 楼主| 发表于 2019-2-26 11:54:53 | 显示全部楼层
eric2013 发表于 2019-2-26 00:11
是的,这个sf_WriteBuffer函数做的略复杂。

调试发现disk_write()的count一直为1,没有出现大于1的情况
回复

使用道具 举报

5667

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
45615
QQ
发表于 2019-2-26 12:13:18 | 显示全部楼层
孤独的_sczu0 发表于 2019-2-26 11:54
调试发现disk_write()的count一直为1,没有出现大于1的情况

这个搞的扇区是4096字节,比较大,不是我们SD卡经常用的512字节。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

1

主题

3

帖子

5

积分

新手上路

积分
5
 楼主| 发表于 2019-2-26 14:27:40 | 显示全部楼层
eric2013 发表于 2019-2-26 12:13
这个搞的扇区是4096字节,比较大,不是我们SD卡经常用的512字节。

如果count是大于1的,应该改成图中的函数吧。还是说count=1是唯一值
spi flash1.jpg
回复

使用道具 举报

5667

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
45615
QQ
发表于 2019-2-26 14:30:50 | 显示全部楼层
孤独的_sczu0 发表于 2019-2-26 14:27
如果count是大于1的,应该改成图中的函数吧。还是说count=1是唯一值

终于明白你问的啥了,这里有现成的例子,参考即可

基于V5板子的SPI Flash文件系统+SPI Flash虚拟U盘例子下载(2015-11-03新升级)
http://forum.armfly.com/forum.ph ... id=14894&fromuid=58
(出处: 安富莱电子论坛)



多大的count都可以,直接调用函数即可sf_WriteBuffer((uint8_t *)buff, sector << 12, count<<12);

  1. /*-----------------------------------------------------------------------*/
  2. /* Write Sector(s)                                                       */
  3. /*-----------------------------------------------------------------------*/
  4. #if _USE_WRITE
  5. DRESULT disk_write (
  6.         BYTE pdrv,                        /* Physical drive nmuber (0..) */
  7.         const BYTE *buff,        /* Data to be written */
  8.         DWORD sector,                /* Sector address (LBA) */
  9.         BYTE count                        /* Number of sectors to write (1..128) */
  10. )
  11. {

  12.         switch (pdrv) {
  13.                
  14.                 case FS_SPI_FLASH :
  15.                         {
  16.                         #if 0
  17.                                 uint8_t i;
  18.                                 BYTE *p;
  19.                                 
  20.                                 p = (BYTE *)buff;
  21.                                 for(i = 0; i < count; i++)
  22.                                 {
  23.                                         sf_WriteBuffer((uint8_t *)p, (sector+i) << 12, 4096);
  24.                                         p += 4096;                                       
  25.                                 }
  26.                         #else
  27.                                 sf_WriteBuffer((uint8_t *)buff, sector << 12, count<<12);
  28.                         #endif
  29.                                 return RES_OK;
  30.                         }
  31.         
  32.         }
  33.         
  34.         return RES_PARERR;
  35. }
  36. #endif
复制代码



淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-5-21 07:44 , Processed in 0.181476 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表