uboot 添加W25Q64

这篇博客介绍了如何在UBoot中为Winbond的W25Q64闪存设备添加驱动支持。内容包括定义的SPI闪存命令、Winbond特定的ID以及对应的闪存参数结构体,以及读写和擦除操作的实现函数。
摘要由CSDN通过智能技术生成
/*
 * Copyright 2008, Network Appliance Inc.
 * Author: Jason McMullan <mcmullan <at> netapp.com>
 * Licensed under the GPL-2 or later.
 */
#include <common.h>
#include <malloc.h>
#include <spi_flash.h>
#include "spi_flash_internal.h"
/* M25Pxx-specific commands */
#define CMD_W25_WREN        0x06    /* Write Enable */
#define CMD_W25_WRDI        0x04    /* Write Disable */
#define CMD_W25_RDSR        0x05    /* Read Status Register */
#define CMD_W25_WRSR        0x01    /* Write Status Register */
#define CMD_W25_READ        0x03    /* Read Data Bytes */
#define CMD_W25_FAST_READ    0x0b    /* Read Data Bytes at Higher Speed */
#define CMD_W25_PP        0x02    /* Page Program */
#define CMD_W25_SE        0x20    /* Sector (4K) Erase */
#define CMD_W25_BE        0xd8    /* Block (64K) Erase */
#define CMD_W25_CE        0xc7    /* Chip Erase */
#define CMD_W25_DP        0xb9    /* Deep Power-down */
#define CMD_W25_RES        0xab    /* Release from DP, and Read Signature */

#define WINBOND_ID_W25X10A        0x3011
#define WINBOND_ID_W25X20A        0x3012
#define WINBOND_ID_W25X40A        0x3013
#define WINBOND_ID_W25X80A        0x3014
#define WINBOND_ID_W25X16        0x3015
#define WINBOND_ID_W25X32        0x3016
#define WINBOND_ID_W25X64        0x3017
#define WINBOND_ID_W25Q16B        0x4015
#define WINBOND_ID_W25Q32B        0x4016
#define WINBOND_ID_W25Q64        0x4017
#define WINBOND_ID_W25Q128        0x4018

#define WINBOND_SR_WIP        (1 << 0)    /* Write-in-Progress */

struct winbond_spi_flash_params {
    uint16_t    id;
    /* Log2 of page size in power-of-two mode */
    uint8_t        l2_page_size;
    uint16_t    pages_per_sector;
    uint16_t    sectors_per_block;
//    uint8_t        nr_blocks;
    uint16_t    nr_blocks;
    const char    *name;
};
/* spi_flash needs to be first so upper layers can free() it */
struct winbond_spi_flash {
    struct spi_flash flash;
    const struct winbond_spi_flash_params *params;
};
static inline struct winbond_spi_flash *
to_winbond_spi_flash(struct spi_flash *flash)
{
    return container_of(flash, struct winbond_spi_flash, flash);
}
static const struct winbond_spi_flash_params winbond_spi_flash_table[] = {
    {
        .id            = WINBOND_ID_W25X10A,
        .l2_page_size        = 8,
        .pages_per_sector    = 16,
        .sectors_per_block    = 16,
        .nr_blocks        = 2,
        .name            = "W25X10A",
    },
    {
        .id            = WINBOND_ID_W25X20A,
        .l2_page_size        = 8,
        .pages_per_sector    = 16,
        .sectors_per_block    = 16,
        .nr_blocks        = 4,
    
U-Boot是一种广泛使用的开源引导加载程序,用于嵌入式系统的引导过程。该程序提供了各种功能,可以使用户在设备上运行和测试自己的固件。DNW(Designated Network Writer)是一种用于通过网络从电脑上写入数据到设备的工具。 要在U-Boot添加DNW功能,需要进行以下步骤: 1. 首先,需要阅读U-Boot的源代码,了解其体系结构和功能模块。找到与编译和加载固件相关的代码,并确定在哪里加入DNW的代码。 2. 接下来,需要下载并安装DNW工具,并确保该工具能在您的开发环境上正常工作。这通常包括安装相关的依赖项和配置网络连接。 3. 在U-Boot的源代码中,找到适当的位置插入DNW的功能代码。这可能涉及修改Makefile文件和源代码文件,以确保正确地编译和链接DNW代码。 4. 在源代码中添加与DNW工具通信的代码。这包括创建网络连接、发送和接收数据等。确保代码能够与DNW工具进行交互,正确地写入数据到设备。 5. 编译U-Boot代码,并生成适用于目标设备的固件。确保编译过程没有错误,并生成了正常工作的固件。 6. 将生成的固件烧录到目标设备上,并验证DNW功能是否正常工作。确保设备能够通过网络接收数据,并正确地写入到设备的存储器中。 在添加DNW功能时,还需要注意与其他功能的兼容性和冲突问题。确保在添加DNW功能后,其他U-Boot功能仍然正常工作,并没有引入新的问题。 总结起来,在U-Boot添加DNW功能需要对U-Boot的源代码进行修改和扩展,以支持通过网络写入数据到设备。这需要仔细的编程和调试,以确保功能正确地实现和工作。添加DNW功能可以提高固件的调试和开发效率,使用户能够更方便地更新设备的固件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值