ProductPara.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. /********************************************************************************
  2. * File Name: ProductPara.c
  3. * Function Describe:
  4. * Explain:
  5. * Writer: ShiLiangWen
  6. * Date: 2015-7-6
  7. *******************************************************************************/
  8. #define THIS_FILE_ID 6
  9. //-----------------------------------------------------------------------------
  10. #include "includes.h"
  11. SUT_PRODUCT_PARA sutProductPara;
  12. SUT_DEVICE_CONFIG sutDeviceConfig;
  13. //SUT_DEVICE_INFO sutDeviceInfo;
  14. //读取指定地址的半字(16位数据)
  15. //faddr:读地址(此地址必须为2的倍数!!)
  16. //返回值:对应数据.
  17. u16 STMFLASH_ReadHalfWord(u32 faddr)
  18. {
  19. return *(vu16*)faddr;
  20. }
  21. //从指定地址开始读出指定长度的数据
  22. //ReadAddr:起始地址
  23. //pBuffer:数据指针
  24. //NumToWrite:半字(16位)数
  25. void STMFLASH_Read(u32 ReadAddr,u16 *pBuffer,u16 NumToRead)
  26. {
  27. u16 i;
  28. for(i=0;i<NumToRead;i++)
  29. {
  30. pBuffer[i]=STMFLASH_ReadHalfWord(ReadAddr);//读取2个字节.
  31. ReadAddr+=2;//偏移2个字节.
  32. }
  33. }
  34. /**********************************************************************************************************
  35. *写页数据,擦除整页1024字节,并写入Byte数据,数据可少于1024Btye,但必须是偶数。
  36. ************************************************************************************************************/
  37. void WritePageData(unsigned long WriteAddr,unsigned char *pData,unsigned short DataLen)
  38. {
  39. unsigned short i;
  40. unsigned short temp;
  41. FLASH_Status status;
  42. RunMake(THIS_FILE_ID);
  43. __disable_irq() ;
  44. if(WriteAddr<STM32_FLASH_BASE || (WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//非法地址
  45. if(WriteAddr&0x0000003ff)return;//非页首地址
  46. RunMake(THIS_FILE_ID);
  47. FLASH_Unlock(); //解锁
  48. RunMake(THIS_FILE_ID);
  49. status=FLASH_ErasePage(WriteAddr);//擦除这个扇区
  50. if(status!=FLASH_COMPLETE){
  51. RunMake(THIS_FILE_ID);
  52. __enable_irq() ;
  53. return;
  54. }
  55. RunMake(THIS_FILE_ID);
  56. //写入
  57. for(i = 0; i < DataLen; i+=2)
  58. {
  59. //数据8位融合为16位
  60. temp = (((unsigned short)pData[i+1])<<8) + ((unsigned short)pData[i]);
  61. FLASH_ProgramHalfWord((WriteAddr+i),temp);
  62. }
  63. RunMake(THIS_FILE_ID);
  64. FLASH_Lock();//上锁
  65. RunMake(THIS_FILE_ID);
  66. __enable_irq() ;
  67. }
  68. /**********************************************************************************************************
  69. ************************************************************************************************************/
  70. void ReadFlashData(unsigned long ReadAddr,unsigned char *pData,unsigned short DataLen)
  71. {
  72. int i,j;
  73. unsigned short temp;
  74. j=0;
  75. for(i=0;i<DataLen;i+=2){
  76. temp=STMFLASH_ReadHalfWord(ReadAddr+i);
  77. pData[j++]=(unsigned char)(temp&0xff);
  78. pData[j++]=(temp>>8)&0xff;
  79. }
  80. }
  81. void getNetMacByPSN(unsigned char *MAC,unsigned long PSN)
  82. {
  83. SUTDL DL;
  84. DL.Data.ulData=PSN;
  85. MAC[0]=0xba;
  86. MAC[1]=0xcd;
  87. MAC[2]=DL.Data.ucData.b4;
  88. MAC[3]=DL.Data.ucData.b3;
  89. MAC[4]=DL.Data.ucData.b2;
  90. MAC[5]=DL.Data.ucData.b1;
  91. }
  92. /********************************************************************
  93. *ReadProductParaFromFlash
  94. *********************************************************************/
  95. void ReadProductParaFromFlash(void)
  96. {
  97. unsigned char Rand;
  98. IWDG_ReloadCounter();
  99. memset((unsigned char *)&sutProductPara,0,sizeof(SUT_PRODUCT_PARA));
  100. ReadFlashData(PRODUCT_PARA_ADDR,(unsigned char *)&sutProductPara,sizeof(SUT_PRODUCT_PARA));
  101. if(PRODUCT_MARK!=sutProductPara.Mark)
  102. {
  103. SlwTrace(INF,"Reset ProductPara!\r\n");
  104. memset((unsigned char *)&sutProductPara,0,sizeof(SUT_PRODUCT_PARA));
  105. sutProductPara.Mark=PRODUCT_MARK;
  106. strcpy(sutProductPara.ProductName,PRODUCT_NAME);
  107. sutProductPara.ProductVersion=PRODUCT_VERSION;
  108. sutProductPara.PSN=0;
  109. sutProductPara.AKEY=0;
  110. //memcpy(sutProductPara.SIP,SIP,sizeof(sutProductPara.SIP));
  111. strcpy(sutProductPara.SIP,SERVER_IP);
  112. sutProductPara.Port=SERVER_PORT;
  113. strcpy(sutProductPara.Wifi_ID,WIFI_ID);
  114. strcpy(sutProductPara.Wifi_Pwd,WIFI_PWD);
  115. sutProductPara.Debug=0;
  116. getNetMacByPSN(sutProductPara.MAC,sutProductPara.PSN);
  117. WritePageData(PRODUCT_PARA_ADDR,(unsigned char *)&sutProductPara,sizeof(SUT_PRODUCT_PARA));
  118. }
  119. else if(PRODUCT_VERSION!=sutProductPara.ProductVersion){
  120. sutProductPara.ProductVersion=PRODUCT_VERSION;
  121. sutProductPara.Debug=0;
  122. WritePageData(PRODUCT_PARA_ADDR,(unsigned char *)&sutProductPara,sizeof(SUT_PRODUCT_PARA));
  123. }
  124. }
  125. /**********************************************************************************************************
  126. SaveProductParaToFlash
  127. ************************************************************************************************************/
  128. void SaveProductParaToFlash(void)
  129. {
  130. IWDG_ReloadCounter();//喂狗
  131. tsk_lock ();
  132. WritePageData(PRODUCT_PARA_ADDR,(unsigned char *)&sutProductPara,sizeof(SUT_PRODUCT_PARA));
  133. tsk_unlock ();
  134. }
  135. /********************************************************************
  136. *ReadDeviceConfigFromFlash
  137. *********************************************************************/
  138. void ReadDeviceConfigFromFlash(void)
  139. {
  140. if(DEVICE_CONFIG_ADDR<STM32_FLASH_BASE){//存放在外部FLASH
  141. sFlash_Read((unsigned char *)&sutDeviceConfig,DEVICE_CONFIG_ADDR,sizeof(SUT_DEVICE_CONFIG));
  142. }else{//存放在MCU FLASH内
  143. ReadFlashData(DEVICE_CONFIG_ADDR,(unsigned char *)&sutDeviceConfig,sizeof(SUT_DEVICE_CONFIG));
  144. }
  145. if(sutDeviceConfig.Mark!=DEVICE_CONFIG_MARK || sutDeviceConfig.NetMode>4){
  146. SlwTrace(INF,"Reset DeviceConfig!\r\n");
  147. memset((unsigned char *)&sutDeviceConfig,0,sizeof(SUT_DEVICE_CONFIG));
  148. sutDeviceConfig.Mark=DEVICE_CONFIG_MARK;
  149. sutDeviceConfig.AppExAddr=EXFLASH_FILE_DATA_ADDR;
  150. sutDeviceConfig.NetMode=DEVICE_NET_MODE;
  151. SaveDeviceConfigToFlash();
  152. }
  153. }
  154. /********************************************************************
  155. *SaveDeviceConfigToFlash
  156. *********************************************************************/
  157. void SaveDeviceConfigToFlash(void)
  158. {
  159. if(DEVICE_CONFIG_ADDR<STM32_FLASH_BASE){//存放在外部FLASH
  160. sFlash_Write((unsigned char *)&sutDeviceConfig,DEVICE_CONFIG_ADDR,sizeof(SUT_DEVICE_CONFIG));
  161. }else{//存放在MCU FLASH内
  162. WritePageData(DEVICE_CONFIG_ADDR,(unsigned char *)&sutDeviceConfig,sizeof(SUT_DEVICE_CONFIG));
  163. }
  164. }
  165. /************************************file begin*******************************/