📄 com-to-usb.c
字号:
/*1U盘读写模块
软件系统名称和标识符:
模块名称和标识符:U盘读写模块
程序编制员签名
原设计人员:
编文本者:
卷宗序号:
编排日期:2006-03-14
卷宗的修改文本序号:
修改完成日期: 2006-03-16
2模块开发情况表
硬件 硬件图纸:(SM电路板)
主要器件: U盘读写器
原理描述: U盘读写器是能将RS232信号转换为USB 信号的设备。收款机可以通过U盘读写器操作U盘。读写器支持符合USB 相关规范基于Bulk-Only 传输协议的各种U 盘/闪存盘/外置硬盘,文件系统支持FAT12、FAT16、FAT32。具体功能描述见南京沁恒CH375说明书。
文件命名规则:文件名最多8个字节,扩展名最多3个字节,且文件名必须全是大写。文件名和扩展名中间用 . 分隔,全部为ASCII码,最后以/0结束。
U盘读写器对以下USB设备的做过可靠性连接测试。
USB1.1闪存盘:
同创、郎科 、(微闪)microflash、飙王、爱国者、方正、蓝科、INNOSYS、联想、讯弛科技、microflash、神州龙盘、USBBYTE(储灵通)、SENTRY 、神州龙盘、 黑匣子、新科、 昂达 ONDA、 清华同方、锐拓科技(RETOP)、colorful晶彩c200、新科、噢美佳、 YINGKE、EASYDISK、三星U盘、USB2.0闪存盘、清华普天
USB1.1移动硬盘
CTEK USB移动硬盘盒
USB2.0移动硬盘
USB--IDE转接口
函数列表 static void DelayUsb20000(void)
static unsigned char USB_Command(unsigned char cmd,unsigned char len)
static unsigned char DiskReady(void)
static unsigned long int DiskQuery(void)
static unsigned char SearchFileLen(unsigned char *FileName,unsigned long int *FileLen)
static unsigned char OperateFile(unsigned char Command,unsigned char *FileName)
static unsigned char CloseFile(unsigned char Modify)
static unsigned char ByteWrite(unsigned char *Date,unsigned long int DateLen)
static unsigned char ByteRead(unsigned char *Date,unsigned long int DateLen)
static unsigned char FileWrite(unsigned char *FileName,unsigned char *Date,unsigned long int DateLen,unsigned long SectorOffset)
static unsigned char ModifyInfo(unsigned char *FileName,unsigned char type)
static unsigned char FileRead(unsigned char *FileName,unsigned char *Date,unsigned long int DateLen,unsigned long SectorOffset)
static unsigned int Usb_LookFileInvoiceID(Usb_ShenboIntdata *ptUsb_ShenboIntdata)
static unsigned int Usb_Shenbao_InvoiceInformation(unsigned char *StartEndData)
static unsigned int Usb_Shenbao_DateInformaion(unsigned char *StartEndData)
static unsigned int Usb_Shenbao_CollectInformation(unsigned char *StartEndData)
static unsigned int Usb_Shenbao_UseInvoiceInformation(unsigned char *StartEndData)
unsigned int Usb_OverCard(void)
static unsigned int UsbInt(void)
unsigned int Usb_ShenbaoInput(unsigned char *EndDate)
3函数功能说明和程序设计
3.1 U盘读写延时
函数原型 static void DelayUsb20000(void)
主要功能 延时20ms
头文件 wcskj.h
入口
返回
全局数据结构
外部变量
例外说明
耦合函数 _miscellaneous .c+Delay()、_main.c+Meet_Co_AckNOP();
备注
3.2 命令发送与接收
函数原型 static unsigned char USB_Command(unsigned char cmd,unsigned char len)
主要功能 U盘命令的发送与接收
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 Cmd:命令字 len:命令参数长度
返回 执行结果。ERR_SUCCESS:成功。其他错误结果见CH375HM.h。
全局数据结构
外部变量 REC_CNT:已经接收U盘读写器发送的命令长度。
SendDate_USB:命令发送与接收参数缓冲区。
例外说明
耦合函数 UZCH375HM.c+UsbInt()、_comm.c+SendData()、_main.c+Meet_Co_AckNOP()、UZCH375HM.c+DelayUsb20000()、_DINT()
备注 由于U盘读写器通讯协议中没有任何数据校验,所以在一帧数据接收完毕后还会等待一帧时间查询是否还能接收到数据。如果有则本次接收到的一定是错误数据。
3.3 检查U盘状态
函数原型 static unsigned char DiskReady(void)
主要功能 检查模块工作状态和U盘是否已经准备好
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口
返回 ERR_SUCCESS:U盘已经准备好
其他错误结果见CH375HM.h。
全局数据结构
外部变量
例外说明
耦合函数 UZCH375HM.c+USB_Command()、UZCH375HM.c+ DelayUsb20000()、 _main.c+Meet_Co_AckNOP()
备注 U盘连接状态,采用查询方式。
3.4 读U盘存储信息
函数原型 static unsigned long int DiskQuery(void)
主要功能 读取U盘存储的基本信息,包括U盘的总空间和剩余空间大小。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口
返回 返回U盘剩余空间的字节数
全局数据结构
外部变量
例外说明
耦合函数 UZCH375HM.c+USB_Command()
备注 各种不同文件格式、容量的U盘在执行该命令时需要的时间不一样。比如读FAT16的时间就比读FAT32的时间长。
3.5搜索文件
函数原型 static unsigned char SearchFileLen(unsigned char *FileName,unsigned long int *FileLen)
主要功能 按文件名FileName搜索文件,并返回文件长度。不检索子目录中的文件。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 入口参数FileName:搜索的文件名 ;出口参数FileLen:搜索到的文件长度
返回 ERR_SUCCESS :搜索到指定文件
ERR_MISS_FILE:没有搜索到指定文件
模块操作错误见CH375HM.h。
全局数据结构
外部变量
例外说明
耦合函数 UZCH375HM.c+UsbInt()、UZCH375HM.c+USB_Command()、UZCH375HM.c+ OperateFile()、_main.c+Meet_Co_AckNOP()
备注
3.6操作文件或目录
函数原型 static unsigned char OperateFile(unsigned char Command,unsigned char *FileName)
主要功能 可以创建、打开、删除指定的文件或文件夹
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 Command:命令名 ; FileName:文件名
返回 命令执行的结果。
ERR_SUCCESS :操作指定文件成功
其他操作错误见CH375HM.h。
全局数据结构
外部变量
例外说明
耦合函数 UZCH375HM.c+UsbInt()、UZCH375HM.c+USB_Command()、UZCH375HM.c+ OperateFile()、_main.c+Meet_Co_AckNOP()
备注
3.7关闭文件
函数原型 static unsigned char CloseFile(unsigned char Modify)
主要功能 关闭当前已经被打开的文件。根据Modify标志判断是否修改文件长度。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 Modify=0 只关闭文件不修改文件长度。
Modify=1 关闭文件的同时修改文件长度。
返回 U盘读写器执行的结果。
ERR_SUCCESS :关闭文件成功
其他错误见CH375HM.h。
全局数据结构
外部变量
例外说明
耦合函数
备注 通过ByteWrite()函数可以向指定文件的指定区域写入数据,如果是添加数据,那只会在文件尾增加数据,文件长度却不会更改。如果不修改文件长度这种写入是无效的。但是U盘读写模块会记录下ByteWrite已经写入的实际字节数, CloseFile(1)实现修改文件长度和关闭文件。
3.8顺序写U盘
函数原型 static unsigned char ByteWrite(unsigned char *Date,unsigned long int DateLen)
主要功能 将数据Date,分40个字节/次向已经被打开的文件,顺序写入DateLen字节数据。从文件指针开始写,每写入一个字节文件指针会自动加一。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 Date:准备写入的数据。
DateLen:将要写入的数据长度。
返回 ERR_SUCCESS:写入成功。
其他错误见CH375HM.h。
全局数据结构
外部变量
例外说明
耦合函数 _miscellaneous.c+MoveByte()、_rwMem.c+ReadMem()、CH375HM.c+USB_Command()、_main.c+Meet_Co_AckNOP()
备注
3.9顺序读U盘
函数原型 static unsigned char ByteRead(unsigned char *Date,unsigned long int DateLen)
主要功能 分40个字节/次从已经被打开的文件顺序读取DateLen字节数据,读出的数据存放在Date中。从文件指针开始读,每写入一个字节文件指针会自动加一。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 出口参数Date:读出的数据。
DateLen:将要读出的字节长度。
返回 ERR_SUCCESS:读成功。
其他错误见CH375HM.h。
全局数据结构
外部变量
例外说明
耦合函数 _miscellaneous.c+MoveByte()、_rwMem.c+WriteMem()、CH375HM.c+USB_Command()、_main.c+Meet_Co_AckNOP()
备注
3.10 写文件
函数原型 static unsigned char FileWrite(unsigned char *FileName,unsigned char *Date,unsigned long int DateLen,unsigned long SectorOffset)
主要功能 对已创建的文件FileName,从第SectorOffset个字节开始写数据,写入长度为DateLen。数据写成功后修改文件长度、文件修改日期、访问日期。若写数据过程中失败则只修改文件访问时间,本次更改文件内容操作无效。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 FileName:要写的文件名。
Date:写入的数据
DateLen:写入的数据长度
SectorOffset:写入的首地址在文件中的偏移量。
返回 ERR_SUCCESS:写文件成功。
其他错误见CH375HM.h。
全局数据结构
外部变量
例外说明
耦合函数 CH375HM.c.c+UsbInt()、CH375HM.c + OperateFile()、CH375HM.c + ByteWrite()、CH375HM.c+USB_Command()、CH375HM.c +CloseFile()、CH375HM.c + ModifyInfo()
备注
3.10修改文件操作时间
函数原型 static unsigned char ModifyInfo(unsigned char *FileName,unsigned char type)
主要功能 修改文件的创建时间、修改时间和访问时间为当前时间。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 FileName:文件名
type=0:修改文件的最后一次访问时间
type=1:修改文件的最后一次访问时间、修改时间
type=2:修改文件的最后一次访问时间、修改时间、创建时间
返回 ERR_SUCCESS:修改成功。
其他错误见CH375HM.h。
全局数据结构
外部变量
例外说明
耦合函数 CH375HM.c + OperateFile()、_miscellaneous.c+MoveByte()、_miscellaneous.c+BCDDaoHEX()、CH375HM.c+USB_Command()、CH375HM.c +CloseFile()
备注
3.11读文件
函数原型 static unsigned char FileRead(unsigned char *FileName,unsigned char *Date,unsigned long int DateLen,unsigned long SectorOffset)
主要功能 对已创建的文件FileName,从第SectorOffset个字节开始读数据,读出长度为DateLen。数据全部读完后修改文件访问日期。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 入口参数FileName:要读的文件名。
出口参数Date:读出的数据
入口参数DateLen:读出的数据长度
入口参数SectorOffset:读的首地址在文件中的偏移量。
返回 ERR_SUCCESS:修改成功。
其他错误见CH375HM.h。
全局数据结构
外部变量
例外说明
耦合函数 CH375HM.c.c+UsbInt()、CH375HM.c + OperateFile()、CH375HM.c + ByteRead()、CH375HM.c+USB_Command()、CH375HM.c +CloseFile()、CH375HM.c + ModifyInfo()
备注
3.12 建立索引文件和数据文件
函数原型 static unsigned int Usb_LookFileInvoiceID(Usb_ShenboIntdata *ptUsb_ShenboIntdata)
主要功能 建立索引文件和数据文件。如果已经有本机的索引且为本次申报索引则不需重新申报,反之更新索引信息。如果已有本机的数据文件,则先删除再创建一个新文件。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口 ptUsb_ShenboIntdata:索引文件结构体,各字段定义:
unsigned char *SbsyFileName:索引文件名称
unsigned char *SbStartEnddate:申报开始日期
unsigned char *SbDataFileName:数据文件名称
unsigned int DataFileNameOffset:数据文件名称在索引文件的偏移量
unsigned int SbsyJlh:索引文件得数量
unsigned int SyFileRecodeLen:一条索引文件的长度
返回 0:写文件成功。
Erro_Usb_WriteReadU:U盘读写错误。
Erro_UsbShenbao_Already:本次申报数据已经存在无须再申报。
全局数据结构
外部变量
例外说明
耦合函数 _rwfile.c+fRead()、_miscellaneous.c+MoveByte()、CH375HM.c+SearchFileLen()、CH375HM.c+OperateFile()、CH375HM.c+ FileRead()、CH375HM.c+ FileWrite()、_miscellaneous.c+ strbiji()、_miscellaneous.c+ClsArray()、_Icext.c+CheckSumLen()、_miscellaneous.c+hexDasc()
备注
3.18 USB端口初始化
函数原型 static unsigned int UsbInt(void)
主要功能 将串口波特率设置为9600,8位数据位,1位停止位,无奇偶校验。设置接收、发送缓冲区地址。
头文件 wcskj.h ;CH375HM.h ;_Public_h.h
入口
返回 0:设置成功
无其它返回值
全局数据结构
外部变量
例外说明
耦合函数
备注
4 流程图
4.1命令发送与接收
4.2查询U盘状态
4.3 写文件
4.4 建立索引文件和数据文件
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -