[MSP430]

兄弟姐妹们,绝望中求助:关于MSP430和FM25V20 SPI通信

[复制链接]
6828|23
手机看帖
扫描二维码
随时随地手机跟帖
qq57566677|  楼主 | 2013-7-23 16:20 | 显示全部楼层 |阅读模式
本帖最后由 qq57566677 于 2013-7-23 16:30 编辑

是这样的。 我用MSP430F5438A和铁电存储器FM25V20通信,方式是SPI,总是失败。
本以为能轻松搞定的东西,折腾我一星期了,毫无进展。

FM25V20支持SPI0和SPI3,下面是它的SPI3时序:

1.JPG

按照上图的时序,单片机初始化程序如下:

void SPI_Init(void)
{
    P3SEL |= BIT1 + BIT2 + BIT3;      // UCB0 pin : CLK + SIMO + SOMI
    P2OUT |= BIT6;                            // 片选信号CS,低有效。P2.6 = 1 : Inactive fm25v20
    P2DIR |= BIT6;                             // P2.6 output mode  
   
    UCB0CTL1 |= UCSWRST;             // Put state machine in reset
    UCB0CTL0 |= UCMST+UCSYNC+UCMSB+UCCKPL;     // 3-pin, 8-bit SPI master, MSB
    UCB0CTL1 |= UCSSEL_2;             // SMCLK sources UCB
    UCB0BR0   = 0x02;                      // Prescale value 2
    UCB0BR1   = 0;                              
    UCB0CTL1 &= ~UCSWRST;         // Initialize USCI state machine
    //UCB0IE   |= UCRXIE;                 // Enable USCI_A0 RX interrupt
}

相关帖子

qq57566677|  楼主 | 2013-7-23 16:35 | 显示全部楼层
本帖最后由 qq57566677 于 2013-7-24 09:07 编辑

FM25V20内部有一个ID寄存器,存放着产品信息,发送指令码0x9F就可以读出来:
2.JPG

应该读出的内容是:7F 7F 7F 7F 7F 7F C2 25 00 一共九个字节。下面是读ID的程序:

void FM25V20_Read(unsigned char *data)
{
    unsigned char i;
    unsigned char tmp;
   
    P2OUT &= ~BIT6;                             // CS = 0, Active fm25v20  
    UCB0TXBUF = RDID;                        // 发送操作码 0x9F
    while (!(UCB0IFG&UCRXIFG));           // 发送完成?(MSP430)的收发是同时进行的。
    tmp = UCB0RXBUF;                         // 清空接收缓冲,因为这次收到的数据没有意义
     
    for(i=0; i<9; i++)                             // 开始接收
    {
        UCB0TXBUF = DUMMY;                // 发送DUMMY,为了输出CLK
        while (!(UCB0IFG&UCRXIFG));
        *data++ = UCB0RXBUF;  
    }
    P2OUT |= BIT6;                             // CS = 1, Inactive fm25v20
}

读取的结果全是错的(0xFF)。

使用特权

评论回复
qq57566677|  楼主 | 2013-7-23 16:45 | 显示全部楼层
我把SIMO和SOMI短接,让单片机自发自收,测试的结果很正常,这说明单片机这边应该没问题,布线也没问题。 我怀疑是FM25V20根本没收到指令码,所以实际上没有给单片机上传ID数据,但是不知道为什么会这样。  求帮忙!

使用特权

评论回复
qq57566677|  楼主 | 2013-7-24 09:07 | 显示全部楼层
自己顶!

使用特权

评论回复
hopewise| | 2013-7-24 10:49 | 显示全部楼层
用软件模拟

使用特权

评论回复
地瓜patch| | 2013-7-24 11:10 | 显示全部楼层
FM25V20支持的速率,msp430的系统时钟以及配置的速率。三者一致吗

使用特权

评论回复
jinghui1978| | 2013-7-24 11:27 | 显示全部楼层
MSP430用的默认时钟,MCLK = SMCLK = Default DCO =1.048MHz,这个速度对于FM25V20无压力。 SPI的模式也应该没问题,事实上我几种模式都试过了,都不行。

使用特权

评论回复
gaoyang9992006| | 2013-7-24 11:28 | 显示全部楼层
FM25V02驱动.rar (3.36 KB)

使用特权

评论回复
zhao3462910| | 2013-7-24 11:32 | 显示全部楼层
你先要测试SPI的读写。。写进去的数据。再读出来。。看是否正确。读写测试通过后,在配置其他的。。这个铁电存储器FM25V20没用过。但是SPI接口的都是差不多的。。
   另外,你也可以用MSP430的Flash模拟EEProm存储数据,一样的掉电不丢失。。

使用特权

评论回复
zhangmangui| | 2013-7-24 12:14 | 显示全部楼层
不是很了解MSP430   你可以用示波器看看430读写是的时序和数据  对比分析是不是合适
我曾经调试一块单片机 用SPI控制一个UART扩展芯片   结果调了好长时间不对
最后发现我使用单片机的SPI是半双工的   不能用于全双工  
所以你先确认你的硬件功能   然后用示波器去查看波形

使用特权

评论回复
dirtwillfly| | 2013-7-25 15:34 | 显示全部楼层
用示波器或者逻辑分析仪看下信号吧

使用特权

评论回复
ningling_21| | 2013-7-25 15:38 | 显示全部楼层
支持,用示波器看看波形找找原因...

使用特权

评论回复
yqzz163| | 2013-8-22 11:02 | 显示全部楼层
兄弟你把FM25V02给换了吧

使用特权

评论回复
tao180539| | 2013-10-11 11:48 | 显示全部楼层
我也在弄 你怎么解决的  留下个联系方式

使用特权

评论回复
一二三四五| | 2013-11-3 20:21 | 显示全部楼层
我现在也用MSP430F149通过SPI操作Flash存储器SST25VF016B,经过测试SPI程序正确,Flash芯片驱动程序也是按照别人的写的,但是现在测试程序不能读出和向芯片写入数据也不能向它寄存器写、读。后来Flash换为GD25Q16BSIG同样不行。。我测试读寄存器和数据时不是0x00就是0xff,,实在没办法了,求帮助啊!

使用特权

评论回复
一二三四五| | 2013-11-3 20:38 | 显示全部楼层
tao180539 发表于 2013-10-11 11:48
我也在弄 你怎么解决的  留下个联系方式

278551787  互相帮助

使用特权

评论回复
tao180539| | 2013-11-3 21:19 | 显示全部楼层
一二三四五 发表于 2013-11-3 20:38
278551787  互相帮助

谢谢啊  我搞通了 非常感谢

使用特权

评论回复
一二三四五| | 2013-11-3 21:31 | 显示全部楼层
tao180539 发表于 2013-11-3 21:19
谢谢啊  我搞通了 非常感谢

我现在用MSP430F149通过SPI操作Flash存储器SST25VF016B,经过测试SPI程序正确,Flash芯片驱动程序也是按照别人的写的,但是现在测试程序不能读出和向芯片写入数据也不能向它寄存器写、读。后来Flash换为GD25Q16BSIG同样不行。。我测试读寄存器和数据时不是0x00就是0xff。
我不会啊!求帮助。

使用特权

评论回复
zjxcml| | 2013-11-4 09:49 | 显示全部楼层
顶起,觉得SPI出问题有些不好调

使用特权

评论回复
gegezaixiao| | 2013-11-4 10:21 | 显示全部楼层
这个多数可能是时间和时序问题,时间就是时钟频率在不在存储器范围之内,时序就是功能引脚相互配合工作符不符合要。
用示波器最直接

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

24

帖子

0

粉丝