Browse Source

support iap

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 5 years ago
parent
commit
c9acc3752f

+ 101 - 0
Application/app/iap.c

@@ -0,0 +1,101 @@
+#include <string.h>
+#include "app/iap.h"
+#include "bsp/fmc_flash.h"
+
+#define QWS_IAP_MAGIC_SUCCESS		0x11223344
+#define QWS_IAP_MAGIC_FLASH			0xAABBCCDD
+
+static int iap_write_image(uint8_t *data, int len);
+static int iap_check_image(uint8_t *data, int len);
+static void _reboot_timer_handler(shark_timer_t *t);
+void iap_read_string(can_frame_t *frame);
+
+static int _write_position = 0;
+static shark_timer_t _reboot_timer = {.handler = _reboot_timer_handler,};
+
+void process_iap_message(can_frame_t *frame, int len){
+	uint8_t *data = NULL;
+	int data_len = 0;
+	switch(frame->key) {
+		case CAN_KEY_IAP_ENTER:
+			protocol_send_ack(frame->head.can_addr, frame->key, 0);
+			break;
+		case CAN_KEY_IAP_BEGIN:
+			fmc_erase_image();
+			_write_position = 0;
+			protocol_send_ack(frame->head.can_addr, frame->key, 0);
+			break;
+		case CAN_KEY_IAP_WRITE:
+			data_len = iap_write_image(frame->data, len);
+			data = frame->data;
+			break;
+		case CAN_KEY_IAP_CHECK:
+			data_len = iap_check_image(frame->data, len);
+			data = frame->data;
+			break;
+		case CAN_KEY_IAP_BOOT:
+			protocol_send_ack(frame->head.can_addr, frame->key, 0);
+			shark_timer_post(&_reboot_timer,1000);
+			break;
+		case CAN_EEY_IAP_READ_STRING:
+			iap_read_string(frame);
+			break;
+	}
+	if (data != NULL && data_len > 0){
+		protocol_send_bms_info(frame->head.can_addr, frame->key, frame->data, data_len);
+	}
+}
+
+static void _reboot_timer_handler(shark_timer_t *t){
+	NVIC_SystemReset();
+}
+
+static int iap_write_image(uint8_t *data, int len){
+	int w_pos = shark_decode_u24(data);
+	if (w_pos == _write_position) {
+		fmc_write_image(data + 3, len - 3);
+		_write_position += w_pos;
+	}
+	shark_encode_u24(data, w_pos);
+	return 3;
+}
+
+void iap_read_string(can_frame_t *frame)
+{
+	uint8_t buff[64];
+	const char *text;
+	uint32_t addr;
+	uint32_t len;
+
+	addr = ((uint32_t) frame->data[2]) << 16 | ((uint32_t) frame->data[1]) << 8 | frame->data[0];
+	text = (const char *) (0x08000000 + addr);
+
+	len = strlen(text);
+	if (len > (sizeof(buff)-4)) {
+		len = sizeof(buff) - 4;
+	}
+	buff[0] = 0;
+	memcpy(buff+1, frame->data, 3);
+	memcpy(buff + 4, text, len);
+
+	protocol_send_bms_info(frame->head.can_addr, frame->key, buff, len + 4);
+}
+
+
+static int iap_check_image(uint8_t *data, int len) {
+	uint32_t size, checksum;
+	size = shark_decode_u24(data);
+	checksum = shark_decode_u32(data + 3);
+	uint32_t d_checksum = shark_iap_checksum_init();
+	d_checksum = shark_iap_checksum_put(d_checksum, (const u8 *)fmc_iap_image_addr(), size);
+	d_checksum = shark_iap_checksum_finish(d_checksum);
+
+	if (checksum != d_checksum) {
+		data[0] = 1;
+		return 1;
+	}
+	fmc_write_magic(size, checksum, QWS_IAP_MAGIC_FLASH);
+	data[0] = 0;
+	return 1;	
+}
+

+ 5 - 0
Application/app/iap.h

@@ -0,0 +1,5 @@
+#pragma once
+#include <stdint.h>
+#include "protocol.h"
+void process_iap_message(can_frame_t *frame, int len);
+

+ 10 - 5
Application/app/protocol.c

@@ -1,8 +1,9 @@
 #include "protocol.h"
 #include <string.h>
 #include "bsp/uart.h"
-#include "pc_message.h"
-#include "bms_message.h"
+#include "app/pc_message.h"
+#include "app/bms_message.h"
+#include "app/iap.h"
 static uint16_t _check_sum(uint8_t*data,uint16_t size);
 static uart_enum_t current_uart = SHARK_UART0;
 
@@ -60,10 +61,14 @@ void protocol_recv_frame(uart_enum_t uart_no, uint8_t *data, int len){
 	}
 
 	len -= sizeof(can_frame_t);
-	if (can_frame->head.can_addr == 0x45){ //pc sent
-		process_pc_message(can_frame, len);
+	if (can_frame->key >= CAN_KEY_IAP_ENTER){
+		process_iap_message(can_frame, len);
 	}else {
-		process_bms_message(can_frame, len);
+		if (can_frame->head.can_addr == 0x45){ //pc sent
+			process_pc_message(can_frame, len);
+		}else {
+			process_bms_message(can_frame, len);
+		}
 	}
 }
 

+ 6 - 0
Application/app/protocol.h

@@ -115,6 +115,12 @@ typedef struct {
 #define CAN_KEY_SET_SN      0x06 //string
 #define CAN_KEY_GET_SN      0x05 //return string
 
+#define CAN_KEY_IAP_ENTER   0xF0
+#define CAN_KEY_IAP_BEGIN   0xF1
+#define CAN_KEY_IAP_CHECK   0xF2
+#define CAN_KEY_IAP_WRITE   0xF4
+#define CAN_KEY_IAP_BOOT    0xF5
+#define CAN_EEY_IAP_READ_STRING 0xF8
 
 void protocol_send_bms_info(uint8_t dest, uint8_t key, uint8_t *data, int len);
 void protocol_send_debug_info(uint8_t dest, uint8_t *data, int size);

+ 5 - 1
Application/bsp/cs1180.c

@@ -206,7 +206,11 @@ float cs1180_adc_sample(void)
 {
 	uint8_t data[3] = {0,0,0};
 	int a = 0;
-
+	while (!IS_CS1180_READY());
+	if (cs1180_dumy_read() != 0x7){
+		return 0;
+	}
+	
 	while (IS_CS1180_READY()); //µ±drdy Ϊ¸ßʱ£¬²»¶ÁÈ¡Êý¾Ý
 
 	cs1180_cs(0);

+ 12 - 34
Application/bsp/fmc_flash.c

@@ -46,8 +46,8 @@ void fmc_read_data(uint8_t *data, int len){
 	_fmc_read_data(_data_addr(), data, len);
 }
 
-void fmc_erase_image(int len){
-	_fmc_erase_addr(_image_addr(), len);
+void fmc_erase_image(void){
+	_fmc_erase_addr(_image_addr(), one_page_size * 50);
 	_image_write_addr = 0;
 }
 void fmc_write_image(uint8_t *data, int len){
@@ -63,41 +63,19 @@ void fmc_read_image(uint8_t *data, int len){
 	_image_read_addr += len;
 }
 
-static __inline__ void _fmc_flag_clear(void) {
-	fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+uint32_t fmc_iap_image_addr(void){
+	return _image_addr();
 }
 
-void fmc_write_magic(uint32_t magic){
+void fmc_write_magic(uint32_t length, uint32_t checksum, uint32_t magic){
 	uint32_t address = _maigc_addr();
-	uint32_t length, checksum, value;
-
-	value = REG32(address + 8);
-	if (magic == value) {
-		return;
-	}
-
-	length = REG32(address);
-	checksum = REG32(address + 4);
-
-	fmc_unlock();
-
-	if (value != 0xFFFFFFFF) {
-		_fmc_flag_clear();
-		fmc_page_erase(address);
-
-		_fmc_flag_clear();
-		fmc_word_program(address, length);
-
-		_fmc_flag_clear();
-		fmc_word_program(address + 4, checksum);
-	}
-
-	if (magic != 0xFFFFFFFF) {
-		_fmc_flag_clear();
-		fmc_word_program(address + 8, magic);
-	}
-
-	fmc_lock();
+	uint32_t buff[4];
+	buff[0] = length;
+	buff[1] = checksum;
+	buff[2] = magic;
+	buff[3] = _maigc_addr();
+	_fmc_erase_addr(_maigc_addr(), sizeof(buff));
+	_fmc_write_data(_maigc_addr(), (uint8_t *)buff ,sizeof(buff));
 }
 
 uint32_t fmc_read_magic(void){

+ 3 - 2
Application/bsp/fmc_flash.h

@@ -7,12 +7,13 @@ void fmc_read_sn(uint8_t *sn, int *len);
 
 void fmc_write_data(uint8_t *data, int len);
 void fmc_read_data(uint8_t *data, int len);
-void fmc_write_magic(uint32_t magic);
+void fmc_write_magic(u32 length, u32 checksum, u32 magic);
 uint32_t fmc_read_magic(void);
-void fmc_erase_image(int len);
+void fmc_erase_image(void);
 void fmc_write_image(uint8_t *data, int len);
 void fmc_read_image(uint8_t *data, int len);
 void fmc_start_read_image(void);
+uint32_t fmc_iap_image_addr(void);
 
 #endif /* _FMC_FLASH_H__ */
 

+ 34 - 0
Application/libs/shark_utils.c

@@ -50,6 +50,40 @@ u16 shark_crc16_check(const u8 *data, u16 size)
 	return shark_crc16_update(0, data, size);
 }
 
+
+u32 shark_iap_checksum_init(void)
+{
+	return 0xFFFFFFFFU;
+}
+
+u32 shark_iap_checksum_finish(u32 crc)
+{
+	return crc ^ 0xFFFFFFFFU;
+}
+
+u32 shark_iap_checksum_put(u32 crc, const u8 *buff, u32 length)
+{
+	const u8 *buff_end;
+
+	for (buff_end = buff + length; buff < buff_end; buff++) {
+		u8 value = *buff;
+		u8 i;
+
+		for (i = 0; i < 8; i++) {
+			if (((crc ^ value) & 1) != 0) {
+				crc = (crc >> 1) ^ 0xEDB88320U;
+			} else {
+				crc >>= 1;
+			}
+
+			value >>= 1;
+		}
+	}
+
+	return crc;
+}
+
+
 u16 shark_decode_u16(const u8 *buff)
 {
 	return DECODE_U16(buff);

+ 3 - 0
Application/libs/shark_utils.h

@@ -20,4 +20,7 @@ u32 shark_decode_u32(const u8 *buff);
 void shark_encode_u16(u8 *buff, u16 value);
 void shark_encode_u24(u8 *buff, u32 value);
 void shark_encode_u32(u8 *buff, u32 value);
+u32 shark_iap_checksum_put(u32 crc, const u8 *buff, u32 length);
+u32 shark_iap_checksum_finish(u32 crc);
+u32 shark_iap_checksum_init(void);
 

+ 64 - 52
Project/SP700.uvoptx

@@ -165,7 +165,7 @@
         <Mm>
           <WinNumber>1</WinNumber>
           <SubType>0</SubType>
-          <ItemText>0x40003880</ItemText>
+          <ItemText>data</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
@@ -175,7 +175,7 @@
       <DebugFlag>
         <trace>0</trace>
         <periodic>1</periodic>
-        <aLwin>0</aLwin>
+        <aLwin>1</aLwin>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>
@@ -280,6 +280,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>6</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\app\iap.c</PathWithFileName>
+      <FilenameWithoutPath>iap.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -290,7 +302,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>6</FileNumber>
+      <FileNumber>7</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -302,7 +314,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>7</FileNumber>
+      <FileNumber>8</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -314,7 +326,7 @@
     </File>
     <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>
@@ -370,7 +382,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -382,7 +394,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -394,7 +406,7 @@
     </File>
     <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>
@@ -546,7 +558,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -558,7 +570,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -570,7 +582,7 @@
     </File>
     <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>
@@ -614,7 +626,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -626,7 +638,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -638,7 +650,7 @@
     </File>
     <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>
@@ -898,7 +910,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>54</FileNumber>
+      <FileNumber>55</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -910,7 +922,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>55</FileNumber>
+      <FileNumber>56</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 6 - 1
Project/SP700.uvprojx

@@ -275,7 +275,7 @@
               </OCR_RVCT3>
               <OCR_RVCT4>
                 <Type>1</Type>
-                <StartAddress>0x8002000</StartAddress>
+                <StartAddress>0x8000000</StartAddress>
                 <Size>0x10000</Size>
               </OCR_RVCT4>
               <OCR_RVCT5>
@@ -408,6 +408,11 @@
               <FileType>1</FileType>
               <FilePath>..\Application\app\nv_storage.c</FilePath>
             </File>
+            <File>
+              <FileName>iap.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\app\iap.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>