wozai2513 发表于 2010-9-27 16:39:27

MSP430f149 和spi flash如何接?

在网上搜到一个,
http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_585993WK6VPN.JPG
(原文件名:1.JPG)
不知道这样连接的原因,是不是其他管脚也可以?我想使用45db041.谢谢大侠指导相关的内容。

wozai2513 发表于 2010-10-3 21:48:02

在网上搜了一下,可以使用通用IO模拟spi接口,也可以使用特定的spi接口。

xuel0532 发表于 2010-10-5 12:56:44

这个图这么接说明是用I/O口模拟SPI口存取FLASH,编程复杂些

iseesee 发表于 2010-10-14 01:49:51

建议用硬件SPI操作45DB,优点是高速、简单,另外这个图有问题,RST被接地了,没法操作

zerolee 发表于 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();
}

wozai2513 发表于 2010-10-19 11:59:24

回复【4楼】zerolee
-----------------------------------------------------------------------
谢谢你。

wozai2513 发表于 2010-10-19 11:59:53

回复【3楼】iseesee
-----------------------------------------------------------------------
谢谢你你啊

wozai2513 发表于 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)

chinadragon 发表于 2010-11-10 16:37:59

AT45DB081系列的Flash是不是量比较少呀,我前两天去市场抓的时候都说没有货,要等

morning_sun 发表于 2010-11-12 20:46:32

回复【8楼】chinadragon中国龙
at45db081系列的flash是不是量比较少呀,我前两天去市场抓的时候都说没有货,要等
-----------------------------------------------------------------------

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

hd0420 发表于 2011-12-4 01:30:50

mark

hd0420 发表于 2011-12-9 22:09:26

现在我也在写这个程序,单片机用的是430f4152,flash 为AT45DB161D,但是读flash状态怎么也读不出来,读的全是00,读数据时是很乱的数值,大家能否帮忙分析一下是什么原因啊?

changhui0222 发表于 2011-12-10 08:40:06

mark!

enric_lee 发表于 2011-12-10 09:33:37

http://cache.amobbs.com/bbs_upload782111/files_48/ourdev_703188MAELP4.jpg
(原文件名:QQ截图20111209214550.jpg)

liu_ourdev 发表于 2011-12-13 10:55:53

msp430最好使用三线接法,片选端使用任意I/O代替
页: [1]
查看完整版本: MSP430f149 和spi flash如何接?