eeprom.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. /*
  2. * eeprom.c
  3. *
  4. * Created on: 2020. 4. 22.
  5. * Author: parkyj
  6. */
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include "main.h"
  10. #include "eeprom.h"
  11. #include "Bluecell_operate.h"
  12. #include "stm32f1xx_hal.h"
  13. #include "stm32f1xx_hal_gpio.h"
  14. /* Includes ------------------------------------------------------------------*/
  15. HAL_StatusTypeDef EEPROM_M24C08_ByteRead(uint16_t devid,uint16_t Address,uint8_t* data,uint8_t size);
  16. extern BLUESTATUS_st bluecell_Currdatastatus;
  17. void EEPROM_M24C08_Init(void){
  18. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_WINDOW_STATUS_ADDRESDS,&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st) );
  19. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_BASE ,&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  20. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_DL1_TABLE_ADDRESDS,&Att_DL2.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  21. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_DL2_TABLE_ADDRESDS,&Att_DL3.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  22. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_DL3_TABLE_ADDRESDS,&Att_DL4.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  23. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_DL4_TABLE_ADDRESDS,&Att_UL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  24. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_UL1_TABLE_ADDRESDS,&Att_UL2.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  25. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_UL2_TABLE_ADDRESDS,&Att_UL3.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  26. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_UL3_TABLE_ADDRESDS,&Att_UL4.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  27. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_UL4_TABLE_ADDRESDS,&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  28. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_DET_DL1_TABLE_ADDRESDS,&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  29. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_DET_DL2_TABLE_ADDRESDS,&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  30. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_DET_DL3_TABLE_ADDRESDS,&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  31. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_DET_DL4_TABLE_ADDRESDS,&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  32. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_DET_UL1_TABLE_ADDRESDS,&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  33. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_DET_UL2_TABLE_ADDRESDS,&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  34. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_DET_UL3_TABLE_ADDRESDS,&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  35. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_DET_UL4_TABLE_ADDRESDS,&Temp_DL1.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  36. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_TEMP_DL1_TABLE_ADDRESDS,&Temp_DL2.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  37. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_TEMP_DL2_TABLE_ADDRESDS,&Temp_DL3.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  38. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_TEMP_DL3_TABLE_ADDRESDS,&Temp_DL4.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  39. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_TEMP_DL4_TABLE_ADDRESDS,&Temp_UL1.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  40. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_TEMP_UL1_TABLE_ADDRESDS,&Temp_UL2.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  41. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_TEMP_UL2_TABLE_ADDRESDS,&Temp_UL3.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  42. EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_TEMP_UL3_TABLE_ADDRESDS,&Temp_UL4.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  43. #if 0 // PYJ.2020.06.19_BEGIN --
  44. Att_DL1.Table_Length = 64;
  45. Att_DL2.Table_Length = 64;
  46. Att_DL3.Table_Length = 64;
  47. Att_DL4.Table_Length = 64;
  48. Att_UL1.Table_Length = 64;
  49. Att_UL2.Table_Length = 64;
  50. Att_UL3.Table_Length = 64;
  51. Att_UL4.Table_Length = 64;
  52. Det_DL1.Table_Length = 31;
  53. Det_DL2.Table_Length = 31;
  54. Det_DL3.Table_Length = 31;
  55. Det_DL4.Table_Length = 31;
  56. Det_UL1.Table_Length = 31;
  57. Det_UL2.Table_Length = 31;
  58. Det_UL3.Table_Length = 31;
  59. Det_UL4.Table_Length = 31;
  60. Temp_DL1.Table_Length = 10;
  61. Temp_DL2.Table_Length = 10;
  62. Temp_DL3.Table_Length = 10;
  63. Temp_DL4.Table_Length = 10;
  64. Temp_UL1.Table_Length = 10;
  65. Temp_UL2.Table_Length = 10;
  66. Temp_UL3.Table_Length = 10;
  67. Temp_UL4.Table_Length = 10;
  68. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_ATT_BASE ,&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  69. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_ATT_DL1_TABLE_ADDRESDS,&Att_DL2.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  70. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_ATT_DL2_TABLE_ADDRESDS,&Att_DL3.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  71. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_ATT_DL3_TABLE_ADDRESDS,&Att_DL4.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  72. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_ATT_DL4_TABLE_ADDRESDS,&Att_UL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  73. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_ATT_UL1_TABLE_ADDRESDS,&Att_UL2.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  74. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_ATT_UL2_TABLE_ADDRESDS,&Att_UL3.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  75. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_ATT_UL3_TABLE_ADDRESDS,&Att_UL4.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  76. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_ATT_UL4_TABLE_ADDRESDS,&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  77. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_DET_DL1_TABLE_ADDRESDS,&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  78. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_DET_DL2_TABLE_ADDRESDS,&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  79. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_DET_DL3_TABLE_ADDRESDS,&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  80. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_DET_DL4_TABLE_ADDRESDS,&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  81. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_DET_UL1_TABLE_ADDRESDS,&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  82. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_DET_UL2_TABLE_ADDRESDS,&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  83. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_DET_UL3_TABLE_ADDRESDS,&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  84. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_DET_UL4_TABLE_ADDRESDS,&Temp_DL1.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  85. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_TEMP_DL1_TABLE_ADDRESDS,&Temp_DL2.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  86. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_TEMP_DL2_TABLE_ADDRESDS,&Temp_DL3.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  87. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_TEMP_DL3_TABLE_ADDRESDS,&Temp_DL4.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  88. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_TEMP_DL4_TABLE_ADDRESDS,&Temp_UL1.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  89. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_TEMP_UL1_TABLE_ADDRESDS,&Temp_UL2.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  90. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_TEMP_UL2_TABLE_ADDRESDS,&Temp_UL3.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  91. EEPROM_M24C08_write(EEPROM_M24C08_ID,EEPROM_TEMP_UL3_TABLE_ADDRESDS,&Temp_UL4.Table_1_Temp,sizeof(TEMP_TABLE_st) );
  92. #endif // PYJ.2020.06.19_END --
  93. bluecell_Currdatastatus.ALARM_TEMP_HIGH = 0;
  94. bluecell_Currdatastatus.ALARM_DLI_Level = 0;
  95. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN = 0;
  96. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm = 0;
  97. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm = 0;
  98. bluecell_Currdatastatus.ALARM_ULO_Level = 0;
  99. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN = 0;
  100. // printf("bluecell_Currdatastatus.ATT_DL1_H : %x\r\n",bluecell_Currdatastatus.ATT_DL1_H);
  101. // printf("bluecell_Currdatastatus.ATT_DL1_L : %x\r\n",bluecell_Currdatastatus.ATT_DL1_L);
  102. //
  103. printf("EEPROM INIT COMPLETE\r\n");
  104. }
  105. #if 0 // PYJ.2020.04.23_BEGIN --
  106. void eepromtest(){
  107. memset(&eepdata[0],0x33,100);
  108. for(int i = 0; i < 100; i ++ ){
  109. printf("data[%d] : %x \r\n",i,eepdata[i]);
  110. EEPROM_M24C08_Bytewrite(EEPROM_M24C08_ID,EEPROM_ATT_BASE + i,&eepdata[i],1);
  111. }
  112. for(int i = 0; i < 100; i ++ ){
  113. EEPROM_M24C08_ByteRead(EEPROM_M24C08_ID,EEPROM_ATT_BASE + i,&eepdata[i],1);
  114. printf("data[%d] : %x \r\n",i,eepdata[i]);
  115. }
  116. // EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_BASE,&eepdata[0],100);
  117. // for(int i = 0; i < 100; i ++ ){
  118. // printf("data[%d] : %x \r\n",i,eepdata[i]);
  119. // }
  120. }
  121. #endif // PYJ.2020.04.23_END --
  122. #define MAXEEPROM_LENG 32
  123. HAL_StatusTypeDef EEPROM_M24C08_Read(uint8_t devid,uint16_t Address,uint8_t* data,uint16_t size){
  124. HAL_StatusTypeDef ret = HAL_ERROR;
  125. // uint16_t sizecnt = 0,
  126. //uint16_t sizeremain = 0;
  127. // uint16_t addrees_inc = 0;
  128. // ret = HAL_I2C_Mem_Read(&hi2c2, devid | ((Address & 0x0300) >> 7),((Address )), I2C_MEMADD_SIZE_8BIT, &data[0], size, 1024);
  129. ret = HAL_I2C_Mem_Read(&hi2c2, devid ,((Address )), I2C_MEMADD_SIZE_16BIT, &data[0], size, 1024);
  130. // EEPROM24XX_Load( Address,data, size);
  131. if(ret == HAL_ERROR)
  132. printf("Write ERR\r\n");
  133. else
  134. HAL_Delay(20);
  135. return ret;
  136. }
  137. HAL_StatusTypeDef EEPROM_M24C08_write(uint8_t devid,uint16_t Address,uint8_t* data,uint16_t size){
  138. HAL_StatusTypeDef ret = HAL_ERROR;
  139. uint8_t sizecnt = 0,sizeremain = 0;
  140. uint16_t addrees_inc = 0;
  141. sizecnt = size /MAXEEPROM_LENG;
  142. sizeremain = size % MAXEEPROM_LENG;
  143. addrees_inc = 0;
  144. #if 0 // PYJ.2020.04.25_BEGIN --
  145. for(int i = 0 ; i <sizecnt; i++ ){
  146. addrees_inc = i * 16;
  147. ret = HAL_I2C_Mem_Write(&hi2c2, devid | (((Address + addrees_inc) & 0x0300) >> 7),((Address + addrees_inc)) , I2C_MEMADD_SIZE_8BIT, &data[addrees_inc], 16, 1024);
  148. if(ret == HAL_ERROR)
  149. printf("Write ERR\r\n");
  150. else
  151. HAL_Delay(20);
  152. }
  153. addrees_inc += 16;
  154. ret = HAL_I2C_Mem_Write(&hi2c2, devid | (((Address + addrees_inc) & 0x0300) >> 7),((Address + addrees_inc)) , I2C_MEMADD_SIZE_8BIT, &data[addrees_inc], sizeremain, 1024);
  155. // EEPROM24XX_Save( Address,data, size);
  156. if(ret == HAL_ERROR)
  157. printf("Write ERR\r\n");
  158. else
  159. HAL_Delay(20);
  160. #else
  161. // printf("size : %d sizecnt = %d sizeremain : %d\r\n",size,sizecnt,sizeremain);
  162. if(sizecnt > 0){
  163. for(int i = 0 ; i < sizecnt; i++ ){
  164. addrees_inc = i * MAXEEPROM_LENG;
  165. ret = HAL_I2C_Mem_Write(&hi2c2, devid ,((Address + addrees_inc) & 0xFFFF) , I2C_MEMADD_SIZE_16BIT, &data[addrees_inc], MAXEEPROM_LENG, 1024);
  166. if(ret == HAL_ERROR)
  167. printf("Write ERR\r\n");
  168. else
  169. HAL_Delay(20);
  170. }
  171. addrees_inc += MAXEEPROM_LENG;
  172. }
  173. // printf("Remain Data Index : %d \r\n",sizeremain);
  174. if(sizeremain > 0){
  175. // printf("Remain Data Write Start ");
  176. for(int i = 0; i < sizeremain; i++){
  177. ret = HAL_I2C_Mem_Write(&hi2c2, devid ,((Address + addrees_inc + i)& 0xFFFF) , I2C_MEMADD_SIZE_16BIT, &data[addrees_inc + i], 1, 0xFFFF);
  178. // EEPROM24XX_Save( Address,data, size);
  179. if(ret == HAL_ERROR)
  180. printf("Write ERR\r\n");
  181. else
  182. HAL_Delay(20);
  183. }
  184. }
  185. #endif // PYJ.2020.04.25_END --
  186. return ret;
  187. }
  188. HAL_StatusTypeDef EEPROM_M24C08_Zerowrite(uint8_t devid,uint16_t Address){
  189. HAL_StatusTypeDef ret = HAL_ERROR;
  190. // uint8_t sizeremain = 0;
  191. uint16_t addrees_inc = 0;
  192. addrees_inc = 0;
  193. uint8_t data[4096] = {0,};
  194. for(int i = 0 ; i < 128; i++ ){
  195. addrees_inc = i * MAXEEPROM_LENG;
  196. ret = HAL_I2C_Mem_Write(&hi2c2, devid ,((Address + addrees_inc) & 0xFFFF) , I2C_MEMADD_SIZE_16BIT, &data[0], MAXEEPROM_LENG, 0xFFFF);
  197. if(ret == HAL_ERROR)
  198. printf("Write ERR\r\n");
  199. else
  200. HAL_Delay(20);
  201. }
  202. return ret;
  203. }