亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? eccnandflash.c

?? at91sam9263操作NAND FLASH代碼
?? C
字號:
/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------

#include "EccNandFlash.h"
#include "NandCommon.h"
#include "NandSpareScheme.h"
#include <utility/trace.h>
#include <utility/hamming.h>
#include <utility/assert.h>

#include <string.h>

//------------------------------------------------------------------------------
//         Internal definitions
//------------------------------------------------------------------------------

/// Custom INFO trace level for the current file.
#define INFO        trace_INFO
/// Custom DEBUG trace level for the current file.
#define DEBUG       trace_DEBUG

/// Casts
#define MODEL(ecc)  ((struct NandFlashModel *) ecc)
#define RAW(ecc)    ((struct RawNandFlash *) ecc)

//------------------------------------------------------------------------------
//         Exported functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Initializes an EccNandFlash instance.
/// \param ecc  Pointer to an EccNandFlash instance.
/// \param model  Pointer to the underlying nand chip model. Can be 0.
/// \param commandAddress  Address at which commands are sent.
/// \param addressAddress  Address at which addresses are sent.
/// \param dataAddress  Address at which data is sent.
/// \param pinChipEnable  Pin controlling the CE signal of the NandFlash.
/// \param pinReadyBusy  Pin used to monitor the ready/busy signal of the Nand.
//------------------------------------------------------------------------------
unsigned char EccNandFlash_Initialize(
    struct EccNandFlash *ecc,
    const struct NandFlashModel *model,
    unsigned int commandAddress,
    unsigned int addressAddress,
    unsigned int dataAddress,
    const Pin pinChipEnable,
    const Pin pinReadyBusy)
{
    return RawNandFlash_Initialize(RAW(ecc),
                                   model,
                                   commandAddress,
                                   addressAddress,
                                   dataAddress,
                                   pinChipEnable,
                                   pinReadyBusy);
}

//------------------------------------------------------------------------------
/// Reads the data and/or spare of a page of a nandflash chip, and verify that
/// the data is valid using the ECC information contained in the spare. If one
/// buffer pointer is 0, the corresponding area is not saved.
/// Returns 0 if the data has been read and is valid; otherwise returns either
/// NandCommon_ERROR_CORRUPTEDDATA or ...
/// \param ecc  Pointer to an EccNandFlash instance.
/// \param block  Number of block to read from.
/// \param page  Number of page to read inside given block.
/// \param data  Data area buffer.
/// \param spare  Spare area buffer.
//------------------------------------------------------------------------------
unsigned char EccNandFlash_ReadPage(
    const struct EccNandFlash *ecc,
    unsigned short block,
    unsigned short page,
    void *data,
    void *spare)
{
    unsigned char tmpData[NandCommon_MAXPAGEDATASIZE];
    unsigned char tmpSpare[NandCommon_MAXPAGESPARESIZE];
    unsigned char error;
    unsigned char hamming[NandCommon_MAXSPAREECCBYTES];
    unsigned short pageDataSize = NandFlashModel_GetPageDataSize(MODEL(ecc));
    unsigned char pageSpareSize = NandFlashModel_GetPageSpareSize(MODEL(ecc));

    trace_LOG(DEBUG, "EccNandFlash_ReadPage(B#%d:P#%d)\n\r", block, page);

    // Start by reading the spare and the data
    error = RawNandFlash_ReadPage(RAW(ecc), block, page, tmpData, tmpSpare);
    if (error) {

        trace_LOG(trace_ERROR, "EccNandFlash_ReadPage: Failed to read page\n\r");
        return error;
    }

    // Retrieve ECC information from page and verify the data
    NandSpareScheme_ReadEcc(NandFlashModel_GetScheme(MODEL(ecc)), tmpSpare, hamming);
    error = Hamming_Verify256x(tmpData, pageDataSize, hamming);
    if (error && (error != Hamming_ERROR_SINGLEBIT)) {

        trace_LOG(trace_ERROR, "EccNandFlash_ReadPage: Unrecoverable data\n\r");
        return NandCommon_ERROR_CORRUPTEDDATA;
    }

    // Copy data and/or spare into final buffers
    if (data) {

        memcpy(data, tmpData, pageDataSize);
    }
    if (spare) {

        memcpy(spare, tmpSpare, pageSpareSize);
    }

    return 0;
}

//------------------------------------------------------------------------------
/// Writes the data and/or spare area of a nandflash page, after calculating an
/// ECC for the data area and storing it in the spare. If no data buffer is
/// provided, the ECC is read from the existing page spare. If no spare buffer
/// is provided, the spare area is still written with the ECC information
/// calculated on the data buffer.
/// Returns 0 if successful; otherwise returns an error code.
/// \param ecc Pointer to an EccNandFlash instance.
/// \param block  Number of the block to write in.
/// \param page  Number of the page to write inside the given block.
/// \param data  Data area buffer, can be 0.
/// \param spare  Spare area buffer, can be 0.
//------------------------------------------------------------------------------
unsigned char EccNandFlash_WritePage(
    const struct EccNandFlash *ecc,
    unsigned short block,
    unsigned short page,
    void *data,
    void *spare)
{
    unsigned char error;
    unsigned char tmpSpare[NandCommon_MAXPAGESPARESIZE];
    unsigned short pageDataSize = NandFlashModel_GetPageDataSize(MODEL(ecc));
    unsigned short pageSpareSize = NandFlashModel_GetPageSpareSize(MODEL(ecc));
    unsigned char hamming[NandCommon_MAXSPAREECCBYTES];

    ASSERT(data || spare, "EccNandFlash_WritePage: At least one area must be written\n\r");
    trace_LOG(DEBUG, "EccNandFlash_WritePage(B#%d:P#%d)\n\r", block, page);

    // Compute ECC on the new data, if provided
    // If not provided, hamming code set to 0xFFFF.. to keep existing bytes
    memset(hamming, 0xFF, NandCommon_MAXSPAREECCBYTES);
    if (data) {

        // Compute hamming code on data
        Hamming_Compute256x(data, pageDataSize, hamming);
    }

    // Store code in spare buffer (if no buffer provided, use a temp. one)
    if (!spare) {

        spare = tmpSpare;
        memset(spare, 0xFF, pageSpareSize);
    }
    NandSpareScheme_WriteEcc(NandFlashModel_GetScheme(MODEL(ecc)), spare, hamming);

    // Perform write operation
    error = RawNandFlash_WritePage(RAW(ecc), block, page, data, spare);
    if (error) {

        trace_LOG(trace_ERROR, "EccNandFlash_WritePage: Failed to write page\n\r");
        return error;
    }

    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品免费观看| 亚洲成a人片在线观看中文| 日韩三级视频在线看| 91网站最新网址| 成人福利视频在线| 成人激情视频网站| av中文字幕一区| 99精品欧美一区二区蜜桃免费 | 亚洲国产欧美在线| 精品国产乱子伦一区| 欧美成人午夜电影| 日韩欧美黄色影院| 久久久国产精品不卡| 欧美国产视频在线| 亚洲女性喷水在线观看一区| 亚洲精品久久久久久国产精华液| 一区二区三区色| 偷拍日韩校园综合在线| 七七婷婷婷婷精品国产| 蜜桃传媒麻豆第一区在线观看| 免费一级欧美片在线观看| 激情综合色播激情啊| 成人午夜免费电影| 99久久伊人网影院| 欧美午夜宅男影院| 日韩一级免费观看| 国产嫩草影院久久久久| 最好看的中文字幕久久| 亚洲一区二区三区在线看 | 欧美肥胖老妇做爰| 久久综合久久鬼色| 国产精品卡一卡二卡三| 亚洲国产成人porn| 国产一区不卡视频| 日本精品一区二区三区四区的功能| 欧美日韩中文字幕精品| 在线观看精品一区| 综合在线观看色| 日本三级亚洲精品| 成人免费高清在线观看| 欧美丝袜丝交足nylons图片| 欧美r级电影在线观看| 亚洲欧美精品午睡沙发| 日韩av中文字幕一区二区三区| 国产精品18久久久久久久网站| 91年精品国产| 欧美成人vps| 亚洲综合免费观看高清完整版在线| 蜜桃免费网站一区二区三区| 91亚洲精品久久久蜜桃| 日韩精品一区在线| 一区二区三区四区高清精品免费观看| 精品在线视频一区| 欧美亚州韩日在线看免费版国语版 | 人人狠狠综合久久亚洲| 色欧美乱欧美15图片| 久久久一区二区| 免费在线视频一区| 日本精品视频一区二区三区| 欧美国产一区二区在线观看| 精品一区二区三区免费播放| 欧美午夜影院一区| 国产精品久久久久精k8| 国产乱码精品一区二区三区五月婷| 99国产精品视频免费观看| 成人av电影免费在线播放| 亚洲国产高清aⅴ视频| 亚洲一区二区高清| 欧美r级在线观看| 成人99免费视频| 日日欢夜夜爽一区| 国产色产综合产在线视频 | 日本三级韩国三级欧美三级| 国产三级一区二区三区| 欧美美女喷水视频| 久久美女高清视频| 国产老肥熟一区二区三区| 精品久久久三级丝袜| 久久精品噜噜噜成人88aⅴ| 制服丝袜激情欧洲亚洲| 免费的国产精品| 日韩一区二区三| 乱中年女人伦av一区二区| 91精品国产美女浴室洗澡无遮挡| 午夜亚洲福利老司机| 欧美日韩在线观看一区二区| 天堂一区二区在线| 欧美高清视频不卡网| 蜜臀av一区二区三区| 久久久久久久久久久久久久久99 | 成人午夜av电影| 亚洲国产精品高清| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 久久一夜天堂av一区二区三区| 激情成人综合网| 中文字幕欧美区| 色哟哟欧美精品| 水野朝阳av一区二区三区| 日韩视频免费观看高清在线视频| 久久av资源站| 国产精品视频免费| 在线观看一区二区视频| 日韩综合在线视频| 久久精品欧美一区二区三区不卡| 成人一区二区视频| 亚洲国产精品一区二区尤物区| 日韩欧美三级在线| 成人午夜电影久久影院| 亚洲综合色自拍一区| 精品国产露脸精彩对白| 成人av免费在线| 免费成人av资源网| 国产精品天干天干在观线| 91国产丝袜在线播放| 蜜桃91丨九色丨蝌蚪91桃色| 久久久精品影视| 欧美日韩国产一级片| 懂色av中文字幕一区二区三区 | 亚洲精品在线免费观看视频| 成人免费看片app下载| 五月天亚洲精品| 亚洲国产成人私人影院tom| 欧美视频第二页| 成人午夜激情影院| 免费在线一区观看| 亚洲综合成人在线视频| 国产亚洲短视频| 欧美老肥妇做.爰bbww| 成人激情小说乱人伦| 激情久久五月天| 日韩专区中文字幕一区二区| 亚洲麻豆国产自偷在线| 精品国产成人系列| 欧美日韩中文另类| 白白色 亚洲乱淫| 精品一区二区免费看| 亚洲第一搞黄网站| 亚洲美腿欧美偷拍| 中文字幕在线不卡| 国产日本欧洲亚洲| 亚洲精品一区二区三区精华液 | 国产精品美女久久久久av爽李琼 | 成人性视频免费网站| 老司机精品视频一区二区三区| 一区二区三区毛片| 国产精品久久久一区麻豆最新章节| 精品国产一区二区精华| 欧美乱妇一区二区三区不卡视频 | 亚洲永久免费av| 亚洲狼人国产精品| 亚洲欧美国产77777| 中文字幕在线观看不卡视频| 欧美极品aⅴ影院| 久久久久综合网| 久久久www成人免费无遮挡大片| 日韩免费看的电影| 日韩欧美激情一区| www成人在线观看| 国产亚洲婷婷免费| 亚洲国产精品精华液ab| 亚洲国产成人一区二区三区| 国产精品九色蝌蚪自拍| 亚洲国产精品精华液2区45| 国产精品视频一区二区三区不卡| 亚洲国产岛国毛片在线| 日韩一区日韩二区| 亚洲在线观看免费视频| 亚洲精品福利视频网站| 亚洲成人免费视频| 亚洲在线一区二区三区| 蜜臀91精品一区二区三区| 精油按摩中文字幕久久| 国产一区二区三区最好精华液 | 亚洲欧美成人一区二区三区| 亚洲综合偷拍欧美一区色| 日本伊人午夜精品| 国产美女一区二区三区| caoporen国产精品视频| 欧美午夜免费电影| 欧美一区二区高清| 国产免费久久精品| 一区二区不卡在线播放| 天堂一区二区在线| 国产成人夜色高潮福利影视| 97se亚洲国产综合自在线 | 精品一区二区三区在线观看| 国产成人av影院| 欧洲国内综合视频| 精品国一区二区三区| 中文字幕第一区二区| 亚洲电影一区二区三区| 国产又粗又猛又爽又黄91精品| 91原创在线视频| 日韩免费福利电影在线观看| 国产精品久久久久影视| 奇米色一区二区| 91丨国产丨九色丨pron| 欧美成人精品高清在线播放| 亚洲视频免费在线| 国产综合色在线|