bsp.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. #include "bsp.h"
  2. #include "includes.h"
  3. MqttIdPort mqttidport;
  4. //////////////////////////////////////////////////////////////////////////////////////
  5. sequeue_t *uart0_rx_sq;
  6. sequeue_t *uart3_rx_sq;
  7. FirmwareMsg g_firmwareMsg; // 网关 采集器固件信息存储
  8. /*!
  9. * \brief 创建串口接收队列
  10. * \param 无
  11. */
  12. void creat_uart_queue(void)
  13. {
  14. uart0_rx_sq = Create_Empty_Sequeue(5,256);
  15. // if(uart0_rx_sq==NULL)
  16. // printf("error,usart0_rx_sq\r\n");
  17. // else
  18. // printf("success,usart0_rx_sq\r\n");
  19. uart3_rx_sq = Create_Empty_Sequeue(5,256);
  20. // if(uart3_rx_sq==NULL)
  21. // printf("error,usart3_rx_sq\r\n");
  22. // else
  23. // printf("success,usart3_rx_sq\r\n");
  24. }
  25. //读取UUID
  26. void get_mcu_uuid(void)
  27. {
  28. uint32_t mcuID[3];
  29. mcuID[0] = *(volatile uint32_t*)(GD32F10X_ID_ADDR);
  30. mcuID[1] = *(volatile uint32_t*)(GD32F10X_ID_ADDR+4);
  31. mcuID[2] = *(volatile uint32_t*)(GD32F10X_ID_ADDR+8);
  32. memcpy(g_firmwareMsg.gatewayMsg.Uuid,(uint8_t *)mcuID,12);
  33. }
  34. //读mcu的类型
  35. void get_mcu_TypeIdcode(void)
  36. {
  37. uint32_t mcutypeID=0;
  38. mcutypeID = *(volatile uint32_t*)(GD32F10X_TYPE_ADDR);
  39. g_firmwareMsg.gatewayMsg.devicTypeID = (uint16_t)(mcutypeID&0xFFFF);
  40. }
  41. /*------------------------------------------------
  42. * 清空EEPROM的存储空间
  43. * ------------------------------------------------*/
  44. void fram_init(void)
  45. {
  46. uint8_t buff[64] = {0};
  47. int i = 0;
  48. memset(buff,0,sizeof(buff));
  49. for(i=0;i<256;i++){
  50. AT24CXX_Write(i*64,buff,sizeof(buff));
  51. fwdgt_counter_reload();//喂狗
  52. }
  53. // fram_write_eeprom_powerUpFlag();
  54. }
  55. /*----------------------------------------------
  56. * 是否第一次上电 的写入
  57. * ---------------------------------------------*/
  58. void fram_write_eeprom_powerUpFlag(void)
  59. {
  60. uint16_t version = 0x5A5A;
  61. AT24CXX_Write(FRAM_FIRST_POWER_ON,(uint8_t*)&version,sizeof(uint16_t));
  62. }
  63. /*----------------------------------------------
  64. * 是否第一次上电 读取
  65. * ---------------------------------------------*/
  66. uint16_t fram_read_eeprom_powerUpFlag(void)
  67. {
  68. uint16_t version = 0;
  69. AT24CXX_Read(FRAM_FIRST_POWER_ON,(uint8_t*)&version,sizeof(uint16_t));
  70. return version;
  71. }
  72. /*----------------------------------------------
  73. * EEPROM 版本号的写入
  74. * ---------------------------------------------*/
  75. void fram_write_eeprom_version(void)
  76. {
  77. uint8_t version = 0x01;
  78. AT24CXX_Write(FRAM_VERSION,&version,1);
  79. }
  80. /*----------------------------------------------
  81. * EEPROM 版本号的读取
  82. * ---------------------------------------------*/
  83. uint8_t fram_read_eeprom_version(void)
  84. {
  85. uint8_t version = 0;
  86. AT24CXX_Read(FRAM_VERSION,&version,1);
  87. return version;
  88. }
  89. /*-------------------------------------------------
  90. * mqqtt ip prot的初始化
  91. * ----------------------------------------------------*/
  92. void fram_init_mqtt_msg(void)
  93. {
  94. MqttIdPort *mqttMsg = &(g_firmwareMsg.mqttidport);
  95. mqttMsg->flag = 0;
  96. memset(mqttMsg,0,sizeof(MqttIdPort));
  97. AT24CXX_Write(FRAM_MQTT_MSG,(uint8_t*)mqttMsg,sizeof(MqttIdPort));
  98. }
  99. /*-------------------------------------------------
  100. * mqqtt ip prot的写 入
  101. * ----------------------------------------------------*/
  102. void fram_write_mqtt_msg(void)
  103. {
  104. MqttIdPort *mqttMsg = &(g_firmwareMsg.mqttidport);
  105. AT24CXX_Write(FRAM_MQTT_MSG,(uint8_t*)mqttMsg,sizeof(MqttIdPort));
  106. }
  107. /*-------------------------------------------------
  108. * mqqtt ip prot的读取
  109. * ----------------------------------------------------*/
  110. void fram_read_mqtt_msg(void)
  111. {
  112. MqttIdPort *mqttMsg = &(g_firmwareMsg.mqttidport);
  113. memset(&(g_firmwareMsg.mqttidport),0,sizeof(MqttIdPort));
  114. AT24CXX_Read(FRAM_MQTT_MSG,(uint8_t*)mqttMsg,sizeof(MqttIdPort));
  115. mqttMsg->port[5] = 0;
  116. mqttMsg->ip[31] = 0;
  117. mqttMsg->admin[7] = 0;
  118. mqttMsg->password[15] = 0;
  119. }
  120. /*-----------------------------------------------
  121. * 网关的硬件信息读取
  122. * -----------------------------------------------*/
  123. void fram_read_hardware_msg(void)
  124. {
  125. GateHareWareMsg *msg = &(g_firmwareMsg.gatewayMsg.hardwareMsg);
  126. memset(&(g_firmwareMsg.gatewayMsg.hardwareMsg),0,sizeof(GateHareWareMsg));
  127. AT24CXX_Read(DEVICE_PUBLIC_INFO_ADDR,(uint8_t*)msg,sizeof(GateHareWareMsg));
  128. }
  129. /*-----------------------------------------------
  130. * 网关的硬件信息写入
  131. * -----------------------------------------------*/
  132. void fram_write_hardware_msg(void)
  133. {
  134. GateHareWareMsg *msg = &(g_firmwareMsg.gatewayMsg.hardwareMsg);
  135. AT24CXX_Write(DEVICE_PUBLIC_INFO_ADDR,(uint8_t*)msg,sizeof(GateHareWareMsg));
  136. }
  137. /*------------------------------------------------------
  138. * 产测软件版本的信息初始化
  139. * 固件信息格式 :DDDDFNNN:
  140. * DDDD(设备类型):0x0101:网关A 0x0102:网关B 0x0201:采集器1 0x0202:采集器2
  141. * F(固件类型):0x01:bootloader版本 0x02:pt版本 0x03:app版本 0xF:合成版本
  142. * NNN:0x001 表示第1个版本 0x002:表示第2个版本
  143. * -----------------------------------------------------*/
  144. void fram_init_version(void)
  145. {
  146. fram_read_version();
  147. if(SOFTWARE_VERSION_PT !=g_firmwareMsg.gatewayMsg.verMsg.pt_version){
  148. g_firmwareMsg.gatewayMsg.verMsg.pt_version = SOFTWARE_VERSION_PT;
  149. fram_write_version();
  150. }
  151. }
  152. /*----------------------------------------------------
  153. * 网关 版本信息的读取
  154. * ---------------------------------------------------*/
  155. void fram_write_version(void)
  156. {
  157. GateVersionMsg *msg = NULL;
  158. msg = &(g_firmwareMsg.gatewayMsg.verMsg);
  159. AT24CXX_Write(DEVICE_VERSION_INFO_ADDR,(uint8_t*)msg,sizeof(GateVersionMsg));
  160. }
  161. /*----------------------------------------------------
  162. * 网关 版本信息的读取
  163. * ---------------------------------------------------*/
  164. void fram_read_version(void)
  165. {
  166. GateVersionMsg *msg = NULL;
  167. memset(&(g_firmwareMsg.gatewayMsg.verMsg),0,sizeof(GateVersionMsg));
  168. msg = &(g_firmwareMsg.gatewayMsg.verMsg);
  169. AT24CXX_Read(DEVICE_VERSION_INFO_ADDR,(uint8_t*)msg,sizeof(GateVersionMsg));
  170. // fram_init_version();
  171. }
  172. //////////////////////////////////////////////////////////////////////////////////////