本帖最后由 jinglixixi 于 2020-7-16 00:31 编辑
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 读取测试
结论:经实际验证,读取数据具有一致性,证明程序有效、可用。
|