C 在数据闪存中实现状态机读写数据
我正在尝试实现一个状态机来读取和写入数据到128K x 8数据闪存。 我计划在状态机中具有以下状态:-C 在数据闪存中实现状态机读写数据,c,state-machine,C,State Machine,我正在尝试实现一个状态机来读取和写入数据到128K x 8数据闪存。 我计划在状态机中具有以下状态:- typedef enum DATA_FLASH_TASK_LIST { IDLE = 0; INIT, READ, WRITE, VERIFY } 状态机功能如下所示:- //dataflash.c文件 //用于跟踪数据闪存任务的全局变量 DATA_FLASH_TASK_LIST Current_DataFlash_Task = IDLE; void DataFlashStateMachi
typedef enum DATA_FLASH_TASK_LIST
{
IDLE = 0;
INIT,
READ,
WRITE,
VERIFY
}
状态机功能如下所示:-
//dataflash.c文件
//用于跟踪数据闪存任务的全局变量
DATA_FLASH_TASK_LIST Current_DataFlash_Task = IDLE;
void DataFlashStateMachine()
{
switch(Current_DataFlash_Task)
{
case IDLE:
{
//Wait for other tasks
Current_DataFlash_Task = IDLE;
}
break;
case INIT:
{
//Erase and initialize the data flash
Current_DataFlash_Task = IDLE;
}
break;
case READ:
{
//Call a function to read contents of data flash
//Address and length of data will be updated in global variables
//Read_Data(data, address, length);
Current_DataFlash_Task = VERIFY;
}
break;
case WRITE:
{
//Call a function to write contents to data flash
//Write_Data(data, address, length);
Current_DataFlash_Task = VERIFY;
}
break;
case VERIFY:
{
//Call a function to compare and verify the read/write data
Current_DataFlash_Task = IDLE
}
break;
}
//Function to check current data flash task
DATA_FLASH_TASK_LIST GetCurrentTask()
{
return Current_DataFlash_Task;
}
//Function to set new data flash task
void SetCurrentTask(DATA_FLASH_TASK_LIST New_DataFlash_Task)
{
Current_DataFlash_Task = New_DataFlash_Task;
}
//main.c文件
int address;
int length;
unsigned char *data;
int main()
{
.
.
.
.
.
while(1)
{
//Continously poll the data flash state machine
DataFlashStateMachine();
}
}
//handle_events.c文件
void handle_events()
{
//Write data
ifGetCurrentTask() == IDLE)
address = 0x8000;
data_length = 500;
SetCurrentTask(WRITE);
//Read data
ifGetCurrentTask() == IDLE)
address = 0x8000;
data_length = 500;
SetCurrentTask(READ);
}
我需要以下问题的帮助:
每个硬件设备都有其自身的具体情况。您需要仔细研究设备的文档,文档将指示要使用的状态机,您应该等待多长时间,如何确保事情实际发生……您是否正在编写直接访问闪存(例如通过SPI)的低级驱动程序或库?或者你是在使用现有的界面,比如Flash翻译层,还是操作系统?在第一种情况下,我认为状态机中缺少了一些东西:擦除步骤。您不能直接写入闪存,您必须先擦除(一个页面或一个扇区,具有不同的定时和限制),然后编程否,我不是在编写低级驱动程序。这些措施已经到位。没有操作系统。是的,我正在删除该扇区,然后再写信给它。我没有详细提到代码,因为我的重点是如何知道读写操作已经完成。我需要在hanlde_events()函数中了解它们。