打印
[STM32F2]

STM32F2读写铁电存储器FM25H20的问题?

[复制链接]
3915|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangjy|  楼主 | 2014-11-29 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

有哪位用FM25H20铁电啊? 我现在用IO模拟SPI接口从FM25H20读出来数据全部为0XFF。急啊!!! 下面为程序,哪位帮我看看,问题出再哪儿?
麻烦指导一下!! 谢谢了

#include "common.h"

void Fram_delay(int i)
{
    while(i--)
    {
            asm("NOP");   //asm("NOP");
    }
}

static void Write_Byte(unsigned char SByte)
{
        unsigned char i,btemp;
        btemp = SByte;
        for(i=0; i<8; i++)
        {
                SPI2_SCK_L;
                Fram_delay(100);
                if(btemp & 0x80)
                        SPI2_MOSI_H;
                else
                        SPI2_MOSI_L;
                btemp<<=1;
                Fram_delay(100);
                SPI2_SCK_H;
                Fram_delay(100);
        }
}

static unsigned char Read_Byte(void)
{
        unsigned char i,btemp;
        btemp = 0x00;
        for(i=0; i<8; i++)
        {
                btemp<<=1;
                SPI2_SCK_L;
                Fram_delay(2);
                SPI2_SCK_H;       
                Fram_delay(100);
                btemp |= SPI2_MISO;
        }
        return btemp;
}

/*
功能:
- 从FM25H20批量读取数据
参数:
- address:FM25H20的地址,pdata:读出数据的存储指针,length:读出数据的长度
*/
void FM25_read(unsigned long address, unsigned char* pdata, unsigned long length)
{
        unsigned char* padr;
        unsigned long temp_adr,temp_len,i;

        temp_adr = address;
        temp_len = length;
        if(temp_adr >= FM_SIZE)
                temp_adr = temp_adr%FM_SIZE;
        padr=(unsigned char*)&temp_adr;

        FM_CS1_L;                 //片选使能
        Fram_delay(100);
        Write_Byte(CMD_READ);     //读指令
        Write_Byte(padr[2]);      //读地址高两位
        Write_Byte(padr[1]);      //读地址中间字节
        Write_Byte(padr[0]);      //读地址低字节
        /*读出数据*/
        for(i=0;i<temp_len;i++)
                pdata[i]=Read_Byte();
        Fram_delay(100);
        FM_CS1_H;                 //片选禁止
        Fram_delay(100);       
}

/*
功能:
- 从FM25H20批量:写入数据
参数:
- address:FM25H20的地址,pdata:写入数据的存储指针,length:写入数据的长度
*/
void FM25_write(unsigned long address, unsigned char* pdata, unsigned long length)
{
        unsigned char* padr;
        unsigned long temp_adr,temp_len,i;
        temp_adr = address;
        temp_len = length;
        if(temp_adr >= FM_SIZE)
                temp_adr = temp_adr%FM_SIZE;
        padr=(unsigned char*)&temp_adr;
       
        FM_CS1_L;                 //片选使能,写使能
        Fram_delay(100);
        Write_Byte(CMD_WREN);     //写使能
        Fram_delay(100);
        FM_CS1_H;
        Fram_delay(100);
        FM_CS1_L;
        Fram_delay(100);
        Write_Byte(CMD_WRITE);    //写指令
        Write_Byte(padr[2]);      //写地址高两位
        Write_Byte(padr[1]);      //写地址中间字节
        Write_Byte(padr[0]);      //写地址低字节
        /*写入数据*/
        for(i=0;i<temp_len;i++)
                Write_Byte(pdata[i]);
        Fram_delay(100);       
        FM_CS1_H;                 //片选禁止写保护
        Fram_delay(100);       
}


void TestEERW1(void)
{
  unsigned int i;
        char buf1[100],buf2[100];
        memset(buf1, 0, sizeof buf1);
        memset(buf2, 0, sizeof buf2);
       
        FM25_read(100, buf1, 100);
       
        for(i = 0; i < 100; i++)
        {
                buf2[i] = i;
        }       
        memset(buf1, 0, sizeof buf1);
        FM25_write(100, buf2, 100);
        FM25_read(100, buf1, 100);
  for(i = 0; i < 100; i++)
        {
                buf1[i] = i;
        }       
}

/*
功能:
- 初始化FM控制接口,IO模拟SPI
-
*/
void FM25_init(void)
{
        GPIO_InitTypeDef      GPIO_InitStructure;
               
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;        //GPIO_PuPd_UP;                          
        GPIO_InitStructure.GPIO_Pin = SPI2_MOSI_PIN;
        GPIO_Init(FM_SPI_PORT, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                          
    GPIO_InitStructure.GPIO_Pin = FM_CS1_PIN;
        GPIO_Init(FM_SPI_PORT, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //GPIO_PuPd_UP;                          
    GPIO_InitStructure.GPIO_Pin = SPI2_SCK_PIN;
        GPIO_Init(FM_SPI_PORT, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd =  GPIO_PuPd_DOWN; //GPIO_PuPd_NOPULL; //;        //GPIO_PuPd_UP;                          
    GPIO_InitStructure.GPIO_Pin = SPI2_MISO_PIN;
        GPIO_Init(FM_SPI_PORT, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                          
          GPIO_InitStructure.GPIO_Pin = FM_WP_PIN | FM_HOLD_PIN;
        GPIO_Init(FM_SPI_PORT, &GPIO_InitStructure);
                   
        FM_WP_UNLOCK;
        FM_HOLD_H;
       
        FM_CS1_H;               //片选置高
        SPI2_SCK_L;             //时钟置低
        SPI2_MOSI_H;            //数据置高
       
        TestEERW1();
       
}





沙发
acgean| | 2014-11-29 17:31 | 只看该作者
存储器还没有响应, 应该先验证时序波形,找示波器帮忙先看通信波形吧

使用特权

评论回复
板凳
toney163| | 2019-3-28 11:16 | 只看该作者
整个驱动我调通了,加我QQ,给你驱动   120144600

使用特权

评论回复
地板
frfgfvfd| | 2019-3-28 15:29 | 只看该作者
先确认硬件与时序没问题

使用特权

评论回复
5
国芯思辰IC| | 2023-4-13 16:04 | 只看该作者
您好 我们公司是做国产铁电存储器的,可以原位替换富士通赛普拉斯,有需要可以跟我们申请免费样品测试。郑淑珍13714112885,可以加我,发资料给你看看。

使用特权

评论回复
6
V853| | 2023-4-14 15:25 | 只看该作者
拿逻辑分析仪抓一下,看看是不是你发送的数据有问题。

使用特权

评论回复
7
朝生| | 2023-4-14 15:25 | 只看该作者
光看代码不好分析问题,有波形吗?

使用特权

评论回复
8
芯路例程| | 2023-4-14 15:26 | 只看该作者
看代码没啥问题,引脚都接对了吗?

使用特权

评论回复
9
SantaBunny| | 2023-4-16 18:35 | 只看该作者
拿逻辑分析仪抓一下,看看是不是发送的数据有问题。

使用特权

评论回复
10
Stahan| | 2023-4-19 23:49 | 只看该作者
看是不是硬件电路接的有问题

使用特权

评论回复
11
chenjunt| | 2023-4-21 23:41 | 只看该作者
存储器还没有响应, 应该先验证时序波形

使用特权

评论回复
12
guoyt| | 2023-4-21 23:42 | 只看该作者
找示波器帮忙先看通信波形吧

使用特权

评论回复
13
chenjunt| | 2023-4-21 23:44 | 只看该作者
先确认硬件与时序没问题

使用特权

评论回复
14
gongche| | 2023-4-21 23:46 | 只看该作者
拿逻辑分析仪抓一下,看看是不是你发送的数据有问题。

使用特权

评论回复
15
wyjie| | 2023-4-22 11:56 | 只看该作者
光看代码不好分析问题,有波形吗?

使用特权

评论回复
16
zwll| | 2023-4-22 11:57 | 只看该作者
看代码没啥问题,引脚都接对了吗?

使用特权

评论回复
17
chenjunt| | 2023-4-22 11:58 | 只看该作者
拿逻辑分析仪抓一下,看看是不是发送的数据有问题。

使用特权

评论回复
18
gongche| | 2023-4-22 11:59 | 只看该作者
看是不是硬件电路接的有问题

使用特权

评论回复
19
zhangjy|  楼主 | 2023-4-23 09:24 | 只看该作者
感谢各位,这个问题早已结帖!

使用特权

评论回复
20
xxrs| | 2023-6-8 19:04 | 只看该作者
存储器还没有响应, 应该先验证时序波形

使用特权

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

本版积分规则

29

主题

73

帖子

0

粉丝