| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #include <stdio.h>
- #include <string.h>
- #include "FreeRTOS.h"
- #include "board.h"
- #include "sfud.h"
- #include "sysinfo.h"
- #include "crc.h"
- #if DEVICE_TYPE_SELECT == EMMC_FLASH
- #include "mmcsd_core.h"
- #endif
- #pragma data_alignment=4
- static SysInfo sysinfo;
- int ReadSysInfo(void)
- {
- unsigned int checksum;
- #if DEVICE_TYPE_SELECT != EMMC_FLASH
- sfud_flash *sflash = sfud_get_device(0);
- sfud_read(sflash, SYSINFO_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- #else
- emmc_read(SYSINFO_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- #endif
- checksum = xcrc32((unsigned char*)&sysinfo, sizeof(SysInfo) - 4, 0xffffffff, HARD_CALC_CRC);
- if (checksum == sysinfo.checksum)
- return 0;
- #if DEVICE_TYPE_SELECT != EMMC_FLASH
- sfud_read(sflash, SYSINFO_B_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- #else
- emmc_read(SYSINFO_B_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- #endif
- checksum = xcrc32((unsigned char*)&sysinfo, sizeof(SysInfo) - 4, 0xffffffff, HARD_CALC_CRC);
- if (checksum == sysinfo.checksum) {
- /* copy sysinfo to flash offset SYSINFO_OFFSET */
- #if DEVICE_TYPE_SELECT != EMMC_FLASH
- sfud_erase_write(sflash, SYSINFO_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- #else
- emmc_write(SYSINFO_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- #endif
- return 0;
- }
- printf("amt630hv160 %s fail, please update before retry again.\n", __func__);
- while(1);
- }
- SysInfo *GetSysInfo(void)
- {
- return &sysinfo;
- }
- void SaveSysInfo(void)
- {
- sysinfo.checksum = xcrc32((unsigned char*)&sysinfo, sizeof(SysInfo) - 4, 0xffffffff, HARD_CALC_CRC);
- #if DEVICE_TYPE_SELECT != EMMC_FLASH
- sfud_flash *sflash = sfud_get_device(0);
- if(sflash) {
- sfud_erase_write(sflash, SYSINFO_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- sfud_erase_write(sflash, SYSINFO_B_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- }
- #else
- emmc_write(SYSINFO_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- emmc_write(SYSINFO_B_OFFSET, sizeof(SysInfo), (void*)&sysinfo);
- #endif
- }
|