2025-04-26 16:03:23 +08:00

280 lines
5.1 KiB
C

/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
** Filename : eeprom_drive.h
** Project : KUWE (PM01 PEPS)
** Module :
** Processor : Freescale mc9s12g128
** Date/Time : 2015-07-28, 9:00
** Abstract :
** Contents :
** Author :
** http :
** mail :
** --------------------------------------------------------------------------
**
** --------------------------------------------------------------------------
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*****************************************************************************
* Include Files
*****************************************************************************/
#include "common_types.h"
#include "error.h"
//#include "eeprom.h"
#include "nvm.h"
#if 0
typedef struct
{
u8 write_len;
u8 read_len;
u8 write_data[20];
u8 read_data[20];
u8 result ;
}nvm_test_s;
nvm_test_s g_nvm_test={0};
#endif
/**
* @brief ram_read_bytes
* @param input none
* @param input none:
* @param output:
* @retval None
* @calls
* @calls by
* @others
*/
u8 ram_read_bytes(u32 addr,u8 *p_data,u16 len)
{
u8 l_result;
u8 *p_src;
u16 i;
if( (addr<RAM_START_ADDR) || (addr>RAM_END_ADDR) || ((addr+len)>(RAM_END_ADDR+1)) )
{
l_result = ERR_FAILED;
}
else
{
p_src = (u8 *)(addr);
for (i = 0; i < len; i++)
{
p_data[i] = p_src[i]; /*lint !e511*/
}
l_result = ERR_OK;
}
return l_result;
}
/**
* @brief ram_write_bytes
* @param input none
* @param input none:
* @param output:
* @retval None
* @calls
* @calls by
* @others 主要用于 program flag
*/
u8 ram_write_bytes(u32 addr,u8 *p_data,u16 len)
{
u8 l_result;
u8 *p_addr;
u16 i;
if( (addr<RAM_START_ADDR) || (addr>RAM_END_ADDR) || ((addr+len)>(RAM_END_ADDR+1)) )
{
l_result = ERR_FAILED;
}
else
{
p_addr = (u8 *)(addr);
for (i = 0; i < len; i++)
{
p_addr[i] = p_data[i] ; /*lint !e511*/
}
l_result = ERR_OK;
}
return l_result;
}
/**
* @brief flash_read_bytes
* @param input none
* @param input none:
* @param output:
* @retval None
* @calls
* @calls by
* @others
*/
u8 flash_read_bytes(u32 addr,u8 *p_data,u16 len)
{
u8 l_result;
u8 *p_src;
u16 i;
if( (addr<FLASH_START_ADDR) || (addr>FLASH_END_ADDR) || ((addr+len)>(FLASH_END_ADDR+1)) )
{
l_result = ERR_FAILED;
}
else
{
p_src = (u8 *)(addr);
for (i = 0; i < len; i++)
{
p_data[i] = p_src[i]; /*lint !e511*/
}
l_result = ERR_OK;
}
return l_result;
}
/**
* @brief nvm_init
* @param input none
* @param input none:
* @param output:
* @retval None
* @calls
* @calls by
* @others
*/
void nvm_init(void)
{
//u8 i;
#ifdef NVM_EEPROM_EXT_EN
eeprom_init();
#endif
//nvm_eeprom_init();
//eeprom_init();
#if 0
g_nvm_test.result = nvm_read_bytes(NVM_TYPE_EEPROM,0x100300,&g_nvm_test.read_data[0],16);
for(i=0;i<20;i++)
{
g_nvm_test.read_data[i] = 0;
g_nvm_test.write_data[i] = 0x36+i;
}
g_nvm_test.result = nvm_write_bytes(NVM_TYPE_EEPROM,0x100300,&g_nvm_test.write_data[0],16);
g_nvm_test.result = nvm_read_bytes(NVM_TYPE_EEPROM,0x100300,&g_nvm_test.read_data[0],16);
g_nvm_test.result = nvm_read_bytes(NVM_TYPE_FLASH,0xfe0000,&g_nvm_test.read_data[0],16);
g_nvm_test.result = nvm_read_bytes(NVM_TYPE_RAM,0x001000ul,&g_nvm_test.read_data[0],8);
for(i=0;i<20;i++)
{
g_nvm_test.write_data[i] = 0x36+i;
}
g_nvm_test.result = nvm_write_bytes(NVM_TYPE_RAM,0x001000ul,&g_nvm_test.write_data[0],8);
g_nvm_test.result = nvm_read_bytes(NVM_TYPE_RAM,0x001000ul,&g_nvm_test.read_data[0],8);
#endif
}
/**
* @brief nvm_task
* @param input none
* @param input none:
* @param output:
* @retval None
* @calls
* @calls by
* @others
*/
void nvm_task(void)
{
//#ifdef EEPROM_EXT_STATE_MACHILE_ENABLE
//eeprom_task(); //直接移到外面
//#endif
}
/**
* @brief nvm_read_bytes
* @param input none
* @param input none:
* @param output:
* @retval None
* @calls
* @calls by
* @others
*/
u8 nvm_read_bytes(nvm_type_e type,u32 addr, u8 *p_data, u16 num)
{
u8 l_result = ERR_FAILED;
switch(type)
{
case NVM_TYPE_EEPROM:
#ifdef NVM_EEPROM_EXT_EN
if(eeprom_state_machine_area_get_all_ready()!=EFLASH_STATE_READ)
{
l_result =eeprom_read_u8_ext(addr,p_data,num);
}
#endif
break;
case NVM_TYPE_RAM:
l_result =ram_read_bytes(addr,p_data,num);
break;
case NVM_TYPE_FLASH:
l_result =flash_read_bytes(addr,p_data,num);
break;
default:
//code
break;
}
return l_result;
}
/**
* @brief nvm_write_bytes
* @param input none
* @param input none:
* @param output:
* @retval None
* @calls
* @calls by
* @others
*/
u8 nvm_write_bytes(nvm_type_e type,u32 addr, u8 *p_data, u16 num)
{
u8 l_result = ERR_FAILED;
switch(type)
{
case NVM_TYPE_EEPROM:
#ifdef NVM_EEPROM_EXT_EN
//主要是,在上电读取时,不能写入
if(eeprom_state_machine_area_get_all_ready()!=EFLASH_STATE_READ)
{
l_result =eeprom_write_u8_ext(addr,p_data,num);
}
#endif
break;
case NVM_TYPE_RAM:
l_result =ram_write_bytes(addr,p_data,num);
break;
case NVM_TYPE_FLASH:
//l_result =flash_read_bytes(addr,p_data,num);
break;
default:
//code
break;
}
return l_result;
}