H2S stm32F407ZET stm32F407ZGT
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
H2S/backup/obolete/eeprom_port.c

111 lines
2.7 KiB

2 years ago
#include "eeprom.h"
#include "main.h"
#include "config.h"
#include "elog.h"
extern int Eeprom_Port();
extern void Eeprom_Task();
extern int Config_Read_Eeprom( uint8_t numSeconds);
extern int Config_Write_Eeprom( );
osThreadId_t eeprom_taskHandle;
const osThreadAttr_t eeprom_task_attributes = {
.name = "eeprom_task",
.stack_size = 256,
.priority = (osPriority_t) osPriorityLow,
};
/* 1: 8bit 2: 16bit I2C_MEMADD_SIZE_8BIT I2C_MEMADD_SIZE_16BIT */
enum EEPROM_MODEL{
AT24C01 =127,
AT24C02 =255,
AT24C04 =511,
AT24C08 =1023,
AT24C16 =2047,
AT24C32 =4095,
AT24C64 =8191,
AT24C128 =16383,
AT24C256 =32767,
};
eeprom_t *eeprom;
extern I2C_HandleTypeDef hi2c1;
I2C_HandleTypeDef *Eeprom_I2C = &hi2c1;
extern struct config config;
extern int Config_Read_Eeprom( uint8_t numSeconds);
uint8_t eeprom_buf;
int Eeprom_Port()
{
eeprom = Eeprom_init();
Eeprom_SET_I2C( eeprom, &hi2c1 );
Eeprom_SET_Device_Model( eeprom, AT24C02 );
Eeprom_SET_Device_Addr( eeprom, 0xA0 );
if ( eeprom->model < AT24C16 )
Eeprom_SET_Mem_Addr_Type( eeprom, I2C_MEMADD_SIZE_8BIT);
else
Eeprom_SET_Mem_Addr_Type( eeprom, I2C_MEMADD_SIZE_16BIT);
eeprom->stat = HAL_I2C_STATE_READY;
eeprom_taskHandle = osThreadNew(Eeprom_Task, NULL, &eeprom_task_attributes);
// if (Config_Read_Eeprom( 8) == 0)
// {
// HAL_GPIO_TogglePin(RED_GPIO_Port,RED_Pin);
// // log_i( "ok>>>>>>>>");
// }
return 0;
}
void Eeprom_Task()
{
for ( ; ; )
{
Eeprom_send( eeprom );
}
}
int Config_Read_Eeprom( uint8_t numSeconds)
{
eeprom->stat= HAL_I2C_STATE_BUSY;
eeprom->time_base = osKernelGetTickCount();
uint8_t aa = Eeprom_Read_Multi_Byte_IT( eeprom, 0, (uint8_t *)&config, sizeof(config) );
// uint8_t aa = HAL_I2C_Mem_Read_IT( eeprom->i2c, eeprom->dev_addr, 0, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&config, sizeof(config) );
// uint8_t aa = HAL_I2C_Mem_Read_IT(eeprom->i2c, eeprom->dev_addr, 0, I2C_MEMADD_SIZE_8BIT, data, 1 );
while(HAL_I2C_GetState(eeprom->i2c)!=HAL_I2C_STATE_READY ){
if (( osKernelGetTickCount() - eeprom->time_base) >numSeconds*1000)
{
return -1;
}
}
log_i("eeprom init ok.");
if(config_check()==0){
return 0;
}
config_reset();
return 0;
}
/* config 内容写道eeprom ,一个一个依据时间限写入,启用任务*/
int Config_Write_Eeprom( )
{
// Eeprom_Port_Init();
Eeprom_Write_Multi_Byte_IT( eeprom, 0, (uint8_t *)&config, sizeof(config) );
for ( ; ; )
{
if (eeprom->size > 0)
Eeprom_send_callback( eeprom );
else
return -1;
}
return 0;
}