[STM32L4] 求助!关于SST39VF6401B无法擦除问题!

[复制链接]
3349|22
 楼主| 范寿铭 发表于 2017-5-6 12:57 | 显示全部楼层 |阅读模式
本人最近在用SST39VF6401B这颗NORFLASH做项目,发现能正常读写,,但是按照芯片手册上的擦除命令发送擦除指令,却无法擦除,有没有用过的朋友指点一下。  图为擦除程序代码。
QQ图片20170506125633.png
 楼主| 范寿铭 发表于 2017-5-6 19:28 | 显示全部楼层
自己顶一下iai
yiyigirl2014 发表于 2017-5-6 19:29 | 显示全部楼层
yiyigirl2014 发表于 2017-5-6 19:30 | 显示全部楼层
#define FALSE                   0
#define TRUE                    1

#define SECTOR_SIZE             2048    // Must be 2048 words for 39VF640XB
#define BLOCK_SIZE              32768   // Must be 32K words for 39VF640XB

#define SST_ID                  0x00BF  // SST Manufacturer's ID code
#define SST_39VF6401B            0x236D  // SST39VF6401B device code
#define SST_39VF6402B            0x236C  // SST39VF6402B device code

typedef unsigned char           BYTE;     // BYTE is 8-bit in length
//typedef unsigned int            WORD;     // WORD is 16-bit in length
typedef unsigned short            WORD;     // WORD is 16-bit in length, ARM
//typedef unsigned long int       Uint32;   // Uint32 is 32-bit in length
typedef unsigned int       Uint32;   // Uint32 is 32-bit in length, ARM

//Uint32 system_base = 0x4000000;  // 4GByte System Memory Address.

#define system_base  0x4000000
        // This sample code uses 0x4000000 as the system_base address in ARM system.
           // The user should modify this address accordingly.

//#define sysAddress(offset) ((volatile WORD *)(system_base + offset))
#define sysAddress(offset) ((volatile WORD *)(system_base + (((WORD)offset)<<1))) //For ARM CPU


#define MAX_TIMEOUT        0x07FFFFFF   // A ceiling constant used by Check_Toggle_
        // Ready() and Check_Data_Polling().
              // The user should modify this constant accordingly.

// --------------------------------------------------------------------
//                       EXTERNAL ROUTINES
// --------------------------------------------------------------------
extern void     Delay_10_Micro_Seconds();
extern void     Delay_20_Micro_Seconds();
extern void     Delay_150_Nano_Seconds();
extern void     Delay_25_Milli_Seconds();
extern void     Delay_50_Milli_Seconds();



// --------------------------------------------------------------------

int Check_SST_39VF640XB(void);
void CFI_Query(WORD*);
void SecID_Query(WORD*, WORD*);
int Erase_One_Sector(Uint32);
int Erase_One_Block (Uint32);
int Erase_Entire_Chip(void);
int Program_One_Word (WORD*, Uint32);
int Program_One_Sector (WORD*, Uint32);
int Program_One_Block (WORD *Src, Uint32 Dst);
int SecID_Lock_Status(void);
int User_SecID_Word_Program (WORD*, WORD*, int);
void User_SecID_Lock_Out (void);
void Erase_Suspend (void);
void Erase_Resume (void);
int Check_Toggle_Ready (Uint32);
int Check_Data_Polling (Uint32, WORD);
yiyigirl2014 发表于 2017-5-6 19:30 | 显示全部楼层
直接用这个函数里面定义的这些操作函数搞就行了,你自己写的不一定靠谱。
 楼主| 范寿铭 发表于 2017-5-6 21:10 | 显示全部楼层
yiyigirl2014 发表于 2017-5-6 19:30
直接用这个函数里面定义的这些操作函数搞就行了,你自己写的不一定靠谱。 ...

用了你发的驱动 还是不行
huarana 发表于 2017-5-6 21:54 | 显示全部楼层
写 不就是擦除吗?

 楼主| 范寿铭 发表于 2017-5-6 21:56 | 显示全部楼层
huarana 发表于 2017-5-6 21:54
写 不就是擦除吗?

NORFLASH   只能写0  不能写1
yiyigirl2014 发表于 2017-5-6 22:39 | 显示全部楼层
范寿铭 发表于 2017-5-6 21:10
用了你发的驱动 还是不行

官方提供的应该没有问题啊,你看看是哪儿没有对,什么宏了之类的。。
 楼主| 范寿铭 发表于 2017-5-7 00:02 | 显示全部楼层
yiyigirl2014 发表于 2017-5-6 22:39
官方提供的应该没有问题啊,你看看是哪儿没有对,什么宏了之类的。。

哎~咋都不行  就差抓时序了
uptown 发表于 2017-5-7 17:11 | 显示全部楼层
读写一个字节能够行?
uptown 发表于 2017-5-7 17:13 | 显示全部楼层
楼主应该先试试一个字节的写入和读取是否可行,检查硬件电路的问题。
 楼主| 范寿铭 发表于 2017-5-8 10:16 | 显示全部楼层
问题解决了,芯片有个引脚是#WP,用来保护底部或者顶部的BOOT块的,我给接地了,实行整片擦出的时候就变成无效了,当时以为这个引脚接地只是保护boot区不被擦出,谁成想芯片为了保护这个块,干脆整片擦除命令就不执行
 楼主| 范寿铭 发表于 2017-5-8 10:17 | 显示全部楼层
uptown 发表于 2017-5-7 17:13
楼主应该先试试一个字节的写入和读取是否可行,检查硬件电路的问题。

还真让你说对了  硬件的事情
yiyigirl2014 发表于 2017-5-8 14:20 | 显示全部楼层
范寿铭 发表于 2017-5-8 10:16
问题解决了,芯片有个引脚是#WP,用来保护底部或者顶部的BOOT块的,我给接地了,实行整片擦出的时候就变成无 ...

牛叉,竟然还要这等情况。
 楼主| 范寿铭 发表于 2017-5-8 15:20 | 显示全部楼层
yiyigirl2014 发表于 2017-5-8 14:20
牛叉,竟然还要这等情况。

纠结了我三天   破芯片
yiyigirl2014 发表于 2017-5-8 15:22 | 显示全部楼层
范寿铭 发表于 2017-5-8 15:20
纠结了我三天   破芯片

哈哈,你没看清楚板子上的开关,还怨芯片了。哈哈。
 楼主| 范寿铭 发表于 2017-5-8 15:24 | 显示全部楼层
yiyigirl2014 发表于 2017-5-8 15:22
哈哈,你没看清楚板子上的开关,还怨芯片了。哈哈。

主要是它不按套路出牌啊
yiyigirl2014 发表于 2017-5-8 15:25 | 显示全部楼层
范寿铭 发表于 2017-5-8 15:24
主要是它不按套路出牌啊

每一个芯片都这样,我之前有个芯片忘了哪个了,那鸟芯片标志位清零不好使,后来仔细查手册,发现是写1是清零,真不按逻辑出牌。
 楼主| 范寿铭 发表于 2017-5-8 15:29 | 显示全部楼层
哈哈 有点意思  设计芯片的脑洞大开
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

69

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部