打印

求助FM25V02,用SPI读回的数据全是FF???

[复制链接]
7997|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qinhuan7|  楼主 | 2012-12-16 17:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我用富士通的MB9BF506R的SPI给FM25V02存数据,用示波器看了发出的时钟、数据正常均正常,但是读回来的数据全部为FF,为什么???

相关帖子

沙发
loveyc| | 2012-12-16 18:19 | 只看该作者
恭喜你  厉害!~

使用特权

评论回复
板凳
qinhuan7|  楼主 | 2012-12-19 13:58 | 只看该作者
没有人遇到过这种情况吗???

使用特权

评论回复
地板
chunyang| | 2012-12-19 14:23 | 只看该作者
如果你确认写入、读取的时序都正确,只能说是硬件电路或器件本身的问题了。

使用特权

评论回复
5
qinhuan7|  楼主 | 2012-12-19 18:55 | 只看该作者
chunyang 发表于 2012-12-19 14:23
如果你确认写入、读取的时序都正确,只能说是硬件电路或器件本身的问题了。 ...

我配置好后确认发出去的时序和数据都正确,铁电芯片我已经换过几片了,不可能都是坏的吧,就是不知道是不是其他什么地方不对。:'(

使用特权

评论回复
6
chunyang| | 2012-12-19 23:53 | 只看该作者
检查电路吧,再说,你认为“正确”的时序未必真的正确。

使用特权

评论回复
7
qinhuan7|  楼主 | 2012-12-20 14:34 | 只看该作者
chunyang 发表于 2012-12-19 23:53
检查电路吧,再说,你认为“正确”的时序未必真的正确。



按照FM25V02手册上接的,hold脚也接到了VDD,这样接有问题吗?

使用特权

评论回复
8
qinhuan7|  楼主 | 2012-12-20 14:39 | 只看该作者
static void Master_Write_Byte(void)
{
    uint8_t txdata[8];
    uint8_t temp = 0xaa;  
    txdata[0] = 0x00;
    MFS_CSIOEnableSOE(MFS_Ch1);
    MFS_CSIOEnableTX(MFS_Ch1);
    MFS_CSIOEnableRX(MFS_Ch1);
    DelayResolution100us(1);
   FM_CS2 = 0;
   MFS_CSIOTransferOneData(MFS_Ch1, WREN);
   FM_CS2 = 1;

   FM_CS2 = 0;
   MFS_CSIOTransferOneData(MFS_Ch1, WRITE);
   MFS_CSIOTransferOneData(MFS_Ch1, AdrrM);
   MFS_CSIOTransferOneData(MFS_Ch1, AdrrL);//两个字节地址   
   MFS_CSIOTransferOneData(MFS_Ch1, temp);
  MFS_CSIOTransferOneData(MFS_Ch1, WRDI);
  FM_CS2 = 1;
  DelayResolution100us(1);
   MFS_CSIODisableSOE(MFS_Ch1);
}
static void Master_Read_Byte(void)
{
    uint8_t rxdata_1[8] = {0,1,2,3,4,5,6,7};
    MFS_CSIOEnableSOE(MFS_Ch1);
    MFS_CSIOEnableTX(MFS_Ch1);
    MFS_CSIOEnableRX(MFS_Ch1);
    /* Wait for slave side start */
    DelayResolution100us(5);
    FM_CS2 = 0;
    MFS_CSIOTransferOneData(MFS_Ch1, READ);
    MFS_CSIOTransferOneData(MFS_Ch1, AdrrM);
    MFS_CSIOTransferOneData(MFS_Ch1, AdrrL);
    rxdata_1[0] = MFS_CSIOTransferOneData(MFS_Ch1, 0x00);
    FM_CS2 = 1;
    MFS_CSIODisableSOE(MFS_Ch1);
    MFS_CSIODisableTX(MFS_Ch1);
    MFS_CSIODisableRX(MFS_Ch1);
    MFS_UARTTXOneData(MFS_Ch2, rxdata_1[0]);
     DelayResolution100us(1);
}
这是写一个字节和读一个字节的程序。

使用特权

评论回复
9
qinhuan7|  楼主 | 2012-12-22 21:50 | 只看该作者
自己顶起来,只希望有人指点、、、:lol

使用特权

评论回复
10
sensorexpert| | 2012-12-23 15:22 | 只看该作者
电流的问题

使用特权

评论回复
11
qinhuan7|  楼主 | 2012-12-24 10:02 | 只看该作者
sensorexpert 发表于 2012-12-23 15:22
电流的问题

能不能再详细的呢,我看了的,铁电的功耗40Mhz时才3mA,MB9BF506R完全能够驱动的。

使用特权

评论回复
12
QQ435965858| | 2012-12-24 11:00 | 只看该作者
电路也没问题.器件的问题吧

使用特权

评论回复
13
shell.albert| | 2012-12-24 11:59 | 只看该作者
感觉是你的时序有问题。从程序上看,显示是模拟的时序。

使用特权

评论回复
14
qinhuan7|  楼主 | 2012-12-24 16:13 | 只看该作者
QQ435965858 发表于 2012-12-24 11:00
电路也没问题.器件的问题吧

铁电芯片我换了几片了,应该没有问题哦,MB5BF506R也是新的,配置好SPI后能输出时钟和数据,且都正确,但是波形比较丑,不知道为什么。

使用特权

评论回复
15
qinhuan7|  楼主 | 2012-12-24 16:15 | 只看该作者
shell.albert 发表于 2012-12-24 11:59
感觉是你的时序有问题。从程序上看,显示是模拟的时序。

时序是按照铁电手册上写的,使用的是芯片的SPI功能,但是用IO口直接模拟SPI读回来的数据依然是0xFF

使用特权

评论回复
16
qinhuan7|  楼主 | 2013-1-6 19:31 | 只看该作者
哎,终于找到问题所在了,官方给的驱动库里,在SPI接收函数里,读取寄存器前使用的是RDRF标志位,当接收寄存器一有数据,这个标志位就置位,然后就开始读值,但是接收寄存器并没有将数据接收完,所以将此标志位改为TBI标志位时,也就是当总线空闲时读取数据就正确了。

使用特权

评论回复
17
lirunze| | 2013-1-6 19:45 | 只看该作者
恭喜楼主

使用特权

评论回复
18
yqzz163| | 2013-8-22 11:12 | 只看该作者
楼主,以后可以多一个选择了,用一下Eperspin的MR25H256这颗型号,可以完全PIN-TO-PIN

使用特权

评论回复
19
huthuthut| | 2013-12-18 16:09 | 只看该作者
我最近也在调富士通的spi,但是我发现我向TDR寄存器中写数据后,发不出去,发现是时钟管脚没有时序输出,我想问一下配置完管脚和寄存器后,向TDR写数据,是不是就会产生时序将数据发出(使能发送)

使用特权

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

本版积分规则

个人签名:把学习当成一种娱乐!

26

主题

400

帖子

7

粉丝