底层接口

disk_status

disk_status用来查询当前存储设备的状态

  1. DSTATUS disk_status (
  2. BYTE pdrv /* [IN] Physical drive number */
  3. );

Parameter

pdrv
用户定义的物理驱动器号,单驱动器系统中,该参数一直为0.

Return Values

返回当前设备状态值,具体指在下面描述. FatFs 只使用STA_NOINITSTA_PROTECT.

STA_NOINIT

说明该设备还未初始化和准备好运行. 该标志在系统复位时被设置, 当媒体设备被移除或者调用disk_initialize函数失败的时候,该标志位被设置.当disk_initialize 函数被成功调用的时候该标志被清除. 当媒体变化或者发生异步访问的时候必须关注该值, 或者一些自动挂载方法得不到正确调用的时候也要关注该标志位. 如果系统不支持媒介变化检测, 应用程序在媒介变化的时候应该明确的再次调用f_mount 函数来重新挂载.

STA_NODISK
表示当前驱动器号下无设备. 该函数在驱动器准备好时被清除. FatFs不引用该标志.
STA_PROTECT
表明当前设备写保护状态. 当设备不包含写保护方法的时候,该标志被清除. 当驱动器号下无驱动器的时候,不支持该标志.

disk_initialize

该函数调用存储设备初始化方法.

  1. DSTATUS disk_initialize (
  2. BYTE pdrv /* [IN] Physical drive number */
  3. );

Parameter

pdrv

用户定义的物理驱动器号,单驱动器系统中,该参数一直为0.

Return Values

该方法返回初始化设备状态标志, 返回值与disk_status函数的返回值一致.

Description

该函数初始化存储设备使之可以支持一般的读写方法. 当该函数调用成功,STA_NOINIT标志将会清除.

Remarks: 该函数必须在Fatfs模块的控制下,应用程序不能调用该函数, 当需要重新初始化文件系统的时候,调用 f_mount即可.

disk_read

该方法在读写存储设备扇区的时候被调用.

  1. DRESULT disk_read (
  2. BYTE pdrv, /* [IN] Physical drive number */
  3. BYTE* buff, /* [OUT] Pointer to the read data buffer */
  4. DWORD sector, /* [IN] Start sector number */
  5. UINT count /* [IN] Number of sectros to read */
  6. );

Parameters


pdrv:
  用户定义的物理驱动器号,单驱动器系统中,该参数一直为0.
buff:
  指向要存储的读取数据数组的首地址.
sector:
  读取扇区的起始标号.
count:
  读取的扇区的数量.

Return Value

RES_OK (0)

调用成功.

RES_ERROR

在读取操作执行过程中,发生硬件错误并无法修复.

RES_PARERR

不支持的参数类型.

RES_NOTRDY

设备还未初始化.

Description

数据的读写操作是按照扇区进行的. Fatfs支持的扇区大小从512字节到4096字节. 当Fatfs被配置成指定扇区大小的时候(_MIN_SS == MAX_SS,大多数人的选择配置), 读写方法必须和选定的扇区大小配合. 单Fatfs配置成可变扇区大小的时候(_MIN_SS != MAX_SS), 文件系统将会使用 disk_ioctl 方法来获取扇区大小,该函数将会在disk_initialize执行完成之后调用.

buff的内存地址并不都是字对齐的,不对齐的情况发生在使用Direct Transfer的时候,当总线架构,尤其是DMA控制器不支持不对齐的内存访问的时候,需要在该方法内部解决不对齐的问题,建议的解决方案如下:.

  • 如果有必要,将地址转换为字对齐的地址.
  • 在调用f_read的时候,避开一次读取一个扇区的长读取. (有一些直接传输无法避开).
  • 当f_read(fp, data, btw, bw) 被调用的时候,请确保(((UINT)data & 3) == (f_tell(fp) & 3))表达式结果为真. -以保证字对齐.

通常不要将多个扇区读请求转换为单个扇区读模式,否则不能得到很好的数据吞吐量.

disk_write

该函数将会写入一个或者多个扇区数据到设备中.

  1. DRESULT disk_write (
  2. BYTE drv, /* [IN] Physical drive number */
  3. const BYTE* buff, /* [IN] Pointer to the data to be written */
  4. DWORD sector, /* [IN] Sector number to write from */
  5. UINT count /* [IN] Number of sectors to write */
  6. );

Parameters

pdrv

用户定义的物理驱动器号,单驱动器系统中,该参数一直为0.

buff

指向要写入的读取数据数组的首地址

sector
  写入扇区的起始标号
count
  写入扇区数量.

Return Values

RES_OK (0)
调用成功.
RES_ERROR
发生硬件错误且.
RES_WRPRT
设备写保护.
RES_PARERR
不支持的参数.
RES_NOTRDY
设备还未初始化.

Description

写入地址并非一直都是字对齐的,处理方法和read一样.

为了好的文件系统吞吐量,多扇区写入不要切换成单扇区写入.

Fatfs支持硬件层的延迟写入. 当写入数据存放在写入缓存中或者写入操作正在执行,写入过程不会立即执行.disk_ioctl  CTRL_SYNC 发出时,写入操作完整写入,因此,如果延迟写入被实现,硬盘的写入性能将会被优化..

应用不能直接调用该函数,否则,文件系统会崩溃.

QuickInfo

当 _FS_READONLY == 1 时,该函数不需要实现.

disk_ioctl

该函数操作一些特定的设备属性和一些除了读写之外的属性.

  1. DRESULT disk_ioctl (
  2. BYTE pdrv, /* [IN] Drive number */
  3. BYTE cmd, /* [IN] Control command code */
  4. void* buff /* [I/O] Parameter and data buffer */
  5. );

Parameters

pdrv
硬盘驱动号码.
cmd
控制代码.
buff
执行控制代码附带的缓冲区. 如果不需要参数,该函数可以忽略.

Return Value

RES_OK (0)
成功执行.
RES_ERROR
发生错误.
RES_PARERR
控制代码不被支持.
RES_NOTRDY
设备未初始化.

Description

Fatfs只支持以下五个独立属性.

Standard ioctl command used by FatFs
Command Description
CTRL_SYNC 保证文件系统已经结束挂起写入处理. 如果IO模块有写入缓存, 此时写入缓存必须立即写入.如果在disk_write写入操作中直接写入了,就不需要关注该指令.
GET_SECTOR_COUNT 将指定驱动器号的设备的扇区总数返回,返回缓冲区是DWORD类型. 该指令只会被 f_mkfs 和 f_fdisk 方法调用,去创建新的分区. 前提是 _USE_MKFS == 1 或者 _MULTI_PARTITION == 1.
GET_SECTOR_SIZE 返回word类型的扇区字节数量. 支持的返回值是512, 1024, 2048 和4096. 该指令只有在打开了可变扇区配置的时候才会被调用, _MAX_SS > _MIN_SS. 如果使用以下配置, _MAX_SS == _MIN_SS, 该指令不会被调用且只能在指定的扇区大小下工作.
GET_BLOCK_SIZE 返回flash类型的存储器中一个block中包含的扇区数量. 可选返回值1 到32768 . 当使用norflash或者位置block大小的时候,返回值为. ,该指令只有在 f_mkfs 被调用,或者系统尝试将数据区和擦除块对其的时候调用.需要_USE_MKFS == 1.
CTRL_TRIM 通知设备某个block的数据不在需要可以被删除调了. 扇区号码存储在 DWORD array {<start sector>, <end sector>} pointed by buff. 这是一个ATA设备支持的特定指令. 如果设备不是flash或者不支持该接口,该指令什么也不用做. Fatfa不会检查该指令的返回值,即使擦除失败. 该函数在f_mkfs方法中移除文件簇链的时候被调用,调用前提 _USE_TRIM == 1.

Fatfs不再使用其他扩展指令或者其他用户定义指令. 以下表格显示了一些非标准用户指令.

Example of optional ioctl command
Command Description
CTRL_FORMAT Create a physical format on the media. If buff is not null, it is pointer to the call-back function for progress notification.
CTRL_POWER_IDLE Put the device idle state. STA_NOINIT in the current status flags may not be set if the device goes active state by generic read/write function.
CTRL_POWER_OFF Put the device off state. Shut-down the power to the device and deinitialize the device interface if needed. STA_NOINIT in the current status flags must be set. The device goes active state bydisk_initialize function.
CTRL_LOCK Lock media eject mechanism.
CTRL_UNLOCK Unlock media eject mechanism.
CTRL_EJECT Eject media cartridge. STA_NOINIT and STA_NODISK in status flag are set after the function succeeded.
MMC_GET_TYPE Get card type. The type flags, bit0:MMCv3, bit1:SDv1, bit2:SDv2+ and bit3:LBA, is stored to a BYTE variable pointed by buff. (MMC/SDC specific command)
MMC_GET_CSD Get CSD register into a 16-byte buffer pointed by buff. (MMC/SDC specific command)
MMC_GET_CID Get CID register into a 16-byte buffer pointed by buff. (MMC/SDC specific command)
MMC_GET_OCR Get OCR register into a 4-byte buffer pointed by buff. (MMC/SDC specific command)
MMC_GET_SDSTAT Get SDSTATUS register into a 64-byte buffer pointed by buff. (SDC specific command)
ATA_GET_REV Get the revision string into a 16-byte buffer pointed by buff. (ATA/CFC specific command)
ATA_GET_MODEL Get the model string into a 40-byte buffer pointed by buff. (ATA/CFC specific command)
ATA_GET_SN Get the serial number string into a 20-byte buffer pointed by buff. (ATA/CFC specific command)
ISDIO_READ Read a block of iSDIO registers specified by command structure pointed by buff. (FlashAir specific command)
ISDIO_WRITE Write a block of data to iSDIO registers specified by command structure pointed by buff. (FlashAir specific command)
ISDIO_MRITE Change bits in an iSDIO register specified by command structure pointed by buff. (FlashAir specific command)

QuickInfo

当 _FS_READONLY == 1或者_MAX_SS == _MIN_SS的时候,该函数不被调用.

get_fattime

该函数获取当前时间.

DWORD get_fattime (void);

Return Value

在一个DWORD类型中返回当前时间. 位区间定义如下:

bit31:25
定义年增量,基础值1980 (0..127)
bit24:21
月份(1..12)
bit20:16
月日期(1..31)
bit15:11
消失(0..23)
bit10:5
分钟(0..59)
bit4:0
秒的一半/ 2 (0..29)

Description

即使系统没有实时时钟,该函数也应该返回一个固定的时间配置. 如果返回零,系统文件将没有时间戳.

QuickInfo

当 _FS_READONLY == 1 或者 _FS_NORTC == 1的时候,不需要该函数.

时间: 2024-08-06 17:07:39

底层接口的相关文章

h5调用底层接口知识总结

本文标签: h5调用底层接口 h5 h5调用本地摄像头 前端时间使用HTML5做了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了不少时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法简单介绍下,并讲解下使用的注意事项.放在服务器上然后浏览就可以了,只支持Chrome和Safari核的浏览器,QQ浏览器,Chrome,Safari浏览器都可以.在不同的手机和浏览器上面展现的方式不一样.这是html5官方文档地址,里面有关于h5或js

ccConfig(设置一些底层接口状态:是否支持动作叠加 设置fps更新间隔和位置 是否画边框等。。)

#ifndef __CCCONFIG_H__ #define __CCCONFIG_H__ #include "platform/CCPlatformConfig.h" /** @file cocos2d (cc) configuration file */ /** @def CC_ENABLE_STACKABLE_ACTIONS    //STACKABLE可叠起堆放的 If enabled, actions that alter(改变) the position property

《Android底层接口与驱动开发技术详解》digest

第一章:IDE:Eclipse ADT for java developer其它: Apache Ant Java SE Development Kit5或6 Linux和Mac上使用Apache Ant 1.65+,Windows上使用1.7+版本:(单独的JRE是不可以的,必须要有JDK),不兼容Gnu Java编译器(gcj) Java_Home x:\xx\xx\java\JDK1.6.0-17classpath:.;%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/

宁远电子瑞芯微RK3399开发板DLT3399A底层接口调用

 GPIO口控制 在DLT3399A板卡正面写有GPIO和UART4_1V8丝印的接口,并看到板子反面对应的引脚gpio丝印,选择相对应的gpio控制节点,接口位置如下图所示: 1.dlt3399a上有6个gpio控制节点(板卡正面GPIO丝印): 高电平为3.0V: "/dev/gpio4_c5" "/dev/gpio4_c6" "/dev/gpio4_d5" "/dev/gpio4_d6" 高电平为1.8V: "

h5调用底层接口的一些知识

本文作者祈澈姑娘,转载请标记转载出处,谢谢. 之前接触过这方面的知识,一直想写一些关于代码的文字,但考虑到浪费时间,又不具备大神的实力,也不想去把别人的代码照搬过来,所以一直都是空白着的,今天敲代码的时候,有了一个比较好的想法,第一,定位在学习这一块,去学习一些领域的新知识,并分享自己每天的学习成果,第二,总结工作中遇到的代码,解决的问题,拿出自己的demo截图,做出一些文字说明解释,相信通过这两个途径,能够让自己取得更大的发展空间. h5调用本地摄像头 前端时间使用HTML5做了一个WEB端A

从底层简析Python程序的执行过程

摘要:是否想在Python解释器的内部晃悠一圈?是不是想实现一个Python代码执行的追踪器?没有基础?不要怕,这篇文章让你初窥Python底层的奥妙. [编者按]下面博文将带你创建一个字节码级别的追踪API以追踪Python的一些内部机制,比如类似 YIELDVALUE.YIELDFROM操作码的实现,推式构造列表(List Comprehensions).生成器表达式(generator expressions)以及其他一些有趣Python的编译. 关于译者:赵斌, OneAPM工程师,常年

移动互联网(一)短信和彩信等接口开发封装

在这个项目中涉及到了短信和彩信等功能,这个算是一个项目重要组成部分,曾经想过这个功能怎么开发,例如在我们永和系统中有很多订单,可以给用户办理会员卡等业务如何让用户及时知道自己卡里的消费情况?如何让用户心中存在安全感,试想想在你的银行卡每次消费或者转入.转出每一笔款的时候都有短信提示,你是不是无意中增加了一份安全感呢? 大家在想想目前的各类门户网站,以及我们常用的CSDN等论坛都提供有短信登录.以及短信验证码.短信注册等等同短信沾边的业务内容,所有的这些都是一个思想提高系统灵活性.易用性.安全性,

从底层理解Python的执行

摘要:是否想在Python解释器的内部晃悠一圈?是不是想实现一个Python代码执行的追踪器?没有基础?不要怕,这篇文章让你初窥Python底层的奥妙. [编者按]下面博文将带你创建一个字节码级别的追踪API以追踪Python的一些内部机制,比如类似YIELDVALUE.YIELDFROM操作码的实现,推式构造列表(List Comprehensions).生成器表达式(generator expressions)以及其他一些有趣Python的编译. 关于译者:赵斌, OneAPM工程师,常年使

设计模式【7】:桥接模式【接口适配】

1,定义 Gof23设计模式中是这样定义桥接设计模式:桥接模式的目的是把抽象层次结构从其实现中分离出来,使其能够独立变更.抽象层定义了供客户端使用的上层的抽象接口.实现层次结构定义了供抽象层次使用的底层接口.实现类的引用被封装于抽象类的实例中时,桥接就形成了. 我们用一个游戏的例子去理解这个桥接模式,比如,我们假如魂斗罗一代,魂斗罗二代界面没多大变化,可以共用一套底层接口. 上面这个图:左侧部分Abstraction是抽象类,右侧部分是实现类. 按照定义,实现类应该是实现具体的底层接口,我们都知