本帖最后由 芯圣电子官方QQ 于 2023-7-24 10:01 编辑
W25Q16是一款16Mbit(8MB)Flash型存储器件,可用于声音、文本和数据的存储,典型的应用是用于构建中文字库。芯片支持的工作电压2.7V到3.6V,正常工作时电流小于4mA, 掉电时低于1uA。工作温度为-40℃到85℃。
要进行W25Q16存储模块读写功能测试需要如下器件: 1. W25Q16存储模块 2. SDK-HC89F0541开发板 3.软按键 4.串行通讯模块 图1 测试的基本构成
W25Q16存储模块与开发板的连接关系: CS -- P02 D0 -- P26 D1 -- P27 SCL -- P25
软按键与开发板的连接关系: K1 -- P34 K2 -- P33
通讯模块与开发板的连接关系: TXD -- P06 RXD -- P07
读取功能程序设计 主程序: void main()
{
unsigned int u=0;
P0M6 = 0xC2;
P0M7 = 0x62;
TXD_MAP = 0x06;
RXD_MAP = 0x07;
T4CON = 0x06;
TH4 = 0xFF;
TL4 = 0x98;
SCON2 = 0x02;
SCON = 0x10;
IE |= 0x10;
P0M0 = 0xC2;
P2M5 = 0xC2;
P2M7 = 0xC2;
P2M6 = 0x69;
SS_MAP = 0x00;
MISO_MAP = 0x26;
MOSI_MAP = 0x27;
SCK_MAP = 0x25;
SPDAT = 0x00;
SPSTAT = 0x00;
SPCTL = 0xD3;
P3M4 = 0x62;
P3M3 = 0x62;
P2M4 = 0x62;
RSTDBC = 0xFF;
delay();
id_a[0] = 'K';
id_a[1] = ' ';
id_a[2] = ':';
id_a[3] = ' ';
id_a[4] = ' ';
id_a[5] = '\0';
EA = 1;
while(1)
{
if(K1==0)
{
id_a[1] = '1';
id_a[3] = 'R';
id_a[4] = '+';
UART_Send_Str(id_a);
W25Q16_Read(u,16,guc_Readbuf_a);
UART_Send_String(guc_Readbuf_a,16);
u=u+16;
}
if(K2==0)
{
id_a[1] = '2';
id_a[3] = 'R';
id_a[4] = '-';
UART_Send_Str(id_a);
W25Q16_Read(u,16,guc_Readbuf_a);
UART_Send_String(guc_Readbuf_a,16);
u=u-16;
}
delay();
}
辅助程序 数据读取函数: void W25Q16_Read(unsigned int fui_Address,unsigned char Length,unsigned char *fucp_SaveArr)
{
unsigned int i;
W25Q16_WriteEnable();
CS = 0;
SPI_WriteReadData(0x03);
SPI_WriteReadData(0x00);
SPI_WriteReadData((unsigned char)(fui_Address)/256);
SPI_WriteReadData((unsigned char)(fui_Address)%256);
for(i=0;i<Length;i++){fucp_SaveArr[i]=SPI_WriteReadData(0xFF);}
CS = 1;
}
延时函数: void delay(void)
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<1000;j++);
}
测试方法: 连续按下K1键,向下连续读取多个单元的存储内容;然后连续按下K2键,向上连续读取多个存储单元的内容,以核对读取内容的一致性。 图2 读取测试
结论:经实际验证,读取数据具有一致性,证明程序有效、可用。
|