找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1888|回复: 0
打印 上一主题 下一主题
收起左侧

芯圣SDK-HC89F0541单片机的 W25Q16存储模块读取

[复制链接]
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2020-7-16 00:31 编辑

W25Q16是一款16Mbit8MBFlash型存储器件,可用于声音、文本和数据的存储,典型的应用是用于构建中文字库。芯片支持的工作电压2.7V3.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

读取功能程序设计
主程序:
  1. void main()   
  2. {
  3.         unsigned int u=0;
  4.         P0M6 = 0xC2;
  5.         P0M7 = 0x62;
  6.         TXD_MAP = 0x06;
  7.         RXD_MAP = 0x07;
  8.         T4CON = 0x06;
  9.         TH4 = 0xFF;
  10.         TL4 = 0x98;
  11.         SCON2 = 0x02;        
  12.         SCON = 0x10;
  13.         IE |= 0x10;
  14.         P0M0 = 0xC2;
  15.         P2M5 = 0xC2;
  16.         P2M7 = 0xC2;
  17.         P2M6 = 0x69;
  18.         SS_MAP = 0x00;
  19.         MISO_MAP = 0x26;
  20.         MOSI_MAP = 0x27;
  21.         SCK_MAP = 0x25;
  22.         SPDAT = 0x00;
  23.         SPSTAT = 0x00;
  24.         SPCTL = 0xD3;
  25.         P3M4 = 0x62;
  26.         P3M3 = 0x62;
  27.         P2M4 = 0x62;
  28.         RSTDBC = 0xFF;
  29.         delay();
  30.         id_a[0] = 'K';
  31.         id_a[1] = ' ';
  32.         id_a[2] = ':';
  33.         id_a[3] = ' ';
  34.         id_a[4] = ' ';
  35.         id_a[5] = '\0';
  36.         EA = 1;
  37.         while(1)
  38.         {
  39.                  if(K1==0)  
  40.                  {
  41.                          id_a[1] = '1';
  42.                          id_a[3] = 'R';
  43.                          id_a[4] = '+';
  44.                          UART_Send_Str(id_a);
  45.                          W25Q16_Read(u,16,guc_Readbuf_a);
  46.                          UART_Send_String(guc_Readbuf_a,16);
  47.                          u=u+16;
  48.                  }
  49.                  if(K2==0)  
  50.                  {
  51.                          id_a[1] = '2';
  52.                          id_a[3] = 'R';
  53.                          id_a[4] = '-';
  54.                          UART_Send_Str(id_a);
  55.                          W25Q16_Read(u,16,guc_Readbuf_a);
  56.                          UART_Send_String(guc_Readbuf_a,16);
  57.                          u=u-16;
  58.                 }
  59.                 delay();
  60. }
复制代码

数据读取函数:
  1. void W25Q16_Read(unsigned int fui_Address,unsigned char Length,unsigned char *fucp_SaveArr)
  2. {
  3.          unsigned int i;
  4.    
  5.          W25Q16_WriteEnable();
  6.          CS = 0;
  7.          SPI_WriteReadData(0x03);
  8.          SPI_WriteReadData(0x00);
  9.          SPI_WriteReadData((unsigned char)(fui_Address)/256);  
  10.          SPI_WriteReadData((unsigned char)(fui_Address)%256);
  11.          for(i=0;i<Length;i++){fucp_SaveArr[i]=SPI_WriteReadData(0xFF);}
  12.          CS = 1;
  13. }
复制代码

延时函数:
  1. void delay(void)
  2. {
  3. int i,j;

  4.          for(i=0;i<1000;i++)
  5.             for(j=0;j<1000;j++);
  6. }
复制代码

测试方法:
连续按下K1键,向下连续读取多个单元的存储内容;然后连续按下K2键,向上连续读取多个存储单元的内容,以核对读取内容的一致性。

2 读取测试

结论:经实际验证,读取数据具有一致性,证明程序有效、可用。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表