原创 W25Q16BV driver sample(I)

2010-8-16 08:49 4312 19 22 分类: 消费电子


Perhaps any people from earth knows that the atmel dataflash is short. I do NOT know why. Somebody said atmel isnot so good company that she is planing to rise the chip price by this way. The others said that many people in this market are crasy to buy and store so mang chips for grasping unnomal money... We don't know whose opion is right...
; (


Drive the flash from other company. The OLD Chinese Aphorism said: "After Butcher Zhang die, we have to eat the pork with full hair?"("死了张屠户, 我们就得吃带毛的猪?")
Searching some weeks, we found the spi flash from winbond seemed to satify us. The 4M bit flash W25Q16xx is enough in current market.
We uploaded our simple driver source code here. I wish it will help some engineer or company to replant new winbond flash for their case. Anyway, the price of winbond spi-flash from my provider is good. ; ) Of course, if you touch me then I will tell u... But it is not appropriate to paste the price in the public topic. Right? ;&


The important different issue from the other spi memory chip is: ADD BUSY DELAY FUNCITON! If not, we will found some fails at our reading event.


The source are written with C, running NXP arm7 chip.

// flash size
#define     W25Q16_TOTAL_SIZE                   0x200000        // 256*8192 bytes = 2048k = 2M = 0x200000
#define     REAL_PAGE_SIZE                      256             // 256 bytes/page

// command opcode
#define     RSR1_INST                   0x05  // Read Status Register-1
#define     DEID_INST                   0xab  // Read Device ID
#define     MDID_INST                   0x90  // Read Manufacturer/Device ID
#define     JEID_INST                   0x9f  // Read Manufacturer/Memory Type/Capacity
#define     FTRD_INST                   0x0b  // Fast Read
#define     WREN_INST                   0x06  // Write Enable
#define     STER_INST                   0x20  // Sector Erase
#define     PGWR_INST                   0x02  // Page Program


// init
void w25q16_init(void)
{
        IO0DIR |= SPI0CS;                               
        IO0SET = SPI0CS;   
 
        delay_ms(10);
}


// read status register, default return we read is 0x00, that means none of the array protected
U8 w25q16_rdsr_cmd(void)
{
        U8 data;
       
        IO0CLR = SPI0CS;
        spi0_send_U8(RSR1_INST);
        data = spi0_read_U8();
        IO0SET = SPI0CS;

        return data;       
}

/*
 *      Status Register Format:
 *      Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0
 *           | SEC  |  TB  | BP2  | BP1  | BP0  | WEL  | BUSY
 */
void w25q16_busy_delay(void)
{
        U8 status;
       
        do {
            status = w25q16_rdsr_cmd();
        } while ((status & 0x01) == 0x01);
}

// read device id, return must be 0x14 for W25Q16BV
U8 w25q16_deid_cmd(void)
{
        U8 data;
   
        w25q16_busy_delay();       
       
        IO0CLR = SPI0CS;
        spi0_send_U8(DEID_INST);
        spi0_send_U8(0x00);                             // dummy
        spi0_send_U8(0x00);                             // dummy
        spi0_send_U8(0x00);                             // dummy
        data = spi0_read_U8();
        IO0SET = SPI0CS; 
       
        return data;
}

W25Q16BV driver sample(I)
W25Q16BV driver sample(II)

文章评论3条评论)

登录后参与讨论

用户1277994 2010-8-17 15:24

听写能力是靠实际应用才能快速提高的。不过,您的这些有意思的经历分享,用中文写出来,看起来才更舒服啊。

allen_zhan_752827529 2010-8-17 13:14

谢谢` 我的E文很烂. 并且是典型的工程师E文. listenning & speaking is so poor. 话说回来, 兼容 winbond W25Q16 serial, 一个重要的应用提示是, 注意到 SO-8 的封装设计问题. SO-8 的 size 有很多种. W25Q16 的大小, 与 atmel 的 at45db 系列是一致的. 如果设计太小的 SO-8 封装, 实际拖焊后, 还有虚焊存在. 这是我用半个小时的痛苦经历获得的教训.

用户1277994 2010-8-16 13:55

博主英文太好了。
相关推荐阅读
allen_zhan 2023-02-27 19:08
对"三极管"译名由来的探讨
想讨论一个有意思的话题:今天中国大陆的电子业界, 为何将 BJT 称呼为 "三极管"? 或因其象形, 前辈自行进行随意的不严谨定义么? 带着疑问我们做了一下延伸查阅, 或得出这样的结论, 即中译名"三...
allen_zhan 2023-02-19 18:15
对知乎提问"为何三极管的一个PN结工作在反偏"的回复
将这个回复, 也发表在博文中, 作为自己的一个学习笔记叭.知乎问题: "三极管里面的PN结相当于二极管,为什么里面PN结加反向电压也能导通?"我的回复:首先, 二极管的"反向"概念, 容易给初学者某种...
allen_zhan 2023-02-18 10:17
从肖特基二极管到PN结与三极管
最近数个工作日的兴趣是回顾电子基础器件的发明/发展历史, 期待夯实技术基础的底蕴. 在学习与搜索资料的过程中, 顺便对知乎的一个同学的基础问题, 进行了回复. 不小心回复一下就成了千字文, 觉得挺有趣...
allen_zhan 2023-01-28 11:53
微功率 ISM 频率探讨相关文档组总结
不知不觉, 自开启关于微功率频率的话题起, 即从第一份文章写就到今天总结之日, 已经接近 10 个工作日左右. 早先的想法是对工程界未来的微功率设备相关项目, 从项目规划开始, 对选择系统, 频率, ...
allen_zhan 2023-01-27 22:50
关于 LoRa 应用场景的讨论
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. "第52号文" 对 470MHz 的约束引自 如下:(四)民用计量仪表限在建筑楼宇、住宅小区及村庄等小范围内组网应用,任意时刻限...
allen_zhan 2023-01-25 13:24
ISM 频段中 2.4G 与 5.8GHz 设备的使用与限制
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. ISM 频段定义中的 2.4G 与 5.8GHz正如同 文中确定的, 2.4G, 5.8GHz 属于中国大陆 ISM 频段的定义...
我要评论
3
19
关闭 站长推荐上一条 /2 下一条