广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 ZLG/CF躯动中间件简要说明 CF卡可以工作在 PC Card ATA 1/O模式(lO口模式)、 PC Card ATA Memory模式 ( MEMORY模式)、 True IDe模式。CF卡在 True Ide模式下工作时兼容IDE硬盘,并且需 用的IO引脚较少,因此推荐使用CF卡的 True IDE模式。 ZLG/CF驱动中间件是基于CF 卡 True IDE模式的驱动,同时兼容DE硬盘。 1概述 1.1ZLG/CF简介 ZLG/CF是广州周立功单片机发展有限公司开发的面向嵌入式系统开发中间件,是ZLG 系列中间件的重要成员之一。该驱动可以实现对CF卡及IDE硬盘等大容量ATA设备存贮 等基本操作。其通过μCOS-Ⅱ实时操作系统的信号机制来实现一个多任务并行,完全使用 ANSC进行编写,可以象μCOS-Ⅱ那样支持多种CPU。 12ZLG/P的特点 该驱动通过简单的配置可以分别使用于单任务平台或基于μC/OS实时多任务操作系 统平台;全部代码由 ANSI C编写,并且与目标处理器的存储器结构无关(即与无论存储器 是大端结构还是小端结构均不影响程序的执行),方便用户移植到自己的目标系统中 ZLG/CF为嵌入系统设计,如果您有固化手段,它可以嵌入到您的产品中成为产品的一部分 2ZLG/cF驱动的结构视图 CF卡驱动的结构如图1所示 应用层 (文件管理系统) TA设备初始化 ATA指令执行 ATA设备 硬件复位 读写ATA设备 寄存器 系统硬件GPI0 图1CF卡驱动结构图 2.1系统硬件GPIO 使用系统的IO引脚模拟CF卡接口及IDE硬盘接口。为读写ATA设备寄存器、ATA 设备硬件复位及ATA设备探测提供硬件接口
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 ZLG/CF 驱动中间件简要说明 CF 卡可以工作在 PC Card ATA I/O 模式(I/O 口模式)、PC Card ATA Memory 模式 (MEMORY 模式)、True IDE 模式。CF 卡在 True IDE 模式下工作时兼容 IDE 硬盘,并且需 用的 I/O 引脚较少,因此推荐使用 CF 卡的 True IDE 模式。ZLG/CF 驱动中间件是基于 CF 卡 True IDE 模式的驱动,同时兼容 IDE 硬盘。 1 概述 1.1 ZLG/CF 简介 ZLG/CF 是广州周立功单片机发展有限公司开发的面向嵌入式系统开发中间件,是 ZLG 系列中间件的重要成员之一。该驱动可以实现对 CF 卡及 IDE 硬盘等大容量 ATA 设备存贮 等基本操作。其通过µC/OS-II 实时操作系统的信号机制来实现一个多任务并行,完全使用 ANSI C 进行编写,可以象µC/OS-II 那样支持多种 CPU。 1.2 ZLG/IP 的特点 该驱动通过简单的配置可以分别使用于单任务平台或基于µC/OS-II 实时多任务操作系 统平台;全部代码由 ANSI C 编写,并且与目标处理器的存储器结构无关(即与无论存储器 是大端结构还是小端结构均不影响程序的执行),方便用户移植到自己的目标系统中; ZLG/CF 为嵌入系统设计,如果您有固化手段,它可以嵌入到您的产品中成为产品的一部分。 2 ZLG/CF 驱动的结构视图 CF 卡驱动的结构如图 1 所示。 系统硬件 GPIO ATA设备 硬件复位 ATA设备 探测 ATA设备初始化 ATA指令执行 应用层 (文件管理系统) 读写ATA设备 寄存器 操作ATA设备的API 函数 图 1 CF 卡驱动结构图 2.1 系统硬件 GPIO 使用系统的 I/O 引脚模拟 CF 卡接口及 IDE 硬盘接口。为读写 ATA 设备寄存器、ATA 设备硬件复位及 ATA 设备探测提供硬件接口。 - 1 -
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 22读写ATA设备寄存器 控制硬件系统的IO引脚,产生访问CF卡等ATA设备寄存器的读写时序,实现对ATA 设备寄存器的访问,为ATA指令执行提供接口函数。 23ATA设备硬件复位 使用系统硬件层提供的硬件接口,控制CF卡等ATA设备进行硬件复位,为ATA设备 初始化提供接口函数。 24ATA设备探测 使用系统硬件层提供的硬件接口,探测CF卡等ATA设备是否存在、插入和移出。使 系统支持CF卡等ATA设备的热插拔。 2.5ATA设备初始化 系统起动时或探测到有CF卡等ATA设备插入时,需要使ATA设备复位,并初始化设 备信息。初始化设备信息是通过执行设备识别指令获得。 26ATA指令执行 调用ATA设备寄存器的读写函数,操作CF卡的ATA指令集实现对CF卡等ATA设备 操作。ATA指令执行为操作ATA设备的API函数层提供函数接口。 2.7操作ATA设备的API函数 使用执行ATA指令函数,为应用层提供操作CF卡等ATA设备提供接口函数。使应用 层操作ATA设备而不需要了解ATIA的协议规范 2.8应用层(文件管理系统) 调用 ZLG/CF驱动提供的AP函数,结合ZLG/FS等文件管理系统对CF卡等大容量ATA 设备进行数据管理。 3中间件配置选项 基于u0/0S-1操作系统 本驱动可用于单任务系统(不基于操作系统)和uC/0S-II多任务操作系统,可通过 UCOSII”宏定义参数来选择。如果基于uC/0S-II多任务操作系统,则需在“ config.h”配 置文件中定义“ UCOSII”宏,如程序清单1中的(2)所示。 程序清单1驱动配置 CF卡IDE的配置 #include "ide. h" (1) UCOSII #define ATA BUS AT &bit 头文件 使用本驱动前,需在配置文件中包含头文件“IDE.H”如程序清单1中的(1)所示。 使用一个信号量 本驱动需要使用一个信号量事件,在配置uC/0s-II中的0 S MAX EVENTS参数时需注意。 ●总线设置 CF卡默认支持16位总线,但也可以设置为8位。如果使用的是8位总线,需要对宏 “ ATA BUS AT8bit”进行定义,如程序清单1中的(3)
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 2.2 读写 ATA 设备寄存器 控制硬件系统的 I/O 引脚,产生访问 CF 卡等 ATA 设备寄存器的读写时序,实现对 ATA 设备寄存器的访问,为 ATA 指令执行提供接口函数。 2.3 ATA 设备硬件复位 使用系统硬件层提供的硬件接口,控制 CF 卡等 ATA 设备进行硬件复位,为 ATA 设备 初始化提供接口函数。 2.4 ATA 设备探测 使用系统硬件层提供的硬件接口,探测 CF 卡等 ATA 设备是否存在、插入和移出。使 系统支持 CF 卡等 ATA 设备的热插拔。 2.5 ATA 设备初始化 系统起动时或探测到有 CF 卡等 ATA 设备插入时,需要使 ATA 设备复位,并初始化设 备信息。初始化设备信息是通过执行设备识别指令获得。 2.6 ATA 指令执行 调用 ATA 设备寄存器的读写函数,操作 CF 卡的 ATA 指令集实现对 CF 卡等 ATA 设备 操作。ATA 指令执行为操作 ATA 设备的 API 函数层提供函数接口。 2.7 操作 ATA 设备的 API 函数 使用执行 ATA 指令函数,为应用层提供操作 CF 卡等 ATA 设备提供接口函数。使应用 层操作 ATA 设备而不需要了解 ATA 的协议规范。 2.8 应用层(文件管理系统) 调用 ZLG/CF 驱动提供的 API 函数,结合 ZLG/FS 等文件管理系统对 CF 卡等大容量 ATA 设备进行数据管理。 3 中间件配置选项 基于 uC/OS-II 操作系统 本驱动可用于单任务系统(不基于操作系统)和 uC/OS-II 多任务操作系统,可通过 “UCOSII”宏定义参数来选择。如果基于 uC/OS-II 多任务操作系统,则需在“config.h” 配 置文件中定义 “UCOSII” 宏,如程序清单 1 中的(2)所示。 程序清单 1 驱动配置 /* CF 卡 IDE 的配置 */ #include "ide.h" (1) #define UCOSII (2) #define ATA_BUS_AT_8bit (3) z 头文件 使用本驱动前,需在配置文件中包含头文件“IDE.H”如程序清单 1 中的(1)所示。 z 使用一个信号量 本驱动需要使用一个信号量事件,在配置 uC/OS-II 中的 OS_MAX_EVENTS 参数时需注意。 z 总线设置 CF 卡默认支持 16 位总线,但也可以设置为 8 位。如果使用的是 8 位总线,需要对宏 “ATA_BUS_AT_8bit”进行定义,如程序清单 1 中的(3)。 - 2 -
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 4函数手册 41硬件接口函数 硬件接口函数是与系统硬件相关的函数集,这部分函数为用户系统硬件与本驱动的接口 函数。用户需针对自己的硬件系统来编写这部分函数。 表1和表2描述了硬件系统需要提供给本驱动使用的接口函数。 表1 SYs IdeHard Reset函数 函数名称 SYS IdeHard Reset 所属文件 SysATA. C 函数原型 uint8 SYs IdeHardReset(void) 功能描述ATA设备硬件复位 编译开关无 函数参数 调用模块 Sys WaitInUSO延时微秒级函数 特殊说明使复位引脚 IDE RST有效低电平)保持大于25微秒, IDE RST无效高电平)后至 和注意要点少延迟2毫秒才可以对ATA设备读写寄存器操作 范例 void SYS IdehardReset(vod)基于 ARM LPC2210,GPO引脚 IDE RST* IOCLR= IDE RST /*复位引脚置低* /延时大于25微秒· IOSET= IDE RST /*复位引脚置高* SYS WaitInUS(5000) /*延时大于2毫秒 表2ATA设备寄存器操作函数列表 输入数据类型 返回数据类型 unsigned char/ unsigned short读数据寄存器 SetData(x) unsigned char/unsigned short T 写数据寄存器 ensign 读错误寄存器 unsigned cha GetsECCNTO unsigned char 读扇区计数寄存器 SetsECCNT(x) unsigned char 无 写扇区计数寄存器 GetSectorO unsigned char 读扇区寄存器 unsigned char 无 写扇区寄存器 GetCylinderlowo unsigned char 读柱面低8位寄存器 Set CylinderLow(x) unsigned char 写柱面低8位寄存器 GetCylinderHigh0|无 unsigned char 读柱面高8位寄存器 SetCylinderHigh(x) unsigned char 无 写柱面高8位寄存器 unsigned char 读设备磁头寄存器 SetDeviceHead(x) unsigned char 设备磁头寄存器 etstatusO unsigned char 读状态寄存器 SetCommand(x) unsigned char 写命令寄存器 GetAStatuso ensign 读辅助状态寄存器
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 4 函数手册 4.1 硬件接口函数 硬件接口函数是与系统硬件相关的函数集,这部分函数为用户系统硬件与本驱动的接口 函数。用户需针对自己的硬件系统来编写这部分函数。 表 1 和表 2 描述了硬件系统需要提供给本驱动使用的接口函数。 表 1 SYS_IdeHardReset 函数 函数名称 SYS_IdeHardReset 所属文件 SysATA.C 函数原型 uint8 SYS_IdeHardReset (void) 功能描述 ATA 设备硬件复位 编译开关 无 函数参数 无 函数返回值 无 调用模块 Sys_WaitInUS() 延时微秒级函数 特殊说明 和注意要点 使复位引脚 IDE_RST 有效(低电平)保持大于 25 微秒,IDE_RST 无效(高电平)后至 少延迟 2 毫秒才可以对 ATA 设备读写寄存器操作。 范 例 void SYS_IdeHardReset(void) /*基于 ARM LPC2210,GPIO 引脚 IDE_RST*/ { IOCLR = IDE_RST; /* 复位引脚置低 */ SYS_WaitInUS(30); /* 延时大于 25 微秒 */ IOSET = IDE_RST; /* 复位引脚置高 */ SYS_WaitInUS(5000); /* 延时大于 2 毫秒 */ } 表 2 ATA 设备寄存器操作函数列表 函数 输入数据类型 返回数据类型 描述 GetData() 无 unsigned char / unsigned short 读数据寄存器 SetData(x) unsigned char / unsigned short 无 写数据寄存器 GetERR() 无 unsigned char 读错误寄存器 SetFeature(x) unsigned char 无 写特征寄存器 GetSECCNT() 无 unsigned char 读扇区计数寄存器 SetSECCNT(x) unsigned char 无 写扇区计数寄存器 GetSector() 无 unsigned char 读扇区寄存器 SetSector(x) unsigned char 无 写扇区寄存器 GetCylinderLow() 无 unsigned char 读柱面低8位寄存器 SetCylinderLow(x) unsigned char 无 写柱面低8位寄存器 GetCylinderHigh() 无 unsigned char 读柱面高8位寄存器 SetCylinderHigh(x) unsigned char 无 写柱面高8位寄存器 GetDeviceHead() 无 unsigned char 读设备磁头寄存器 SetDeviceHead(x) unsigned char 无 写设备磁头寄存器 GetStatus() 无 unsigned char 读状态寄存器 SetCommand(x) unsigned char 无 写命令寄存器 GetAStatus() 无 unsigned char 读辅助状态寄存器 - 3 -
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 SetControl(x) unsigned char 写控制寄存器 表3ATA设备探测函数 函数名称 SYS HaveCard 所属文件 SysATA.C 函数原型 uint8SYS Have Card( void) 功能描述探测CF存储卡的插入及移出 编译开关无 函数参数 函数返回值TRUE:ATA设备存在 FALSE:ATA设备已移出或不存在 调用模块无 特殊说明 该函数是必须的,即使硬件系统中没有设计对ATA设备探测,也应使该函数一直 和注意要点返回TRUE。 范例 uint& SYS Have Card( void #define DEVICE IS ATTACHed 0 硬件系统不探测设备是否存在* 棒假设使用LPC2210的P123(有10K的电上电阻)引脚的GPIO输入方式检测设 备是否存在,可以如下操作 // #define DEVICE IS ATTACHED (IOIPIN &(1<<23)) /如果 DEVICE IS ATTACHED为0却有设备存在,为1即没有* f(DE VICE IS ATTACHED) return FALSE. 没有设备存在,返回 FALSE eturn TRUE 有设备存在,返回TRUE* 42用户使用函数 使用 ZLG/CF驱动程序,系统可以通过以下函数对CF卡等ATA设备进行基本操作。 表4ATA|N函数 函数名称 ATA INI 所属文件IDEC 函数原型 oid ATA INI(void) 功能描述ATA设备驱动初始化,应用于uCOSⅡ操作系统,在该函数中创建信号量 CFIDESen。 编译开关无 函数参数 函数返回值无 调用模块 OSSemCreateO 特殊说明在 u COSII操作系统中,对ATA设备进行操作前,必须先执行该函数。 和注意要点 范例 maino ATA INI(void ATA FindIDEDeviceo:
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 SetControl(x) unsigned char 无 写控制寄存器 表 3 ATA 设备探测函数 函数名称 SYS_HaveCard 所属文件 SysATA.C 函数原型 uint8 SYS_HaveCard(void) 功能描述 探测 CF 存储卡的插入及移出 编译开关 无 函数参数 无 函数返回值 TRUE:ATA 设备存在 FALSE:ATA 设备已移出或不存在 调用模块 无 特殊说明 和注意要点 该函数是必须的,即使硬件系统中没有设计对 ATA 设备探测,也应使该函数一直 返回 TRUE。 范 例 uint8 SYS_HaveCard(void) { #define DEVICE_IS_ATTACHED 0 /*硬件系统不探测设备是否存在*/ /*假设使用 LPC2210 的 P1.23(有 10K 的电上电阻)引脚的 GPIO 输入方式检测设 备是否存在,可以如下操作*/ //#define DEVICE_IS_ATTACHED (IO1PIN & (1<<23)) /*如果 DEVICE_IS_ATTACHED 为 0 却有设备存在,为 1 即没有*/ if(DEVICE_IS_ATTACHED) return FALSE; /*没有设备存在,返回 FALSE*/ else return TRUE; /*有设备存在,返回 TRUE*/ } 4.2 用户使用函数 使用 ZLG/CF 驱动程序,系统可以通过以下函数对 CF 卡等 ATA 设备进行基本操作。 表 4 ATA_INI 函数 函数名称 ATA_INI 所属文件 IDE.C 函数原型 void ATA_INI(void) 功能描述 ATA 设备驱动初始化,应用于 uCOSII 操作系统,在该函数中创建信号量 CFIDESem。 编译开关 无 函数参数 无 函数返回值 无 调用模块 OSSemCreate() 特殊说明 和注意要点 在 uCOSII 操作系统中,对 ATA 设备进行操作前,必须先执行该函数。 范 例 main() { …. ATA_INI(void); ATA_FindIDEDevice(); …. } - 4 -
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 表5 ATA FindIDEDevice函数 函数名称 AtA FindIDEDevic 所属文件|DEC 函数原型 uint& ATA FindIdEDevice( void) 功能描述对ATA接口设备进行进硬件复位,查找ATA接口上的设备 编译开 函数参数无 函数返回值无 调用模块 SYS IdehardReset OATA设备硬件复位 SetDeviceHeado写设备磁头寄存器 GetDeviceHeado读设备磁头寄存器 ATA Set Feature(功能设置函数 ATA IssuelDEldentify oata设备识别 特殊说明 发现在新的设接入ATA接口时,调用该函数查找设备。 和注意要点 范例见表4范仅 表6 ATA ReadSector函数 函数名称 Ata Readsectol 所属文件IDEC uint8 ATA ReadSector(uint8 Device, uint16*Buffer, uint32 Sector, uint8 count) 功能描述从硬盘读取一或多个扇区,放入到形参指定的内存中 编译开关无 函数参数 Buffer,读出数据存放缓冲区地址 Sector,读扇区号 Count,连续读出的扇区数 函数返回值TRUE:成功 SE:失败 调用模块 SSemPendo,等待信号量 ATA SelectDevice O,选择设备 ATA WaitOn Busy NDrqo等待数据请求 ATA ReadData512BO读512字节数据 ATA WaitOn Busy NDrdy o,等待数据空闲 OSSemPosto,发送信号量 特殊说明每读出一个扇区值为52节字,读出的扇区数为1~256个,扇区数为0即为256 和注意要点个扇区 范例〃在从设备0号扇区开始连续读出2个扇区的数据 if(ATA ReadSector(Oxo1, Buffer, 0x00, 0x0 /*错误处理程序 表7 ATA Write Sector函数 函数名称 ATA Write Sector 所属文件IDEC 函数原型 nts ATA_WriteSector(uints Device uint Buffer, uin 2 Sector, uint8 count) 1 功能描述向CF卡或硬盘写入一或多个扇区数据 编译开关 函数参数 Device选择操作的设备,0为主设备,1为从设备
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 表 5 ATA_FindIDEDevice 函数 函数名称 ATA_FindIDEDevice 所属文件 IDE.C 函数原型 uint8 ATA_FindIDEDevice(void) 功能描述 对 ATA 接口设备进行进硬件复位,查找 ATA 接口上的设备。 编译开关 无 函数参数 无 函数返回值 无 调用模块 SYS_IdeHardReset () ATA 设备硬件复位 SetDeviceHead() 写设备磁头寄存器 GetDeviceHead() 读设备磁头寄存器 ATA_SetFeature () 功能设置函数 ATA_IssueIDEIdentify () ATA 设备识别 特殊说明 和注意要点 发现在新的设接入 ATA 接口时,调用该函数查找设备。 范 例 见表 4 范例。 表 6 ATA_ReadSector 函数 函数名称 ATA_ReadSector 所属文件 IDE.C 函数原型 uint8 ATA_ReadSector(uint8 Device,uint16 *Buffer,uint32 Sector,uint8 count) 功能描述 从硬盘读取一或多个扇区,放入到形参指定的内存中 编译开关 无 函数参数 Buffer,读出数据存放缓冲区地址 Sector,读扇区号 Count,连续读出的扇区数 函数返回值 TRUE:成功 FALSE:失败 调用模块 OSSemPend(),等待信号量 ATA_SelectDevice (),选择设备 ATA_WaitOnBusyNDrq(),等待数据请求 ATA_ReadData512B(),读 512 字节数据 ATA_WaitOnBusyNDrdy (),等待数据空闲 OSSemPost(),发送信号量 特殊说明 和注意要点 每读出一个扇区值为 512 节字,读出的扇区数为 1~256 个,扇区数为 0 即为 256 个扇区。 范 例 // 在从设备 0 号扇区开始连续读出 2 个扇区的数据。 if(ATA_ReadSector(0x01,Buffer,0x00,0x02)==0) { /* 错误处理程序 */ } 表 7 ATA_WriteSector 函数 函数名称 ATA_WriteSector 所属文件 IDE.C 函数原型 uint8 ATA_WriteSector(uint8 Device,uint16 * Buffer, uint32 Sector ,uint8 count) 功能描述 向 CF 卡或硬盘写入一或多个扇区数据 编译开关 无 函数参数 Device,选择操作的设备,0 为主设备,1 为从设备 - 5 -
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 Buer,需写数的缓冲区地址 Sector,写入的扇区号 count,写入的扇区数 函数返回值TRUE:成功 FALSE:失败 调用模块 OSSemPend(等待信号量 ATA SelectDevice O,选择设备 ATA WaitOn Busy NDrqo,等待数据请求 ATA WriteData512BO写512字节数据 ATA WaitOn Busy NDrdy o,等待数据空闲 OSSemPosto,发送信号量 特殊说明每写入一个扇区值为512节字,写入的扇区数为1-256个,扇区数为0即为256 和注意要点个扇 范例∥从主设备0号扇区开始连续写入2个刷区的数据。 if(ATA Write Sector(0, Buffer, 0x00, 0x02F0) *错误处理程序 表8 ATA Identify Drive0函数 函数名称 ATA Identify Drive 所属文件IDEC 函数原型 uint& ATA Identify Drive(uint& Device, void"PTR) 功能描述获取ATA设备描述信息 编译开关无 函数参数 Device,选择操作的设备,0为主设备,1为从设备 PTR保存设备信息的缓冲区首址,。 函数返回值RUE:成功 FALSE:失败 调用模块 SSemPendo,等待信号量 ATA SelectDevice O,选择设备 ATA WaitOn Busy NDrqo等待数据请求 TA DriveAllInfo(,读取设备信息到缓冲区 ATA WaitOn Busy NDrdy o等待数据空闲 OSSemPosto,发送信号量 特殊说明PTR指向的缓冲区大于512节字 和注意要点 范例 if(ATA Identify Drive(Select Device, buffers)) # define driveinfo( PCF IDENTIFY DATA)buffer8)*宏定义结构指针*/ Send("型 f("柱面数:") SendhEXtoASC16(DRIVEINFO->NumberofCylinders) newline(∥换行 printf("每柱面磁头数:") SendheXtoASC16(DRIVEINFO->NumberOfHead newline(O)∥换行 printf("每磁道扇区数:") SendheXto ASC16(DRIVEINFO->Sectors Per Track) eO,∥换行 else{/出错处理*/}
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 Buffer,需写数的缓冲区地址 Sector,写入的扇区号 count, 写入的扇区数 函数返回值 TRUE:成功 FALSE:失败 调用模块 OSSemPend(),等待信号量 ATA_SelectDevice (),选择设备 ATA_WaitOnBusyNDrq(),等待数据请求 ATA_WriteData512B(),写 512 字节数据 ATA_WaitOnBusyNDrdy (),等待数据空闲 OSSemPost(),发送信号量 特殊说明 和注意要点 每写入一个扇区值为 512 节字,写入的扇区数为 1~256 个,扇区数为 0 即为 256 个扇区。 范 例 // 从主设备 0 号扇区开始连续写入 2 个扇区的数据。 if(ATA_WriteSector(0,Buffer,0x00,0x02)==0) { /* 错误处理程序 */ } 表 8 ATA_IdentifyDrive()函数 函数名称 ATA_IdentifyDrive 所属文件 IDE.C 函数原型 uint8 ATA_IdentifyDrive(uint8 Device,void *PTR) 功能描述 获取 ATA 设备描述信息。 编译开关 无 函数参数 Device,选择操作的设备,0 为主设备,1 为从设备 PTR,保存设备信息的缓冲区首址,。 函数返回值 TRUE:成功 FALSE:失败 调用模块 OSSemPend(),等待信号量 ATA_SelectDevice (),选择设备 ATA_WaitOnBusyNDrq(),等待数据请求 ATA_DriveAllInfo (),读取设备信息到缓冲区 ATA_WaitOnBusyNDrdy (),等待数据空闲 OSSemPost(),发送信号量 特殊说明 和注意要点 PTR 指向的缓冲区大于 512 节字。 范 例 if(ATA_IdentifyDrive(SelectDevice,buffer8)) { #define DRIVEINFO ((PCF_IDENTIFY_DATA)buffer8) /*宏定义结构指针*/ Send("型 号:"); for(i=0;iNumberOfCylinders); newline();// 换行 printf ("每柱面磁头数:"); SendHEXtoASC16(DRIVEINFO->NumberOfHeads); newline();// 换行 printf ("每磁道扇区数:"); SendHEXtoASC16(DRIVEINFO->SectorsPerTrack); newline();// 换行 } else { /*出错处理*/ } - 6 -
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 表9 ATA Standbylmmediate函数 函数名称 ATA Standbylmmediate 所属文件|DEC 函数原型uint8 ATA Standby Immediate(uint8 Device) 功能描述使ATA设备立即进入特机状态 编译开 函数参数 Device,选择操作的设备,0为主设备,1为从设备 函数返回值 E:成功 FALSE:失败 OSSemPendo,等待信号量 ATA SelectDevice(,选择设备 ATA_ Waiton BusyNDrdy o,等待数据空闲 OSSemPosto发送信号量 特殊说明如果该设备不支持电源管理特性设置,执行该指令将发生指令中止出错 和注意要点 范例 if(ATA Standby Immediate(SelectDevice)) printf("进入待机,硬盘停止转动。Ⅶn") ntf("设备不支持电源管理特性,或设备不可用。Ⅶn") 表10 ATA Idlelmmediate0函数 ata Idlelmmediate 所属文件IDEC uint8ATA Idlelmmediate(uint8 Device) 使ATA设备立即返回空闲状态 编译开关 函数参数Deke选择操作的设备,0为主设备,1为从设备 函数返回值TRUE:成功 FALSE:失败 调用模块 OSSemPendo,等待信号量 ATA SelectDevice,选择设备 ATA WaitOn Busy NDrdy o,等待数据空闲 OSSemPosto,发送信号量 特殊说明如果该设备不支持电源管理特性设置,执行该指令将发生指令中止出错。 和注意要点 范例 if(ATA Idlelmmediate(SelectDevice) Send"设备返回空闲,硬盘开始转动。n"), Send"设备不支持电源管理特性,或设备不可用。mn")
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 表 9 ATA_StandbyImmediate 函数 函数名称 ATA_StandbyImmediate 所属文件 IDE.C 函数原型 uint8 ATA_StandbyImmediate(uint8 Device) 功能描述 使 ATA 设备立即进入特机状态。 编译开关 无 函数参数 Device,选择操作的设备,0 为主设备,1 为从设备 函数返回值 TRUE:成功 FALSE:失败 调用模块 OSSemPend(),等待信号量 ATA_SelectDevice (),选择设备 ATA_WaitOnBusyNDrdy (),等待数据空闲 OSSemPost(),发送信号量 特殊说明 和注意要点 如果该设备不支持电源管理特性设置,执行该指令将发生指令中止出错。 范 例 if(ATA_StandbyImmediate(SelectDevice)) printf("进入待机,硬盘停止转动。\n"); else printf ("设备不支持电源管理特性,或设备不可用。\n"); 表 10 ATA_IdleImmediate()函数 函数名称 ATA_ IdleImmediate 所属文件 IDE.C 函数原型 uint8 ATA_ IdleImmediate (uint8 Device) 功能描述 使 ATA 设备立即返回空闲状态。 编译开关 无 函数参数 Device,选择操作的设备,0 为主设备,1 为从设备 函数返回值 TRUE:成功 FALSE:失败 调用模块 OSSemPend(),等待信号量 ATA_SelectDevice (),选择设备 ATA_WaitOnBusyNDrdy (),等待数据空闲 OSSemPost(),发送信号量 特殊说明 和注意要点 如果该设备不支持电源管理特性设置,执行该指令将发生指令中止出错。 范 例 if(ATA_ IdleImmediate (SelectDevice)) Send("设备返回空闲,硬盘开始转动。\n"); else Send("设备不支持电源管理特性,或设备不可用。\n"); - 7 -