/********************************************************************************
Copyright (C), Sinowealth Electronic. Ltd.
Author: Sino
Version: V1.0
Date: 2022/10/4
History:
V1.0 2022/10/4 Preliminary
********************************************************************************/
#include "Main.h"
BOOL bUart0WaitingFlg; //检测到COM_RXD有上拉后,1秒内检上位机通讯
BOOL bUart0HandShakeFlg; //有上位机通讯的标志位
BOOL bISPFlg; //ISP升级标志,进入ISP程序
BOOL bUart0ReadFlg;
BOOL bUart0WriteFlg;
BOOL bUart0SndAckFlg; //UART已经发送ACK给主机
U8 xdata ucSubClassID;
U8 xdata ucUart0Buf[150] _at_ 0xa00; //UART0接收数据的BUF
U8 xdata ucUart0BufPT; //UART0数据指针
U8 xdata ucUart0TimeoutCnt; //UART0通讯定时器计数
U8 xdata ucUart0DisconnectCnt; //UART0掉线定时器计数
U16 xdata uiReceCheckSum; //帧头判断正确
U8 xdata ucUart0ErrCode;
/*************************************************************************************************
* 数组名: Page1WrRdFuncTable
* 长 度: 18 Words
* 描 述: 存放Page1 SubClassID对应地址
*************************************************************************************************/
U16 code Page1WrRdFuncTable[18]=
{
SYS_PARA_MAP_ADDR, //SubClassID 0x00
SYSINFO_MAP_ADDR, //0x01
CHG_PARA_MAP_ADDR, //0x02
DSG_PARA_MAP_ADDR, //0x03
TEMP_PARA_MAP_ADDR, //0x04
0x00, //0x05
0x00, //0x06
0x00, //0x07
0x00, //0x08
SOC_PARA_MAP_ADDR, //0x09
AFE_PARA_MAP_ADDR, //0x0A
CALI_PARA_MAP_ADDR, //0x0B
0x00, //0x0C
0x00, //0x0D
0x00, //0x0E
0x00, //0x0F
0x00, //0x10
0x00, //0x11
};
/*************************************************************************************************
* 数组名: Page2WrRdFuncTable
* 长 度: 18 Words
* 描 述: 存放Page2 SubClassID对应地址
*************************************************************************************************/
U16 code Page2WrRdFuncTable[18]=
{
SYS_PARA_MAP_ADDR+32, //SubClassID 0x00
SYSINFO_MAP_ADDR+32, //0x01
CHG_PARA_MAP_ADDR+32, //0x02
DSG_PARA_MAP_ADDR+32, //0x03
TEMP_PARA_MAP_ADDR+32, //0x04
0x00, //0x05
0x00, //0x06
0x00, //0x07
0x00, //0x08
0x00, //0x09
AFE_PARA_MAP_ADDR+32, //0x0A
CALI_PARA_MAP_ADDR+32, //0x0B
0x00, //0x0C
0x00, //0x0D
0x00, //0x0E
0x00, //0x0F
0x00, //0x10
0x00, //0x11
};
U8 code CRC8Table[]=
{ //120424-1 CRC Table
0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,
0x70,0x77,0x7E,0x79,0x6C,0x6B,0x62,0x65,0x48,0x4F,0x46,0x41,0x54,0x53,0x5A,0x5D,
0xE0,0xE7,0xEE,0xE9,0xFC,0xFB,0xF2,0xF5,0xD8,0xDF,0xD6,0xD1,0xC4,0xC3,0xCA,0xCD,
0x90,0x97,0x9E,0x99,0x8C,0x8B,0x82,0x85,0xA8,0xAF,0xA6,0xA1,0xB4,0xB3,0xBA,0xBD,
0xC7,0xC0,0xC9,0xCE,0xDB,0xDC,0xD5,0xD2,0xFF,0xF8,0xF1,0xF6,0xE3,0xE4,0xED,0xEA,
0xB7,0xB0,0xB9,0xBE,0xAB,0xAC,0xA5,0xA2,0x8F,0x88,0x81,0x86,0x93,0x94,0x9D,0x9A,
0x27,0x20,0x29,0x2E,0x3B,0x3C,0x35,0x32,0x1F,0x18,0x11,0x16,0x03,0x04,0x0D,0x0A,
0x57,0x50,0x59,0x5E,0x4B,0x4C,0x45,0x42,0x6F,0x68,0x61,0x66,0x73,0x74,0x7D,0x7A,
0x89,0x8E,0x87,0x80,0x95,0x92,0x9B,0x9C,0xB1,0xB6,0xBF,0xB8,0xAD,0xAA,0xA3,0xA4,
0xF9,0xFE,0xF7,0xF0,0xE5,0xE2,0xEB,0xEC,0xC1,0xC6,0xCF,0xC8,0xDD,0xDA,0xD3,0xD4,
0x69,0x6E,0x67,0x60,0x75,0x72,0x7B,0x7C,0x51,0x56,0x5F,0x58,0x4D,0x4A,0x43,0x44,
0x19,0x1E,0x17,0x10,0x05,0x02,0x0B,0x0C,0x21,0x26,0x2F,0x28,0x3D,0x3A,0x33,0x34,
0x4E,0x49,0x40,0x47,0x52,0x55,0x5C,0x5B,0x76,0x71,0x78,0x7F,0x6A,0x6D,0x64,0x63,
0x3E,0x39,0x30,0x37,0x22,0x25,0x2C,0x2B,0x06,0x01,0x08,0x0F,0x1A,0x1D,0x14,0x13,
0xAE,0xA9,0xA0,0xA7,0xB2,0xB5,0xBC,0xBB,0x96,0x91,0x98,0x9F,0x8A,0x8D,0x84,0x83,
0xDE,0xD9,0xD0,0xD7,0xC2,0xC5,0xCC,0xCB,0xE6,0xE1,0xE8,0xEF,0xFA,0xFD,0xF4,0xF3
};
/*************************************************************************************************
* 函数名: CRC8cal
* 参 数: U8 *p:需要计算CRC变量的起始地址 , U8 counter:待计算数组的长度
* 返回值: 无
* 描 述: 查表法计算CRC
*************************************************************************************************/
U8 CRC8cal(U8 *p, U8 counter) //查表法计算CRC
{
U8 crc8 = 0;
for( ; counter > 0; counter--)
{
crc8 = CRC8Table[crc8^*p];
p++;
}
return(crc8);
}
/*************************************************************************************************
* 函数名: Uart0Handshake
* 参 数: 无
* 返回值: 无
* 描 述: UART0通讯握手协议
*************************************************************************************************/
void Uart0Handshake(void)
{
if(ucUart0Buf[2] == 0x00) //测试设备正常
{
Uart0SendAck();
bUart0HandShakeFlg = 1; //握手成功
}
else
{
Uart0SendNack();
}
}
/*************************************************************************************************
* 函数名: UartWriteInfo
* 参 数: ptr:数据需要写入的起始地址
* 返回值: 无
* 描 述: UART写数据
*************************************************************************************************/
void UartWriteInfo(U8 xdata *ptr)
{
U8 i;
if(ucUart0Buf[3+ucUart0Buf[UART_LENGTH]] == CRC8cal(&ucUart0Buf, ucUart0Buf[UART_LENGTH]+3))
{
for(i=0; i<ucUart0Buf[UART_LENGTH]; i++)
{
McuWDTClear();
*ptr = ucUart0Buf[3+i];
ptr++;
}
bMcuFlashWrWaitFlg = 1; //更新参数后,需要写入FLASH
bMcuFlashWrWaitCnt = 0;
Uart0SendAck();
}
else
{
Uart0SendNack();
}
}
/*************************************************************************************************
* 函数名: UartReadInfo
* 参 数: ptr:数据需要读出的起始地址
* 返回值: 无
* 描 述: UART读数据
*************************************************************************************************/
void UartReadInfo(U8 xdata *ptr)
{
U8 i;
if(ucUart0Buf[UART_LENGTH] > 140)
{
ucUart0Buf[UART_LENGTH] = 0;
}
for(i=0; i<ucUart0Buf[UART_LENGTH]; i++)
{
McuWDTClear();
ucUart0Buf[3+i] = *ptr;
ptr++;
}
ucUart0Buf[3+ucUart0Buf[UART_LENGTH]] = CRC8cal(&ucUart0Buf,ucUart0Buf[UART_LENGTH]+3);
Uart0SendData(); //启动发送数据
}
/*************************************************************************************************
* 函数名: WriteManufacture
* 参 数: 无
* 返回值: 无
* 描 述: 上位机通过UART写入自定义命令
0x41:系统复位
0x05:系统进入PD
*************************************************************************************************/
void WriteManufacture(void)
{
if(ucUart0Buf[3+ucUart0Buf[UART_LENGTH]] == CRC8cal(&ucUart0Buf, ucUart0Buf[UART_LENGTH]+3))
{
if(ucUart0Buf[4] == 0x41) //0x41: 复位系统
{
ucResetFlag = 0x12;
}
else if(ucUart0Buf[4] == 0x05) //0x05: 强制进入PD模式(即欠压休眠),只允许充电器激活
{
bPCEnterPDFlg = 1;
}
bUart0SndAckFlg = 0;
Uart0SendAck();
}
else
{
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
中颖最新afe,367601,使用uart和afe通信,开发更方便
欢迎交流,可指导客户开发 (165个子文件)
GasgaugeV4_10.__b 97B
McuFlash_ISP.__b 72B
DataFlash.__i 260B
BootIAP.__i 213B
BootApp.__i 213B
STARTUP.A51 2KB
STARTUP.A51 498B
MCUCore.uvgui.andyliu 94KB
MCUCore_uvopt.bak 91KB
MCUCore_uvproj.bak 55KB
BootLoad 47KB
Uart0App.c 28KB
DataFlash.c 25KB
BootIAP.c 23KB
BootLoad.hex.c 23KB
IapIsp.c 17KB
Protect.c 16KB
ADC.c 12KB
ExtE2PRom.c 11KB
Calculate.c 11KB
Initial.c 10KB
McuFlash.c 10KB
LowPower.c 10KB
Thermistor.c 9KB
AFE.c 9KB
SIF.c 8KB
McuLib.c 8KB
Uart1App.c 8KB
GasGaugeInter_V4_11.c 7KB
RTC.c 7KB
ISP.c 7KB
TWI.c 7KB
Memory.c 7KB
Flash.c 6KB
Calibrate.c 6KB
InterruptApp.c 5KB
Main.c 5KB
Uart.c 3KB
Main.c 3KB
Interrupt.c 3KB
BootApp.c 844B
Sino.cfg 43B
Eeprom 2KB
Hex2Array.exe 224KB
CheckCRC.exe 220KB
GasGaugeV4_11.h 11KB
MCURegister.h 10KB
MCURegister.h 10KB
UartApp.h 6KB
Memory.h 4KB
McuLib.h 4KB
Afe.h 4KB
Flash.h 4KB
McuFlash.h 3KB
Uart.h 2KB
Main.h 2KB
ExtE2PRom.h 2KB
IapIsp.h 2KB
Protect.h 1KB
SIF.h 1KB
ISP.h 833B
InterruptApp.h 821B
RTC.h 767B
Calibrate.h 592B
LowPower.h 587B
ADC.h 559B
Twi.h 507B
Calculate.h 491B
c51_type.h 243B
C51_type.h 243B
Initial.h 173B
Interrupt.h 60B
MCUCore_Load.hex 84KB
McuFlash_IAP.hex 74KB
McuFlash_ISP.hex 74KB
BootLoad.hex 10KB
Eeprom.hex 3KB
McuFlash_IAP.build_log.htm 2KB
McuFlash_ISP.build_log.htm 2KB
MCUCore_Load.build_log.htm 2KB
GasgaugeV4_10.build_log.htm 1KB
BootLoad.build_log.htm 1KB
Eeprom.build_log.htm 1KB
GasgaugeV4_10.LIB 21KB
Gasgauge.LIB 21KB
GasGaugeV4_11.LIB 18KB
McuFlash_IAP.lnp 877B
McuFlash_ISP.lnp 877B
MCUCore_Load.lnp 837B
BootLoad.lnp 240B
Eeprom.lnp 171B
GasGaugeV4_10.lst 51KB
Uart0App.lst 48KB
DataFlash.lst 39KB
IapIsp.lst 34KB
BootIAP.lst 33KB
Protect.lst 27KB
ExtE2PRom.lst 23KB
McuFlash.lst 21KB
Calculate.lst 19KB
共 165 条
- 1
- 2
资源评论
usbfans
- 粉丝: 73
- 资源: 56
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功