//*********************************************************************************** // Ver 1.0 // 2020.03.05 1、新建文件。 //*********************************************************************************** #ifndef __YMODEM__H #define __YMODEM__H //*********************************************************************************** #define YMODEM_PACK_LEN 1029 #define YMODEM_RXBUFF_SIZE 1280 #define YMODEM_TXBUFF_SIZE 20 #define YMODEM_PACKHEAD 3 #define YMODEM_TRAILER 2 #define YMODEM_ERROR_MAX 50 #define YMODEM_CRC_RETRIES 51 #define YMODEM_CA_CNT 3 #define YMODEM_EOT_CNT 1 #define YMODEM_TIMEOUTE_CNT 50 #define YMODEM_PACKET_128B 128 #define YMODEM_PACKET_1KB 1024 #define SECTOR_SIZE 1024 //YMODEM命令 #define YMODEM_CMD_SOH 0x01 #define YMODEM_CMD_STX 0x02 #define YMODEM_CMD_ETX 0x03 #define YMODEM_CMD_EOT 0x04 #define YMODEM_CMD_ACK 0x06 #define YMODEM_CMD_NACK 0x15 #define YMODEM_CMD_ETB 0x17 #define YMODEM_CMD_CA 0x18 #define YMODEM_CMD_C 0x43 //YMODEM错误标志 #define YMODEM_ERR_END 0 #define YMODEM_ERR_NOERR 1 #define YMODEM_ERR_ABORT 2 #define YMODEM_ERR_HEAD 3 #define YMODEM_ERR_NUM 4 #define YMODEM_ERR_CNUM 5 #define YMODEM_ERR_LEN 6 #define YMODEM_ERR_CRC 7 //YMODEM状态 #define YMODEM_STA_INIT 0 #define YMODEM_STA_REC_HEAD 1 #define YMODEM_STA_REC_START 2 #define YMODEM_STA_REC_DATA 3 #define YMODEM_STA_END 4 //数据有效状态 #define YMODEM_FILE_VOIDER 0 #define YMODEM_FILE_DATA 1 #define YMODEM_FILE_INFO 2 #define YMODEM_FILE_EXIT 0xff //*********************************************************************************** typedef struct{ INT8U FILE_Name[64]; //文件名 INT32U FILE_Len; //文件名长度 INT32U FILE_Size; //文件大小 INT16U PacketNum; //接收数据包计数 INT16U PacketSize; //接收到数据包长度 INT16U ReceLen; //接收到数据长度 INT16U ErrCnt; //错误计数 INT16U ErrCode; //错误代码 INT16U AckCnt; //应答计数 INT16U Status; //YMODEM状态 INT16U FileSta; //接收文件状态 }YMODEM_Str; extern YMODEM_Str YMODEM_Info; #define YMODEM_InfoInit() MEM_Fill((INT8U *)&YMODEM_Info,0,sizeof(YMODEM_Str)) //*********************************************************************************** //YMODEM宏定义 #define YMODEM_PacketNum YMODEM_Info.PacketNum #define YMODEM_PacketSize YMODEM_Info.PacketSize #define YMODEM_FileSize YMODEM_Info.FILE_Size #define YMODEM_ErrCnt YMODEM_Info.ErrCnt #define YMODEM_AckCnt YMODEM_Info.AckCnt #define YMODEM_FileSta YMODEM_Info.FileSta #define YMODEM_Status YMODEM_Info.Status #define YMODEM_ReceLen YMODEM_Info.ReceLen #define YMODEM_ErrCode YMODEM_Info.ErrCode //YMODEM接收数据定义 //串口选择, #define YMODEM_RxBuff UART_Info.Uart[IAP_UART_BUFF].rBuff #define YMODEM_TxBuff UART_Info.Uart[IAP_UART_BUFF].wBuff #define YMODEM_RxCnt UART_Info.Uart[IAP_UART_BUFF].rCnt #define YMODEM_TxCnt UART_Info.Uart[IAP_UART_BUFF].wCnt #define YMODEM_PacketRxEnd() UART_IdleState(IAP_UART) #define YMODEM_IdleRest(Value) UART_IdleRest(IAP_UART, Value) #define YMODEM_Set2Tx() RS485_TxEnable() #define YMODEM_Send(Value) RS485_SendChar(Value) #define YMODEM_Set2Rx() RS485_RxEnable() //*********************************************************************************** extern INT8U YMODEM_Receive(INT8U *ptr_R, INT16U *ptr_rLen, INT8U *ptr, INT16U *pLen); extern void YMODEM_SendChar(INT8U Value); #endif