MSP430f149 和spi flash如何接?
在网上搜到一个,http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_585993WK6VPN.JPG
(原文件名:1.JPG)
不知道这样连接的原因,是不是其他管脚也可以?我想使用45db041.谢谢大侠指导相关的内容。 在网上搜了一下,可以使用通用IO模拟spi接口,也可以使用特定的spi接口。 这个图这么接说明是用I/O口模拟SPI口存取FLASH,编程复杂些 建议用硬件SPI操作45DB,优点是高速、简单,另外这个图有问题,RST被接地了,没法操作 回复【楼主位】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();
} 回复【4楼】zerolee
-----------------------------------------------------------------------
谢谢你。 回复【3楼】iseesee
-----------------------------------------------------------------------
谢谢你你啊 在网上搜到一些资料(别处下载的),终于有了一些头绪,希望对别人也有点作用。
点击此处下载 ourdev_596665Z0BW48.rar(文件大小:11K) (原文件名:27592075AT45DB041b.rar)
点击此处下载 ourdev_596666XC0TPV.rar(文件大小:4K) (原文件名:55745866MSP430-AT45DB081B.rar)
点击此处下载 ourdev_596667TTNSMB.rar(文件大小:190K) (原文件名:69543167msp430-45db041.rar) AT45DB081系列的Flash是不是量比较少呀,我前两天去市场抓的时候都说没有货,要等 回复【8楼】chinadragon中国龙
at45db081系列的flash是不是量比较少呀,我前两天去市场抓的时候都说没有货,要等
-----------------------------------------------------------------------
你刚发现啊,大家都知道一年了啊,,赶紧换吧 mark 现在我也在写这个程序,单片机用的是430f4152,flash 为AT45DB161D,但是读flash状态怎么也读不出来,读的全是00,读数据时是很乱的数值,大家能否帮忙分析一下是什么原因啊? mark! http://cache.amobbs.com/bbs_upload782111/files_48/ourdev_703188MAELP4.jpg
(原文件名:QQ截图20111209214550.jpg) msp430最好使用三线接法,片选端使用任意I/O代替
页:
[1]