You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

422 lines
11 KiB

1 year ago
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file app_save.c
/// @brief @ app save
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20220120
/// @note cc_AS_stc02
#ifdef doc453453
app_save
asp_para L1_para_write eeprom的读写函数和地址配置
U8 L1_para_write(U8 *buf, U8 len)
msp_eeprom mcu的eeprom的底层驱动函数
----------global_register-------------------------------->
iapData数据的映射
TS_GlobalRegisterd R
..........................................
//RO Register
U16 reserved1;
//RW Register
TS_IapData_ sd;//// save data 需要保存的额参数
-----------iapData-------------------------------------->
TS_IapData_ iapData
TS_IapData_ code iapData_factory
..................................................
S16 slaver_id;
ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
////此值上电后更改, 顺便保存(区别于实时保存),
u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
-----------eep_param----------------------------------->
eeprom中的缓存
eeprom ---,,.
TS_eeprom_param_
.........................................
U8 filter;
U8 len;
U8 buf[EEPROM_PARAM_DATA_MAX];
U8 crc[2];
#endif
//////////////////////////////////////////////////////////////////////////////
#include "app_save.h"
#include "app_config.h"
#include "debug_drv.h"
#define D_20kg 200
#define D_85kg 850
///#define D_20kg 190
TS_IapData_ iapData=
{
0xaabcd,
0x18da,0x18d9,0x18d9,0x18d9,///0x18da,0x18d9 0x18d9 0x18d9
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
123,
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
///vU16 zeroout; //2
8049,///30*0x134
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
2,5,
D_rev0x55aa55aa
};
TS_IapData_ code iapData_factory=
{
0xaabcd,
0x18da,0x18d9,0x18d9,0x18d9,///
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
123,
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
///vU16 zeroout; //2
8049,///30*0x134
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
2,5,
D_rev0x55aa55aa
};
//读取reg内容,写入iap
u8 L4_reg_2_iap(void)
{
Lc_buf_copy_uc((u8 *)&iapData,(u8 *)&R.sd,D_TS_IapData_SIZE);
//写入eeprom
if(L1_para_write((U8*)&iapData,sizeof(TS_IapData_)) == 0)
{
L0_uart0_sendstr("e2p write success");
return 0;
}else
{
return 1;
}
}
//读取factory内容,写入iap
u8 L4_factory_2_iap(void)
{
Lc_buf_copy_uc((u8 *)&iapData,(u8 *)&iapData_factory,D_TS_IapData_SIZE);
L0_uart0_sendstr("\r\nFFFFF return to factory");
//写入eeprom
if(L1_para_write((U8*)&iapData,D_TS_IapData_SIZE) == 0)
{ L0_uart0_sendstr(" ok");
return 0;
}else
{ L0_uart0_sendstr(" error");
return 1;
}
}
///// 多次读取
void L4_iap_2_reg(void)
{
U8 d,len = 0,i = 0;
len = D_TS_IapData_SIZE;///sizeof(TS_IapData_);
/// printf("\r\n len = %d\r\n",len);
L0_uart0_sendstr("\r\nRRRRRRRRRRRRRRRRRRRRRRRRRRRRR\r\n");
/// L0_uart0_uchex(len);
do
{
d = L1_para_read((U8*)&iapData,&len);
if(d == 1)
{////读取错误
L0_uart0_sendstr("e2p read failed\r\n");
L4_factory_2_iap();
}else
{
/// L0_uartD_uchexArray((u8 *)&iapData,len);
L4_print_iap(&iapData);
if(D_rev0x55aa55aa != iapData.rev0x55aa55aa)
{
L0_uart0_sendstr("iapData_factory\r\n");L0_waitFree_uartN(0);
L1_para_write((U8*)&iapData_factory,len);
}else
{
L0_uart0_sendstr("e2p read success\r\n");L0_waitFree_uartN(0);
Lc_buf_copy_uc((u8 *)&R.sd,(u8 *)&iapData,len);
L4_print_iap(&R.sd);
break;
}
}
i ++;
}while(i < 3);
}
void L4_print_iap(TS_IapData_ *s)
{
L0_uart0_sendstr("\r\n--print_reg-- \r\na b= ");
L0_uart0_uchex(s->ADC_shiftaverage_a);
L0_uart0_uc(' ');
L0_uart0_uchex(s->ADC_shiftaverage_b);
L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
printf("\r\nfactory_ws\r\n %d kg = 0x%4x\r\n", s->factory_ws[0].kg,s->factory_ws[0].adc);
printf(" %d kg = 0x%4x\r\n", s->factory_ws[1].kg,s->factory_ws[1].adc);
printf(" %d kg = 0x%4x\r\n", s->factory_ws[2].kg,s->factory_ws[2].adc);
printf("\r\nzerows\r\n %d kg = 0x%4x\r\n", s->zerows[0].kg,s->zerows[0].adc);
printf(" %d kg = 0x%4x\r\n", s->zerows[1].kg,s->zerows[1].adc);
printf(" %d kg = 0x%4x\r\n", s->zerows[2].kg,s->zerows[2].adc);
printf("\r\ns->zeroout= %d = 0x%4x\r\n", s->zeroout, s->zeroout);
printf("\r\ns->sensor 0x%04x 0x%04x 0x%04x 0x%04x\r\n",s->sensor[0],s->sensor[1],s->sensor[2],s->sensor[3]);
printf("\r\ns->ADC_shiftaverage_a 0x%02x s->ADC_shiftaverage_b 0x%02x\r\n",(int)s->ADC_shiftaverage_a ,(int)s->ADC_shiftaverage_b );
printf("\r\n-----print_reg end--------\r\n");
}
/*******
L0_uart0_sendstr("\r\nfactory_ws= ");
L0_uart0_ushex(iapData.factory_ws[0].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.factory_ws[0].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.factory_ws[1].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.factory_ws[1].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.factory_ws[2].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.factory_ws[3].adc);L0_uart0_0d0a();
L0_uart0_sendstr("\r\nzerows= ");
L0_uart0_ushex(iapData.zerows[0].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.zerows[0].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.zerows[1].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.zerows[1].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.zerows[2].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.zerows[3].adc);L0_uart0_0d0a();
63 = 0x 3
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4
4
v3.4
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR
2800 01 00 02 00 03 00 04 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x0001 0x0002 0x0003 0x0004
e2p read success
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x0001 0x0002 0x0003 0x0004
8
ADC_SAMPLE
ADC_SAMPLE
ADC_SAMPLE
ADC_SAMPLE
R.sd.zeroout= 8049 = 0x1f71 offset 1 = 0x 1
R.sd.zeroout= 8049 = 0x1f71 offset 2 = 0x 2
R.sd.zeroout= 8049 = 0x1f71 offset 3 = 0x 3
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4
4Z00 FDAA 21C7 Z02 13EF 0B82 Z03 FD31 2240 Z01 F49D 2AD4 1F3D 1F6D 13F2 1F35 1C74 001E
1EF0 1F64 13F2 1EF7 1C4F 001D
1EA8 1F4A 1EAF 1EB8 1ED6 0025
1E5F 1F44 1E5A 1E55 1E94 0024
1E14 1F3D 1E19 1E74 1E77 0023
1DD3 1F2F 1DD4 1E39 1E43 0023
1D92 1F20 1D8C 1E37 1E1D 0022
1D4C 1F0E 1D4F 1DCF 1DDE 0022
1D0B 1EFF 1D01 1D7F 1DA2 0021
1CEA 1EF4 1CBD 1D49 1D79 0021
FD 04 33 44 55 00 00 00
4sensor zero
R.sd.sensor 0x245d 0x2b5a 0x e46 0x2478
&e2p write success
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR
2824 5D 2B 5A 0E 46 24 78 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
e2p read success
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
1F28 1F65 1CAE 1F2D 1E9A 0024
1EEA 1F58 1EF4 1F37 1F1B 0025
1EA3 1F45 1EB3 1ECE 1EDA 0025
1E72 1F35 1E69 1E92 1EA8 0024
1E2A 1F25 1E2B 1E7B 1E7D 0023
FD 02 33 44 55 00 00 00
--read --
a b=
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
1DE4 1F16 1DE6 1E20 1E40 0023
1DA3 1F06 1DA8 1DFB 1E13 0022
1D7C 1EF4 1D67 1DA9 1DE0 0022
1D37 1EE6 1D28 1D53 1DA6 0021
1CE9 1ED4 1CE7 1D37 1D76 0020
1CA7 1EC2 1CA6 1D02 1D44 0020
1C5F 1EAF 1C60 1CA3 1D04 001F
1C2D 1EA1 1C24 1C58 1CD2 001F
1BEB 1E93 1BDC 1C21 1C9E 001E
FD 03 33 44 55 00 00 00
--read R.sd--
a b=
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
1BAB 1E83 1B98 1BDB 1C68 001D
1B7D 1E70 1B5A 1BA3 1C3A 001D
1B32 1E5F 1B0B 1AF9 1BE5 001C
1AEA 1E53 1AD3 1AEE 1BBF 001B
*********/