搜索
bottom↓
回复: 14

MSP430f149 和spi flash如何接?

[复制链接]

出0入0汤圆

发表于 2010-9-27 16:39:27 | 显示全部楼层 |阅读模式
在网上搜到一个,

(原文件名:1.JPG)
不知道这样连接的原因,是不是其他管脚也可以?我想使用45db041.谢谢大侠指导相关的内容。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2010-10-3 21:48:02 | 显示全部楼层
在网上搜了一下,可以使用通用IO模拟spi接口,也可以使用特定的spi接口。

出0入0汤圆

发表于 2010-10-5 12:56:44 | 显示全部楼层
这个图这么接说明是用I/O口模拟SPI口存取FLASH,编程复杂些

出0入0汤圆

发表于 2010-10-14 01:49:51 | 显示全部楼层
建议用硬件SPI操作45DB,优点是高速、简单,另外这个图有问题,RST被接地了,没法操作

出0入0汤圆

发表于 2010-10-16 22:23:01 | 显示全部楼层
回复【楼主位】wozai2513
在网上搜到一个,

不知道这样连接的原因,是不是其他管脚也可以?我想使用45db041.谢谢大侠指导相关的内容。
-----------------------------------------------------------------------

LZ,你可以参考下以下的程序,就是用SPI操作45DB的。

http://blog.21ic.com/user1/1015/archives/2007/44008.html

#i nclude <msp430x26x.h>
#i nclude "Memory_Process.h"

#define IO_SET_WP_OUTPUT()     (P5DIR |= BIT7)
#define IO_SET_WP()            (P5OUT |= BIT7)
#define IO_CLR_WP()            (P5OUT &= ~BIT7)

#define IO_SET_RESET_OUTPUT()     (P5DIR |= BIT6)
#define IO_SET_RESET()            (P5OUT |= BIT6)
#define IO_CLR_RESET()            (P5OUT &= ~BIT6)

#define IO_SET_CS_OUTPUT()     (P3DIR |= BIT0)
#define IO_SET_CS()            (P3OUT |= BIT0)
#define IO_CLR_CS()            (P3OUT &= ~BIT0)

void Memery_IO_Initial(void)
{
   IO_SET_WP_OUTPUT();
   IO_SET_RESET_OUTPUT();
   IO_SET_CS_OUTPUT();

   IO_SET_WP();
   IO_SET_RESET();
   IO_SET_CS();
}

void Memery_Interrupt_Initial(void)
{
   P3SEL |= 0x0E;     // P3.1,2,3 SPI option select
   U0CTL = CHAR + SYNC + MM + SWRST;         // 8-bit, SPI, Master
   U0TCTL =  SSEL1 + STC;       // Polarity, SMCLK, 3-wire CKPL +
   U0BR0 = 0x00;                             // SPICLK = SMCLK/2
   U0BR1 = 0x00;
   U0MCTL = 0x00;
   ME1 |= USPIE0;                            // Module enable
   U0CTL &= ~SWRST;                          // SPI enable
}

void Memery_Read_Page(unsigned int w_Page,char *pby_Data)
{
   char by_High_Page,by_Low_Page;
   unsigned int w_Dat;

   w_Page = w_Page << 1;
   by_High_Page = (char)(w_Page >> 8);
   by_Low_Page = (char)w_Page;

   IO_CLR_CS();

   for(char by_Loop = 0;by_Loop < 8;by_Loop++)
   {
      if(by_Loop == 0) U0TXBUF = 0xd2;
      else if(by_Loop == 1)U0TXBUF = by_High_Page;
      else if(by_Loop == 2)U0TXBUF = by_Low_Page;
      else U0TXBUF = 0;

      while(!(U0TCTL & TXEPT));
   }

   w_Dat = 0;
   IFG1 &= ~URXIFG0;

   while(1)
   {
      U0TXBUF = 0X0;
      if(IFG1 & URXIFG0)
      {
         *(pby_Data + w_Dat) = U0RXBUF;
         IFG1 &= ~URXIFG0;
         w_Dat++;
      }
      if(w_Dat == PAGE_SIZE)break;
   }
   IO_SET_CS();
}

void Memery_Write_To_Buffer(char by_Buffer,char *pby_Data)
{
   char by_Com;
   unsigned int w_Dat = 0;
   if(by_Buffer == 1) by_Com = 0x84;
   else if(by_Buffer == 2) by_Com = 0x87;
   else return;

   IO_CLR_CS();
   U0TXBUF = by_Com;
   while(!(U0TCTL & TXEPT));
   U0TXBUF = 0X0;
   while(!(U0TCTL & TXEPT));
   U0TXBUF = 0X0;
   while(!(U0TCTL & TXEPT));
   U0TXBUF = 0X0;
   while(!(U0TCTL & TXEPT));

   while(1)
   {
      for(w_Dat = 0;w_Dat < PAGE_SIZE;w_Dat++)
      {
         U0TXBUF = *(pby_Data + w_Dat);
         while(!(U0TCTL & TXEPT));
      }
      if(w_Dat == PAGE_SIZE)break;
   }
   IO_SET_CS();
}

void Memery_Buffer_Write_To_Page(char by_Buffer,unsigned int w_Page)
{
   char by_High_Address,by_Low_Address;
   char by_Com;

   if(by_Buffer == 1) by_Com = 0x83;
   else if(by_Buffer == 2) by_Com = 0x86;
   else return;

   w_Page = w_Page << 1;
   by_High_Address = (char)(w_Page >> 8);
   by_Low_Address = (char)(w_Page);

   IO_CLR_CS();
   U0TXBUF = by_Com;
   while(!(U0TCTL & TXEPT));
   U0TXBUF = by_High_Address;
   while(!(U0TCTL & TXEPT));
   U0TXBUF = by_Low_Address;
   while(!(U0TCTL & TXEPT));
   U0TXBUF = 0X0;
   while(!(U0TCTL & TXEPT));
   IO_SET_CS();
}

出0入0汤圆

 楼主| 发表于 2010-10-19 11:59:24 | 显示全部楼层
回复【4楼】zerolee  
-----------------------------------------------------------------------
谢谢你。

出0入0汤圆

 楼主| 发表于 2010-10-19 11:59:53 | 显示全部楼层
回复【3楼】iseesee  
-----------------------------------------------------------------------
谢谢你你啊

出0入0汤圆

 楼主| 发表于 2010-11-9 19:30:56 | 显示全部楼层
在网上搜到一些资料(别处下载的),终于有了一些头绪,希望对别人也有点作用。

点击此处下载 ourdev_596665Z0BW48.rar(文件大小:11K) (原文件名:27592075AT45DB041b.rar)
点击此处下载 ourdev_596666XC0TPV.rar(文件大小:4K) (原文件名:55745866MSP430-AT45DB081B.rar)
点击此处下载 ourdev_596667TTNSMB.rar(文件大小:190K) (原文件名:69543167msp430-45db041.rar)

出0入0汤圆

发表于 2010-11-10 16:37:59 | 显示全部楼层
AT45DB081系列的Flash是不是量比较少呀,我前两天去市场抓的时候都说没有货,要等

出0入0汤圆

发表于 2010-11-12 20:46:32 | 显示全部楼层
回复【8楼】chinadragon  中国龙
at45db081系列的flash是不是量比较少呀,我前两天去市场抓的时候都说没有货,要等
-----------------------------------------------------------------------

你刚发现啊,大家都知道一年了啊,,赶紧换吧

出0入0汤圆

发表于 2011-12-4 01:30:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-9 22:09:26 | 显示全部楼层
现在我也在写这个程序,单片机用的是430f4152,flash 为AT45DB161D,但是读flash状态怎么也读不出来,读的全是00,读数据时是很乱的数值,大家能否帮忙分析一下是什么原因啊?

出0入0汤圆

发表于 2011-12-10 08:40:06 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-12-10 09:33:37 | 显示全部楼层

(原文件名:QQ截图20111209214550.jpg)

出0入0汤圆

发表于 2011-12-13 10:55:53 | 显示全部楼层
msp430最好使用三线接法,片选端使用任意I/O代替
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 10:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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