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

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

?? eccnandflash.c

?? IAR5.2下 AT91SAM9260 ARM 對 MCP2515 控制源化碼
?? 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精品久久久画质超高清| 精品视频全国免费看| 亚洲国产成人tv| 欧美色图激情小说| 午夜精品福利在线| 欧美一区二区视频网站| 久久国产精品99久久久久久老狼 | 精品视频123区在线观看| 亚洲一区二区三区四区在线观看| 欧美日韩成人高清| 毛片av一区二区三区| 久久精品在线免费观看| av在线播放不卡| 亚洲午夜激情网站| 日韩免费高清电影| 成人在线综合网站| 一区二区三区中文免费| 日韩一区二区在线观看| 免费日本视频一区| 国产亚洲精品福利| 欧美在线free| 久久99国产精品免费网站| 国产精品拍天天在线| 欧美在线小视频| 国产露脸91国语对白| 亚洲免费成人av| 日韩欧美黄色影院| 97久久久精品综合88久久| 日韩国产欧美在线观看| 欧美国产亚洲另类动漫| 欧美日韩色一区| 国产精品一区二区果冻传媒| 尤物在线观看一区| 2017欧美狠狠色| 欧美亚洲国产一区二区三区| 国产一区二区电影| 亚洲一区二区在线视频| 日本一区二区综合亚洲| 欧美日韩国产中文| 国产成人在线网站| 亚洲aⅴ怡春院| 国产亚洲精品中文字幕| 日韩亚洲欧美在线观看| 色香蕉成人二区免费| 国产美女娇喘av呻吟久久| 午夜免费久久看| 1024精品合集| 国产日韩欧美在线一区| 欧美一区三区二区| 日本黄色一区二区| 国产99久久久国产精品潘金 | 美女www一区二区| 国产精品水嫩水嫩| 精品久久免费看| 欧美丰满高潮xxxx喷水动漫| 不卡的电影网站| 国产寡妇亲子伦一区二区| 午夜视黄欧洲亚洲| 亚洲国产毛片aaaaa无费看| 日韩理论片中文av| 国产欧美日韩另类视频免费观看| 日韩欧美国产1| 欧美一级日韩一级| 欧美又粗又大又爽| 色av一区二区| 日本精品一区二区三区高清| 97se亚洲国产综合在线| 成人av电影免费观看| 国产一区二区h| 久久超碰97中文字幕| 美女精品自拍一二三四| 日本成人在线视频网站| 亚洲国产乱码最新视频| 久久精品视频网| 欧美喷潮久久久xxxxx| 亚洲高清久久久| 欧美国产丝袜视频| 精品国产一区a| 26uuu另类欧美亚洲曰本| 欧美日韩一区中文字幕| 成人免费av网站| 国产一区美女在线| 蜜臀精品久久久久久蜜臀| 亚洲精品久久久蜜桃| 中文字幕一区av| 久久久久久综合| 久久精品国产久精国产| 国产一区二区三区香蕉| 天涯成人国产亚洲精品一区av| 中文字幕亚洲在| 久久精品人人做人人爽97 | 麻豆视频一区二区| 亚洲午夜在线电影| 国产精品久久久久国产精品日日| 精品国产91久久久久久久妲己| 7777精品伊人久久久大香线蕉完整版 | 亚洲黄网站在线观看| 国产日韩av一区| 欧美情侣在线播放| 欧美亚男人的天堂| 欧美在线免费播放| 欧美性做爰猛烈叫床潮| 在线观看日韩一区| 日韩精品在线一区| 在线播放欧美女士性生活| 欧美日韩亚洲丝袜制服| 欧美伊人精品成人久久综合97 | 亚洲欧美另类小说| 国产精品国产三级国产a| 国产精品视频你懂的| 欧美日韩高清一区二区三区| 久久综合九色综合欧美98| 欧美大片在线观看| 成人欧美一区二区三区| 男人的天堂久久精品| 亚洲精品日产精品乱码不卡| 久久精品国产99| 国内精品伊人久久久久影院对白| 中文字幕一区二区三区蜜月| 日韩视频一区二区三区 | 制服丝袜中文字幕一区| 欧美性猛交xxxxxx富婆| 91麻豆精品国产| 欧美一区二区三区免费大片 | 国产精品一区二区在线观看不卡| 人人精品人人爱| 91啪亚洲精品| 欧美日韩精品系列| 久久久综合视频| 国产精品美女久久久久久久| 亚洲愉拍自拍另类高清精品| 午夜精品免费在线观看| 日本麻豆一区二区三区视频| 一区二区三区欧美亚洲| 国产成人午夜精品影院观看视频 | 麻豆精品国产传媒mv男同| 色婷婷久久综合| 91麻豆精品国产无毒不卡在线观看| 精品欧美一区二区久久| 中文字幕欧美日韩一区| 亚洲一区二区三区激情| 久国产精品韩国三级视频| 国产91精品露脸国语对白| 在线观看三级视频欧美| 欧美区在线观看| 香蕉久久一区二区不卡无毒影院| 久久国产精品99久久久久久老狼| 99久久久无码国产精品| 欧美精品1区2区| 亚洲精品日韩一| 免费久久精品视频| 日本在线不卡一区| 欧美性生活影院| 国产亚洲一区字幕| 视频一区免费在线观看| 美女精品一区二区| 色先锋aa成人| 国产亚洲婷婷免费| 亚洲妇女屁股眼交7| 久久激情五月激情| 欧美午夜精品一区二区三区| 中文字幕精品在线不卡| 五月婷婷激情综合网| 成人综合婷婷国产精品久久蜜臀| 亚洲成人午夜影院| 蜜桃视频第一区免费观看| 色婷婷狠狠综合| 日本一区二区三区在线不卡| 亚洲一区在线免费观看| 成人av免费观看| 久久久久高清精品| 精品一区二区三区在线播放| 自拍偷拍国产精品| 不卡的av在线播放| 欧美高清一级片在线观看| 一区二区欧美精品| 成人免费视频播放| 精品国产一区二区精华| 美国十次综合导航| 欧美日韩国产首页在线观看| 亚洲人成影院在线观看| 日韩成人av影视| 欧美美女视频在线观看| 亚洲精品水蜜桃| 99精品欧美一区二区三区小说| 国产91精品久久久久久久网曝门| 亚洲精品在线观看网站| 亚洲成人手机在线| 日本韩国精品在线| 亚洲精品写真福利| 欧美日韩一区二区三区在线看| 亚洲欧美电影院| 91久久国产综合久久| 亚洲国产成人在线| 成人成人成人在线视频| 国产精品欧美经典| 国产一区二区按摩在线观看| 精品国产免费人成电影在线观看四季|