查看: 5511|回复: 5

msp430进行SPI模式下的flash存储器

[复制链接]
  • TA的每日心情
    开心
    2013-5-12 09:23
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-2-26 12:36:29 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 洛川子 于 2013-2-26 12:39 编辑

    首先说明下。。用MSP430F2618对一个flash存储器进行读写,但是一直没有结果。。
    我的想法是:要想知道读写是不是成功只需要将一串数字先写入flash存储器,如果可以在那个位置读取出来的话就说明写操作和读操作都是争取的。
    但是不管我怎么读写读出来的都是0或者说是空。
    附上代码
    /**********************************************
    初始化
    ***********************************************/
    void Spi_Init()
    {
       UCB0CTL1 = UCSWRST;//使能

       UCB0CTL0 |= UCMSB + UCMST + UCMODE_0+ UCSYNC + UCCKPL;
       UCB0CTL0 &= ~UC7BIT;//8位
       //UCB0CTL0 |= UCMSB + UCMST + UCSYNC + UCCKPL;
       //UCMSB 起始选择  MSB开始
       //UCMST 主机模式
       //UCMODE_0 3线SPI(SCLK,SIMO,SOMI)
       //UCSYNC 选择了spi模式
       //UCCKPL 选择时钟极性
       UCB0CTL1 |= UCSSEL_2;  //SMCLK
       UCB0BR0 =0xe2;                     
       UCB0BR1 =0x04; //9600

       P3SEL = 0x0e;  
       UCB0CTL1 &= ~UCSWRST; //模块使能
    }

    /**********************************************
    函数功能:写data
    函数参数:uchar Data
    ***********************************************/
    void Write_Data(uchar Data)
    {
      UCB0TXBUF = Data;
      while(!(IFG2&UCB0TXIFG));
    }

    /**********************************************
    函数功能:等待不忙
    函数参数:

    //读取状态寄存器   
    //bit7      bit6    bit6    bit6    bit6    bit6    bit6    bit6   
    //RDY/BUSY  COMP    1   0   1   1   PROTECT PAGE SIZE
    If bit 7 is a 1, then the device is
    not busy and is ready to accept the next command
    ***********************************************/
    void Until_Ready()//这里没有跳出循环
    {
      uchar x=0x00;  
      while(!(x&0x10))
      {
      AT45_CS_0;
      Write_Data(0xd7);
      x = UCB0RXBUF;


      AT45_CS_1;
      }
    }
    /**********************************************
    函数功能:写Buffer
    函数参数:uchar Buffer_Num 选择写的是那个缓存区
    int Buffer_Addr   在缓存区的那个位置写
    char* Buffer_Data 写的数据
    int size 存放的数据有多少个
    ***********************************************/
    void Write_Buffer(uchar Buffer_Num,int Buffer_Addr,char* Buffer_Data,int size)
    {
      char Choose_Buffer_Num;
      int i;
      AT45_CS_0;
      Until_Ready();
      if(Buffer_Num)//如果Buffer_Num为0,选择缓存区1
        Choose_Buffer_Num = 0x87;//缓存区2
      else
        Choose_Buffer_Num = 0x84;//缓存区1
      Write_Data(Choose_Buffer_Num);

      Write_Data(Buffer_Addr >> 16);
      Delay(Flash_Delay);
      Write_Data(Buffer_Addr >> 8);
      Delay(Flash_Delay);
      Write_Data(Buffer_Addr >> 0);
      Delay(Flash_Delay);

      for(i=0;i<SIZE;i++)
      {
        UCB0TXBUF = Buffer_Data;
      }
      Until_Ready();
      AT45_CS_1;
    }
    /**********************************************
    函数功能:读Buffer的内容
    函数参数:uchar Buffer_Num 选择写的是那个缓存区
    int Page_Addr   开始读缓存区的地址
    char* Buffer_Data 存放读出的数据
    int size  数据的个数
    ***********************************************/
    void Read_Buffer(uchar Buffer_Num,int Buffer_Addr,char* Buffer_Data,int size)
    {
      char Choose_Buffer_Num;
      int i;
      AT45_CS_0;
      Until_Ready();

      if(Buffer_Num)//如果Buffer_Num为0,选择缓存区1
        Choose_Buffer_Num = 0xd6;//缓存区2
      else
        Choose_Buffer_Num = 0xd4;//缓存区1
      Write_Data(Choose_Buffer_Num);

      Write_Data(Buffer_Addr >> 16);
      Delay(Flash_Delay);
      Write_Data(Buffer_Addr >> 8);
      Delay(Flash_Delay);
      Write_Data(Buffer_Addr >> 0);
      Delay(Flash_Delay);

      for(i=0;i<SIZE;i++)
      {
        Buffer_Data = UCB0RXBUF;
      }
      Until_Ready();
      AT45_CS_1;
    }

    主函数就是直接调用读写函数,但是输出的不对,求教各位大神吧。

    真诚要求各位大神指教


    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-2-26 13:35:09 | 显示全部楼层
    貌似不简单,坐等大侠们帮忙解答
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-5-12 09:23
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-2-27 09:30:16 | 显示全部楼层
    GY@艳 发表于 2013-2-26 13:35
    貌似不简单,坐等大侠们帮忙解答

    估计没戏了,这个帖子我在基本的很多430的论坛都发过了。。。貌似都是没人回答。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-2-27 10:50:26 | 显示全部楼层
    洛川子 发表于 2013-2-27 09:30
    估计没戏了,这个帖子我在基本的很多430的论坛都发过了。。。貌似都是没人回答。 ...

    这么厉害???????
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-6-1 08:44
  • 签到天数: 398 天

    连续签到: 2 天

    [LV.9]以坛为家II

    发表于 2013-2-27 10:55:14 | 显示全部楼层
    不行就直接跟TI技术支持交流吧,我还没搞过这个~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-5-12 09:23
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-2-27 11:11:28 | 显示全部楼层
    其实不是大家不会,只是大家没有搞这个,或者不愿仔细看而已。嗨。我自己搞吧
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-24 01:23 , Processed in 0.168058 second(s), 25 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.