Przeglądaj źródła

add fmc flash

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 5 lat temu
rodzic
commit
5b66a5eeb1

+ 4 - 1
Application/app/sox/measure.c

@@ -6,6 +6,7 @@
 #include "bsp/gpio.h"
 #include "bsp/temp_lookup_tab.h"
 #include "bsp/shark_bsp.h"
+#include "libs/logger.h"
 /* measure the temp & current & voltage for battery pack by using
  * ms5238 & cs1180(only used when bms is in small current loading)
 */
@@ -94,6 +95,7 @@ void measure_adc_init(void){
 	gd32_adc_init();
 	current_calibrate();
 	cs1180_adc_init();
+	set_log_level(MOD_SYSTEM, L_debug);
 }
 
 /* get battery pack's current (mA) */
@@ -110,7 +112,7 @@ static float get_pack_current_by_gd(void){
 	}
 	float cali_adc = ML5238_V_RSENSER(adc, vim0_now, imon_gain_now);
 
-	return (cali_adc / max_gd_adc) * v_gd_ref / r_sense * 1000;
+	return (int)((cali_adc / max_gd_adc) * v_gd_ref / r_sense * 1000);
 }
 
 static float get_pack_current_by_cs1180(void){
@@ -128,6 +130,7 @@ float get_pack_current(void){
 	if (abs(current) >= CS1180_MAX_CURRENT){
 		return get_pack_current_by_gd();
 	}
+	sys_debug("%f, %f\n", current, get_pack_current_by_gd());
 	return current;
 }
 

+ 1 - 1
Application/bsp/cs1180.c

@@ -225,7 +225,7 @@ float cs1180_adc_sample(void)
 	}else {
 		a = a&0x7FFFF;
 	}
-	return ((float)a) / _cs1180_gain;
+	return (int)(((float)a / _cs1180_gain) * 0.9f);
 }
 
 

+ 139 - 0
Application/bsp/fmc_flash.c

@@ -0,0 +1,139 @@
+#include "gd32f3x0_libopt.h"
+
+#if defined (GD32F30X_HD) || defined (GD32F30X_XD) || defined (GD32F30X_CL)
+#define FMC_FLAG_PGERR  FMC_FLAG_BANK0_PGERR
+#define FMC_FLAG_PGAERR  FMC_FLAG_BANK0_PGERR
+#define FMC_FLAG_WPERR  FMC_FLAG_BANK0_WPERR
+#define FMC_FLAG_END  FMC_FLAG_BANK0_END
+#endif
+
+#define one_page_size 2048
+#define sn_page_index 3
+#define data_page_index 2
+#define magic_page_index 1 //must is the last page in 256K eara
+static void _fmc_write_data(uint32_t addr, uint8_t *data, int len);
+static void _fmc_read_data(uint32_t addr, uint8_t *data, int len);
+static uint32_t _sn_addr(void);
+static uint32_t _data_addr(void);
+static uint32_t _maigc_addr(void);
+
+void fmc_write_sn(uint8_t *sn, int len){
+	_fmc_write_data(_sn_addr(), sn, len);
+}
+
+void fmc_read_sn(uint8_t *sn, int len){
+	_fmc_read_data(_sn_addr(), sn, len);
+}
+
+void fmc_write_data(uint8_t *data, int len){
+	_fmc_write_data(_data_addr(), data, len);
+}
+
+void fmc_read_data(uint8_t *data, int len){
+	_fmc_read_data(_data_addr(), data, len);
+}
+
+static __inline__ void _fmc_flag_clear(void) {
+	fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+}
+
+void fmc_write_magic(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 fmc_read_magic(void){
+	uint32_t magic = 0x5555aaaa;
+	_fmc_read_data(_maigc_addr(), (uint8_t *)&magic, sizeof(magic));
+	return magic;
+}
+
+//if flash is lager than 256k, we just use the 256k
+static uint32_t __inline__ _flash_capatity(void){
+	uint32_t capacity;
+	capacity = (REG32(0x1FFFF7E0) & 0xFFFF) << 10;
+	if (capacity > (256 * 1024)){
+		capacity =  256 * 1024;
+	}
+	return capacity;
+}
+
+static uint32_t _sn_addr(void){
+	return 0x08000000 + (_flash_capatity() - one_page_size * sn_page_index);
+}
+
+static uint32_t _data_addr(void){
+	return 0x08000000 + (_flash_capatity() - one_page_size * data_page_index);
+}
+
+static uint32_t _maigc_addr(void){
+	return 0x08000000 + (_flash_capatity() - one_page_size * magic_page_index);
+}
+
+static void _fmc_read_data(uint32_t addr, uint8_t *data, int len){
+	int i = 0;
+	for (i = 0; i < len; i++){
+		data[i] = REG8(addr + i);
+	}
+}
+
+static void _fmc_write_data(uint32_t addr, uint8_t *data, int len){
+	fmc_unlock();
+	fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+	fmc_page_erase(addr);
+	int total_words = len>>2;
+	uint32_t *p_u32_data = (uint32_t *)data;
+	int i;
+	for (i = 0; i < total_words; i++){
+		fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+		fmc_word_program(addr + i * 4, p_u32_data[i]);
+	}
+	data += i * 4;
+	addr += i * 4;
+	total_words = len - total_words * 4;
+	if (total_words > 0){
+		if (total_words == 1){
+			uint16_t half = *data;
+			fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+			fmc_halfword_program(addr, half);
+		}else if (total_words == 2){
+			uint16_t half = *((uint16_t *)data);
+			fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+			fmc_halfword_program(addr, half);
+		}else {
+			uint32_t words = *((uint32_t *)data);
+			fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+			fmc_word_program(addr, words);
+		}
+	}
+	fmc_lock();
+}
+

+ 14 - 0
Application/bsp/fmc_flash.h

@@ -0,0 +1,14 @@
+#ifndef _FMC_FLASH_H__
+#define _FMC_FLASH_H__
+#include <stdint.h>
+
+void fmc_write_sn(uint8_t *sn, int len);
+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);
+uint32_t fmc_read_magic(void);
+
+#endif /* _FMC_FLASH_H__ */
+

+ 45 - 87
Project/SP700.uvoptx

@@ -148,71 +148,17 @@
           <Name>UL2CM3(-S0 -C0 -P0 )  -FN1 -FC1000 -FD20000000 -FF0GD32F3x0 -FL010000 -FS08000000 -FP0($$Device:GD32F330C8$Flash\GD32F3x0.FLM)</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint>
-        <Bp>
-          <Number>0</Number>
-          <Type>0</Type>
-          <LineNumber>30</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>134231350</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>1</BreakIfRCount>
-          <Filename>..\Application\bsp\ml5238.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression>\\SP700\../Application/bsp/ml5238.c\30</Expression>
-        </Bp>
-        <Bp>
-          <Number>1</Number>
-          <Type>0</Type>
-          <LineNumber>202</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>0</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>0</BreakIfRCount>
-          <Filename>..\Application\app\sox\health.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression></Expression>
-        </Bp>
-        <Bp>
-          <Number>2</Number>
-          <Type>0</Type>
-          <LineNumber>203</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>0</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>0</BreakIfRCount>
-          <Filename>..\Application\app\sox\health.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression></Expression>
-        </Bp>
-      </Breakpoint>
+      <Breakpoint/>
       <WatchWindow1>
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>_bms_state,0x0A</ItemText>
+          <ItemText>_measure_value,0x0A</ItemText>
         </Ww>
         <Ww>
           <count>1</count>
           <WinNumber>1</WinNumber>
-          <ItemText>_measure_value</ItemText>
-        </Ww>
-        <Ww>
-          <count>2</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>_health</ItemText>
+          <ItemText>data</ItemText>
         </Ww>
       </WatchWindow1>
       <MemoryWindow1>
@@ -578,6 +524,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>25</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\bsp\fmc_flash.c</PathWithFileName>
+      <FilenameWithoutPath>fmc_flash.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -588,7 +546,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -600,7 +558,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -612,7 +570,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -624,7 +582,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -636,7 +594,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -656,7 +614,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -668,7 +626,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -680,7 +638,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -692,7 +650,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -704,7 +662,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -716,7 +674,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -728,7 +686,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -740,7 +698,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -752,7 +710,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -764,7 +722,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -776,7 +734,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -788,7 +746,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -800,7 +758,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -812,7 +770,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -824,7 +782,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -836,7 +794,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -848,7 +806,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -860,7 +818,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -872,7 +830,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -884,7 +842,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -896,7 +854,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>50</FileNumber>
+      <FileNumber>51</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -908,7 +866,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>51</FileNumber>
+      <FileNumber>52</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -920,7 +878,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>52</FileNumber>
+      <FileNumber>53</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -940,7 +898,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>53</FileNumber>
+      <FileNumber>54</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -952,7 +910,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>54</FileNumber>
+      <FileNumber>55</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 5 - 0
Project/SP700.uvprojx

@@ -513,6 +513,11 @@
               <FileType>1</FileType>
               <FilePath>..\Application\bsp\shark_rtc.c</FilePath>
             </File>
+            <File>
+              <FileName>fmc_flash.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\bsp\fmc_flash.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>