📄 1m.c
字号:
//******************************************************************
// MXF28F1000P: C sample code
//******************************************************************
#define Mode_1M_2M 0x02
#define f1m_Read_ID_CMD 0x90
#define f1m_Auto_Chip_Erase_CMD 0x30
#define f1m_Reset_CMD 0xff
#define f1m_Block_Erase_CMD 0x20
#define f1m_Block_Erase_CMD2 0xD0
#define f1m_Program_CMD 0x40
//******************************************************************
// hardware setting
// dependent MXIC's evaluation
//******************************************************************
#define Max_1M_Address 0x1FFFFL
#define Max_2M_Address 0x3FFFFL
#define Win64k 0x00
#define Win32k 0x01
#define Win16k 0x02
#define ID_MXIC 0xC2
#define ID_MX28F1000P 0x1A
#define ID_MX28F2000P 0x2A
-----------------------------
//******************************************************************
// function: Read ID Code
// command : write [xxxx],00H
// m_id - manufacture ID
// d_id - device ID
//******************************************************************
f1m_Read_ID()
{
unsigned d_id,m_id;
outportb(ControlPort,Mode_1M_2M);
fmemptr[0]=f1m_Read_ID_CMD;
m_id=fmemptr[0];
fmemptr[0]=f1m_Read_ID_CMD;
d_id=fmemptr[1];
}
-----------------------------
//******************************************************************
// function: Auto Chip Erase:
// command: Write [XXXX],30H
// Write [XXXX],30H
//******************************************************************
f1m_Chip_Erase()
{
fmemptr[0]=f1m_Auto_Chip_Erase_CMD;
fmemptr[0]=f1m_Auto_Chip_Erase_CMD;
Toggle_Polling();
if( !((fmemptr[0])& 0x80))
{
f1m_ResetSTM();
printf("Auto chip erase failed");
return -1;
}
f1m_ResetSTM();
printf("Auto chip erase completed");
}
-----------------------------
//******************************************************************
// function:Toggle Bit Checking
// description: wait till DQ6 stops toggling fortwo consecutive
// read cycles
//******************************************************************
Toggle_Polling(void)
{
unsigned char data;
do
{
data=fmemptr[0];
}while((data ^ fmemptr[0])&0x40);
return(0);
}
-----------------------------
//******************************************************************
// function: Auto Block Erase:
// command: Write [XXXX],20H
// Write [blk Addr],D0H
// input: Address - block address
// Winselect - select window
//******************************************************************
int f1m_Block_Erase ()
{
int Winselect=0;
if (Address > Max_1M_Address)
{
printf("Address Error!!");
return -1;
}
// get selected memory window no.
while (Address > Winsize_64K )
{
Address = Address-Winsize_64K;
Winselect ++;
}
outport(WindowPort,Winselect);
fmemptr[0]=f1m_Block_Erase_CMD;
fmemptr[Address]=f1m_Block_Erase_CMD2;
delay_100us(2); // delay 200us
Toggle_Polling();
if ( !(fmemptr[Address] & 0x80) )
{
f1m_ResetSTM();
printf("Block Erase Fail");
return -1;
}
f1m_ResetSTM();
printf("Block Erase Completed");
return 0;
}
-----------------------------
//******************************************************************
// function: Reset
// command: Write [XXXX],FFH
// Write [XXXX],FFH
//******************************************************************
f1m_ResetSTM(void)
{
fmemptr[0]=f1m_Reset_CMD;
fmemptr[0]=f1m_Reset_CMD;
return (0);
}
-----------------------------
//******************************************************************
// function: Read Memory
// command : Write [XXXX],00H
// input: address
// output: rbyte - read data
//******************************************************************
unsigned char f1m_Read_Byte()
{
int Winselect;
unsigned char rbyte;
Winselect = 0;
message[0]='\0';
if (address > Max_1M_Address)
{
printf("address error.");
return -1;
}
while (address > Winsize_64K )
{
address=address-Winsize_64K;
Winselect ++;
}
bstart=clock();
outport(WindowPort,Winselect);
rbyte=fmemptr[byte_address];
bend=clock();
return(rbyte);
}
-----------------------------
//******************************************************************
// function:Auto Program:
// command: Write [XXXX],40H
// Write [Addr],Data
// input :addr - program address
// :data - program data
//******************************************************************
int f1m_Byte_Program ()
{
unsigned char databuf;
int Winselect;
Winselect = 0;
message[0]='\0';
if (prog_addr > Max_1M_Address)
{
printf("address error.");
return -1;
}
while (addr > Winsize_64K )
{
addr = addr - Winsize_64K;
Winselect ++;
}
outportb(WindowPort,Winselect);
fmemptr[0]=f1m_Program_CMD;
fmemptr[addr]=data;
do
{
databuf=fmemptr[0];
} while( (databuf ^ fmemptr[0]) & 0x40);
if (data!=fmemptr[addr])
{
f1m_ResetSTM();
printf("Write error !");
return -1;
}
return(0);
}
---------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -