Kaynağa Gözat

add pcba test

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 5 yıl önce
ebeveyn
işleme
ff039e69a5

+ 15 - 0
Application/app/nv_storage.c

@@ -22,6 +22,21 @@ static uint8_t soc_write_backup_index = 0;
 static uint8_t soc_write_index = 0;
 static uint8_t soc_data[(sizeof(soc_t) + sizeof(uint16_t))];
 
+int nv_read_write_test(void){
+	uint8_t data[32];
+	memset(data, 0x5a, sizeof(data));
+	AT24CXX_Write(0, data, sizeof(data));
+	memset(data, 0x0, sizeof(data));
+	AT24CXX_Read(0, data, sizeof(data));
+	for (int i = 0; i < sizeof(data); i++){
+		if (data[i] != 0x5a) {
+			return 0;
+		}
+	}
+	return 1;
+}
+
+
 int nv_save_sn(uint8_t *sn, int len){
 	sn_t sn_info;
 	if (len > sizeof(sn_info.sn)){

+ 1 - 1
Application/app/nv_storage.h

@@ -15,4 +15,4 @@ int nv_restore_soc(void);
 void nv_erase(void);
 int nv_save_sn(uint8_t *sn, int len);
 int nv_read_sn(uint8_t *sn, int len);
-
+int nv_read_write_test(void);

+ 6 - 1
Application/app/pc_message.c

@@ -1,6 +1,11 @@
 #include "pc_message.h"
+#include "pcba_test.h"
 
 void process_pc_message(can_frame_t *frame, int len){
-
+	if (frame->key == CAN_KEY_PCBA_TEST) {
+		uint8_t response[16];
+		int resp_len = pcba_test(frame->data, len, response);
+		protocol_send_bms_info(frame->head.can_addr, frame->key, response, resp_len);
+	}
 }
 

+ 166 - 0
Application/app/pcba_test.c

@@ -0,0 +1,166 @@
+#include "bsp/gpio.h"
+#include "bsp/ml5238.h"
+#include "bsp/uart.h"
+#include "bsp/gd32_adc.h"
+#include "nv_storage.h"
+#include "pcba_test.h"
+
+int pcba_test(uint8_t *data, int len, uint8_t *response){
+	uint8_t *payload = data + 2;
+	int resp_len = 0;
+	response[resp_len ++] = 0xFE;
+	response[resp_len ++] = 0xFE;
+	response[resp_len ++] = 0; //len
+	response[resp_len ++] = payload[0];
+	response[resp_len ++] = payload[1];
+	uint8_t cmd = payload[1];
+	if (cmd == 0x00) {
+		response[resp_len ++] = ml5238_noop_register_rw(payload[2]);
+	}else if (cmd == 0x01) {
+		response[resp_len ++] = (uint8_t)nv_read_write_test();
+	}else if (cmd == 0x02){
+		int8_t temp;
+		uint8_t result = 0;
+		for (int i = 0; i < PACK_TEMPS_NUM; i++){
+			temp = get_pack_temperature(i);
+			if(!(((temp >= 24) && (temp <= 26))||((temp >= 63) && (temp <= 67)))){
+				result = 1;
+			}
+		}
+		response[resp_len ++] = result;
+	}else if (cmd == 0x03) {
+		response[resp_len ++] = 0;
+	}else if (cmd == 0x04) {
+		LED1_ON(0);
+		LED3_ON(0);
+		LED0_ON(1);
+		LED2_ON(1);
+		LED4_ON(1);
+		response[resp_len ++] = 0;
+	}else if (cmd == 0x05) {
+		LED0_ON(0);
+		LED2_ON(0);
+		LED4_ON(0);		
+		LED1_ON(1);
+		LED3_ON(1);
+		response[resp_len ++] = 0;
+	}else if (cmd == 0x06) {
+		LED1_ON(0);
+		LED3_ON(0);
+		charger_open(0);
+		discharger_open(0);
+		start_aux_power(0);
+		response[resp_len ++] = 0;
+	}else if (cmd == 0x07) {
+		start_aux_power(1);
+		response[resp_len ++] = 0;
+	}else if (cmd == 0x08) {
+		response[resp_len ++] = io_state()->aux_lock_detect;
+	}else if (cmd == 0x09) {
+		start_aux_power(0);
+		response[resp_len ++] = 0;
+	}else if (cmd == 0x0a) {
+		ml5238_enable_load_detect(1);
+		delay_us(1000);
+		response[resp_len ++] = !ml5238_is_load_disconnect();
+	}else if (cmd == 0xb) {
+		charger_open(0);
+		discharger_open(0);
+		start_aux_power(0);
+		delay_us(1000);
+		response[resp_len ++] = io_state()->charger_detect_irq;
+	}else if (cmd == 0xc) {
+		charger_open(0);
+		discharger_open(0);
+		start_aux_power(0);
+		response[resp_len ++] = IS_CHARGER_IN();
+	}else if (cmd == 0xd) {
+		response[resp_len ++] = io_state()->aux_lock_detect;
+	}else if (cmd == 0xe) {
+		charger_open(0);
+		discharger_open(0);
+		start_aux_power(1);
+		response[resp_len ++] = 0;
+	}else if (cmd == 0xf){
+		response[resp_len ++] = !IS_HALL1_DETECTED();
+		response[resp_len ++] = !IS_HALL2_DETECTED();
+	}else if (cmd == 0x10) {
+		if (payload[2] >= 3) {
+			charger_open(1);
+			discharger_open(1);
+		}else if (payload[2] == 1){
+			charger_open(0);
+			discharger_open(1);
+		}else{
+			charger_open(1);
+			discharger_open(0);
+		}
+		response[resp_len ++] = 0;
+	}else if (cmd == 0x11) {
+		response[resp_len ++] = ml5238_is_discharging() | ml5238_is_charging()<<1;
+	}else if (cmd == 0x22) {
+		uint16_t health = *(uint16_t *)bms_health();
+		response[resp_len ++] = AUX_VOL_IS_OPEN();
+		response[resp_len ++] = health;
+		response[resp_len ++] = health >> 8;
+	}else if (cmd == 0xa1) {
+		charger_open(0);
+		discharger_open(0);
+		start_aux_power(0);
+		response[resp_len ++] = 0;
+	}else if (cmd == 0x12) {
+		uint16_t aux_power_adc = (uint16_t)adc_sample_avg(ADC_CHAN_AUX_CURR, 10);
+		response[resp_len ++] = aux_power_adc;
+		response[resp_len ++] = aux_power_adc >> 8;		
+	}else if (cmd == 0x13) {
+		shark_uart_deinit(SHARK_UART1);
+		rcu_periph_clock_enable(RCU_GPIOA);
+		gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2);
+		gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_3);
+		gpio_bit_set(GPIOA, GPIO_PIN_2);
+		response[resp_len ++] = gpio_input_bit_get(GPIOA, GPIO_PIN_3);
+	}else if (cmd == 0x16) {
+		gpio_bit_reset(GPIOA, GPIO_PIN_2);
+		response[resp_len ++] = gpio_input_bit_get(GPIOA, GPIO_PIN_3);
+	}else if (cmd == 0x14) {
+		UART0_IR_EN(0);
+		response[resp_len ++] = gpio_output_bit_get(GPIOC,GPIO_PIN_14);
+	}else if (cmd == 0x15) {
+		UART1_IR_EN(0);
+		response[resp_len ++] = gpio_output_bit_get(GPIOF,GPIO_PIN_0);
+	}else if (cmd == 0x17) {
+		uint16_t vol = 0;
+		for (int i = 0; i < CELLS_NUM; i++){
+			if (measure_value()->cell_vol[i] > 3000 && measure_value()->cell_vol[i] < 3400) {
+				vol = measure_value()->cell_vol[i];
+				break;
+			}
+		}
+		response[resp_len ++] = vol;
+		response[resp_len ++] = vol >> 8;	
+	}else if (cmd == 0x18) {
+		uint8_t result = 1;
+		if (payload[2] == 1) {
+			charger_open(1);
+			discharger_open(1);
+			result = 0;
+		}else if (payload[2] == 2){
+			if (measure_value()->load_current >= -5300 && measure_value()->load_current <= -4700){
+				result = 0;
+			}
+		}else if (payload[2] == 3) {
+			if (io_state()->aux_lock_detect) {
+				result = 0;
+			}
+		}else if (payload[2] == 4) {
+			charger_open(0);
+			discharger_open(0);
+			result = 0;			
+		}
+		response[resp_len ++] = result;
+	}
+	response[2] = resp_len;
+
+	return resp_len;
+}
+

+ 13 - 0
Application/app/pcba_test.h

@@ -0,0 +1,13 @@
+#pragma once
+
+#include <stdint.h>
+#include "app/sox/soc.h"
+#include "app/sox/measure.h"
+#include "app/sox/measure_task.h"
+#include "app/sox/health.h"
+#include "app/sox/state.h"
+#include "app/sox/iostate.h"
+
+int pcba_test(uint8_t *data, int len, uint8_t *response);
+
+

+ 5 - 1
Application/app/protocol.c

@@ -25,7 +25,11 @@ void protocol_send_ack(uint8_t dest, uint8_t key, int result) {
 	shark_uart_write_frame(current_uart, data, sizeof(data));
 }
 
-void protocol_send_debug_info(uint8_t dest, uint8_t *data, int len){	
+void protocol_send_debug_info(uint8_t dest, uint8_t *data, int len){
+	if (bms_work_is_aging_test() || bms_work_is_pcba_test()){
+		shark_uart_write_bytes(current_uart, data, len);
+		return;
+	}
 	can_head_t can_head;
 	CAN_OUT(&can_head, dest);
 	shark_uart_frame_start(current_uart, (uint8_t *)&can_head, sizeof(can_head));

+ 2 - 0
Application/app/protocol.h

@@ -129,6 +129,8 @@ typedef struct {
 
 #define CAN_KEY_START_CALI  0xa8
 
+#define CAN_KEY_PCBA_TEST 0xa9
+
 #define CAN_KEY_IAP_ENTER   0xF0
 #define CAN_KEY_IAP_BEGIN   0xF1
 #define CAN_KEY_IAP_CHECK   0xF2

+ 10 - 0
Application/app/protocol_old.c

@@ -11,6 +11,7 @@
 #include "libs/logger.h"
 #include "bsp/uart.h"
 #include "protocol_old.h"
+#include "pcba_test.h"
 
 static uart_enum_t current_uart = SHARK_UART0;
 extern char* bsp_get_fversion(void);
@@ -165,6 +166,15 @@ void protocol_old_recv_frame(uart_enum_t uart_no, uint8_t *data, int len){
 				bms_state_get()->user_request = USER_REQUEST_PENDING | USER_REQUEST_SMALLCURRENT_ON | USER_REQUEST_DISCHARGER_OFF | USER_REQUEST_CHARGER_OFF;
 				printf("tuichu OK!\n");
 			}
+		}else if (memcmp(data + 4, "ceshi", 5) == 0) {
+			bms_work_mode_set(WORK_MODE_PCBA_TEST, 1);
+			printf("pcba ceshi OK!\n");
+		}
+	}else if (bms_work_is_pcba_test() && data[0] == 0xFE && data[1] == 0xFE){
+		uint8_t response[16];
+		int resp_len = pcba_test(data, len, response);
+		if (resp_len > 0) {
+			shark_uart_write_bytes(current_uart, response, resp_len);
 		}
 	}
 }

+ 2 - 2
Application/app/sox/state.c

@@ -117,7 +117,7 @@ static void _debug_timer_handler(shark_timer_t *t){
  3. 收到打开大电的指令后,必须两个mos都要打开,然后再经过2的判断
     。。。。。
 */
-static void discharger_open(int open){
+void discharger_open(int open){
 	/* 打开大电前,先打开短路保护*/
 	if (open) {
 		int mode = SHORT_CURRENT_MODE_100A_200A;
@@ -137,7 +137,7 @@ static void discharger_open(int open){
 }
 
 
-static void charger_open(int open) {
+void charger_open(int open) {
 	ml5238_enable_charger_mosfet(open);
 }
 

+ 3 - 0
Application/app/sox/state.h

@@ -90,6 +90,9 @@ int bms_work_is_aging_test(void);
 int bms_work_is_pcba_test(void);
 int bms_work_is_pack_test(void);
 int bms_work_is_calibrating(void);
+void charger_open(int open);
+void discharger_open(int open);
+void start_aux_power(int start);
 
 #endif /* _BMS_STATE_H__ */
 

+ 6 - 0
Application/bsp/gpio.h

@@ -40,6 +40,12 @@ void gpio_init(void);
 #define IS_HALL1_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_15)
 #define IS_HALL2_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_13)
 
+#define LED0_ON(x) {}
+#define LED1_ON(x) {}
+#define LED2_ON(x) {}
+#define LED3_ON(x) {}
+#define LED4_ON(x) {}
+
 #elif (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600)
 
 /*power switch for cs110, low active */

+ 9 - 0
Application/bsp/ml5238.c

@@ -17,6 +17,15 @@ void ml5238_init(void){
 	ml5238_irq_enable(1);
 }
 
+
+uint8_t ml5238_noop_register_rw(uint8_t data){
+	uint8_t value = data;
+	ml5238_write(ML5238_NOOP, value);
+	value = 0xFF;
+	ml5238_read(ML5238_NOOP, &value);
+	return value;
+}
+
 void ml5238_register_notify_handler(ml5238_notify_hander handler){
 	_handler = handler;
 }

+ 1 - 0
Application/bsp/ml5238.h

@@ -16,6 +16,7 @@ int ml5238_enable_charger_detect(int small_current_on, int enable);
 int ml5238_is_charging(void);
 int ml5238_is_discharging(void);
 int ml5238_is_short_current_enabled(int mode);
+uint8_t ml5238_noop_register_rw(uint8_t data);//ml5238 ¶Áд²âÊÔ
 
 
 typedef void (*ml5238_notify_hander)(int event);

+ 62 - 50
Project/SP700.uvoptx

@@ -304,6 +304,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>8</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\app\pcba_test.c</PathWithFileName>
+      <FilenameWithoutPath>pcba_test.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -314,7 +326,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>8</FileNumber>
+      <FileNumber>9</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -326,7 +338,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -338,7 +350,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -350,7 +362,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -362,7 +374,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -374,7 +386,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -394,7 +406,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -406,7 +418,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -418,7 +430,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -430,7 +442,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -442,7 +454,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -454,7 +466,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -466,7 +478,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -478,7 +490,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -490,7 +502,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -502,7 +514,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -514,7 +526,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -526,7 +538,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -538,7 +550,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -550,7 +562,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -570,7 +582,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -582,7 +594,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -594,7 +606,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -606,7 +618,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -618,7 +630,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -638,7 +650,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -650,7 +662,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -662,7 +674,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -674,7 +686,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -686,7 +698,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -698,7 +710,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -710,7 +722,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -722,7 +734,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -734,7 +746,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -746,7 +758,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -758,7 +770,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -770,7 +782,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -782,7 +794,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -794,7 +806,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -806,7 +818,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -818,7 +830,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -830,7 +842,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -842,7 +854,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>50</FileNumber>
+      <FileNumber>51</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -854,7 +866,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>51</FileNumber>
+      <FileNumber>52</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -866,7 +878,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>52</FileNumber>
+      <FileNumber>53</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -878,7 +890,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>53</FileNumber>
+      <FileNumber>54</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -890,7 +902,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>54</FileNumber>
+      <FileNumber>55</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -902,7 +914,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>55</FileNumber>
+      <FileNumber>56</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -922,7 +934,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>56</FileNumber>
+      <FileNumber>57</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -934,7 +946,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>57</FileNumber>
+      <FileNumber>58</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 5 - 0
Project/SP700.uvprojx

@@ -418,6 +418,11 @@
               <FileType>1</FileType>
               <FilePath>..\Application\app\protocol_old.c</FilePath>
             </File>
+            <File>
+              <FileName>pcba_test.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\app\pcba_test.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>