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

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

?? sd_raw.c

?? MMC/SD操作
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <avr/io.h>#include "sd_raw.h"#if !SD_RAW_SAVE_RAM#include <string.h>#endif/** * \addtogroup sd_raw MMC/SD card raw access * * This module implements read and write access to MMC and * SD cards. It serves as a low-level driver for the higher * level modules such as partition and file system access. * * @{ *//** * \file * MMC/SD raw access implementation. * * \author Roland Riegel *//** * \addtogroup sd_raw_config MMC/SD configuration * Preprocessor defines to configure the MMC/SD support. *//** * @} *//* commands available in SPI mode *//* CMD0: response R1 */#define CMD_GO_IDLE_STATE 0x00/* CMD1: response R1 */#define CMD_SEND_OP_COND 0x01/* CMD9: response R1 */#define CMD_SEND_CSD 0x09/* CMD10: response R1 */#define CMD_SEND_CID 0x0a/* CMD12: response R1 */#define CMD_STOP_TRANSMISSION 0x0c/* CMD13: response R2 */#define CMD_SEND_STATUS 0x0d/* CMD16: arg0[31:0]: block length, response R1 */#define CMD_SET_BLOCKLEN 0x10/* CMD17: arg0[31:0]: data address, response R1 */#define CMD_READ_SINGLE_BLOCK 0x11/* CMD18: arg0[31:0]: data address, response R1 */#define CMD_READ_MULTIPLE_BLOCK 0x12/* CMD24: arg0[31:0]: data address, response R1 */#define CMD_WRITE_SINGLE_BLOCK 0x18/* CMD25: arg0[31:0]: data address, response R1 */#define CMD_WRITE_MULTIPLE_BLOCK 0x19/* CMD27: response R1 */#define CMD_PROGRAM_CSD 0x1b/* CMD28: arg0[31:0]: data address, response R1b */#define CMD_SET_WRITE_PROT 0x1c/* CMD29: arg0[31:0]: data address, response R1b */#define CMD_CLR_WRITE_PROT 0x1d/* CMD30: arg0[31:0]: write protect data address, response R1 */#define CMD_SEND_WRITE_PROT 0x1e/* CMD32: arg0[31:0]: data address, response R1 */#define CMD_TAG_SECTOR_START 0x20/* CMD33: arg0[31:0]: data address, response R1 */#define CMD_TAG_SECTOR_END 0x21/* CMD34: arg0[31:0]: data address, response R1 */#define CMD_UNTAG_SECTOR 0x22/* CMD35: arg0[31:0]: data address, response R1 */#define CMD_TAG_ERASE_GROUP_START 0x23/* CMD36: arg0[31:0]: data address, response R1 */#define CMD_TAG_ERASE_GROUP_END 0x24/* CMD37: arg0[31:0]: data address, response R1 */#define CMD_UNTAG_ERASE_GROUP 0x25/* CMD38: arg0[31:0]: stuff bits, response R1b */#define CMD_ERASE 0x26/* CMD42: arg0[31:0]: stuff bits, response R1b */#define CMD_LOCK_UNLOCK 0x2a/* CMD58: response R3 */#define CMD_READ_OCR 0x3a/* CMD59: arg0[31:1]: stuff bits, arg0[0:0]: crc option, response R1 */#define CMD_CRC_ON_OFF 0x3b/* command responses *//* R1: size 1 byte */#define R1_IDLE_STATE 0#define R1_ERASE_RESET 1#define R1_ILL_COMMAND 2#define R1_COM_CRC_ERR 3#define R1_ERASE_SEQ_ERR 4#define R1_ADDR_ERR 5#define R1_PARAM_ERR 6/* R1b: equals R1, additional busy bytes *//* R2: size 2 bytes */#define R2_CARD_LOCKED 0#define R2_WP_ERASE_SKIP 1#define R2_ERR 2#define R2_CARD_ERR 3#define R2_CARD_ECC_FAIL 4#define R2_WP_VIOLATION 5#define R2_INVAL_ERASE 6#define R2_OUT_OF_RANGE 7#define R2_CSD_OVERWRITE 7#define R2_IDLE_STATE (R1_IDLE_STATE + 8)#define R2_ERASE_RESET (R1_ERASE_RESET + 8)#define R2_ILL_COMMAND (R1_ILL_COMMAND + 8)#define R2_COM_CRC_ERR (R1_COM_CRC_ERR + 8)#define R2_ERASE_SEQ_ERR (R1_ERASE_SEQ_ERR + 8)#define R2_ADDR_ERR (R1_ADDR_ERR + 8)#define R2_PARAM_ERR (R1_PARAM_ERR + 8)/* R3: size 5 bytes */#define R3_OCR_MASK (0xffffffffUL)#define R3_IDLE_STATE (R1_IDLE_STATE + 32)#define R3_ERASE_RESET (R1_ERASE_RESET + 32)#define R3_ILL_COMMAND (R1_ILL_COMMAND + 32)#define R3_COM_CRC_ERR (R1_COM_CRC_ERR + 32)#define R3_ERASE_SEQ_ERR (R1_ERASE_SEQ_ERR + 32)#define R3_ADDR_ERR (R1_ADDR_ERR + 32)#define R3_PARAM_ERR (R1_PARAM_ERR + 32)/* Data Response: size 1 byte */#define DR_STATUS_MASK 0x0e#define DR_STATUS_ACCEPTED 0x05#define DR_STATUS_CRC_ERR 0x0a#define DR_STATUS_WRITE_ERR 0x0c#if !SD_RAW_SAVE_RAM/* static data buffer for acceleration */static uint8_t raw_block[512];/* offset where the data within raw_block lies on the card */static uint32_t raw_block_address;#endif/* private helper functions */static void sd_raw_send_byte(uint8_t b);static uint8_t sd_raw_rec_byte();static uint8_t sd_raw_send_command_r1(uint8_t command, uint32_t arg);static uint16_t sd_raw_send_command_r2(uint8_t command, uint32_t arg);/** * \ingroup sd_raw * Initializes memory card communication. * * \returns 0 on failure, 1 on success. */uint8_t sd_raw_init(){    /* enable inputs for reading card status */    configure_pin_available();    configure_pin_locked();    /* enable outputs for MOSI, SCK, SS, input for MISO */    configure_pin_mosi();    configure_pin_sck();    configure_pin_ss();    configure_pin_miso();    unselect_card();    SPCR |= (0 << SPIE) | /* SPI Interrupt Enable */            (1 << SPE)  | /* SPI Enable */            (0 << DORD) | /* Data Order: MSB first */            (1 << MSTR) | /* Master mode */            (0 << CPOL) | /* Clock Polarity: SCK low when idle */            (0 << CPHA) | /* Clock Phase: sample on rising SCK edge */            (1 << SPR1) | /* Clock Frequency: f_OSC / 64 */            (0 << SPR0);    /* initialization procedure */        if(!sd_raw_available())        return 0;    /* the card needs 74 cycles minimum to start up */    for(int i = 0; i < 10; ++i)    {        /* wait 8 clock cycles */        sd_raw_rec_byte();    }    /* address card */    select_card();    /* reset card */    sd_raw_send_command_r1(CMD_GO_IDLE_STATE, 0);        /* wait for card to get ready */    uint8_t response;    for(int i = 0; i < 10; ++i)    {        response = sd_raw_send_command_r1(CMD_SEND_OP_COND, 0);        if(!(response & (1 << R1_IDLE_STATE)))            break;    }    /* set block size to 512 bytes */    if(sd_raw_send_command_r1(CMD_SET_BLOCKLEN, 512))    {        unselect_card();        return 0;    }    /* deaddress card */    unselect_card();#if !SD_RAW_SAVE_RAM    /* the first block is likely to be accessed first, so precache it here */    raw_block_address = 0xffffffff;    if(!sd_raw_read(0, raw_block, sizeof(raw_block)))        return 0;#endif    return 1;}/** * \ingroup sd_raw * Checks wether a memory card is located in the slot. * * \returns 1 if the card is available, 0 if it is not. */uint8_t sd_raw_available(){    return get_pin_available() == 0x00;}/** * \ingroup sd_raw * Checks wether the memory card is locked for write access. * * \returns 1 if the card is locked, 0 if it is not. */uint8_t sd_raw_locked(){    return get_pin_locked() == 0x00;}/** * \ingroup sd_raw * Sends a raw byte to the memory card. * * \param[in] b The byte to sent. * \see sd_raw_rec_byte */void sd_raw_send_byte(uint8_t b){    SPDR = b;    /* wait for byte to be shifted out */    while(!(SPSR & (1 << SPIF)));    SPSR &= ~(1 << SPIF);}/** * \ingroup sd_raw * Receives a raw byte from the memory card. * * \returns The byte which should be read. * \see sd_raw_send_byte */uint8_t sd_raw_rec_byte(){    /* send dummy data for receiving some */    SPDR = 0xff;    while(!(SPSR & (1 << SPIF)));    SPSR &= ~(1 << SPIF);    return SPDR;}/** * \ingroup sd_raw * Send a command to the memory card which responses with a R1 response. * * \param[in] command The command to send. * \param[in] arg The argument for command. * \returns The command answer. */uint8_t sd_raw_send_command_r1(uint8_t command, uint32_t arg){    uint8_t response;    /* wait some clock cycles */    sd_raw_rec_byte();    /* send command via SPI */    sd_raw_send_byte(0x40 | command);    sd_raw_send_byte((arg >> 24) & 0xff);    sd_raw_send_byte((arg >> 16) & 0xff);    sd_raw_send_byte((arg >> 8) & 0xff);    sd_raw_send_byte((arg >> 0) & 0xff);    sd_raw_send_byte(command == CMD_GO_IDLE_STATE ? 0x95 : 0xff);        /* receive response */    for(int i = 0; i < 10; ++i)    {        response = sd_raw_rec_byte();        if(response != 0xff)            break;    }    /* the card internally needs eight further clock cycles */    sd_raw_rec_byte();    return response;}/** * \ingroup sd_raw * Send a command to the memory card which responses with a R2 response. * * \param[in] command The command to send. * \param[in] arg The argument for command. * \returns The command answer. */uint16_t sd_raw_send_command_r2(uint8_t command, uint32_t arg){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩高清在线电影| 一本大道综合伊人精品热热| 成人动漫中文字幕| 在线不卡免费av| 国产精品国产精品国产专区不蜜| 青青草精品视频| 色综合久久中文字幕| 久久精品视频在线看| 午夜电影久久久| 91碰在线视频| 国产农村妇女毛片精品久久麻豆| 麻豆精品一二三| 在线播放中文一区| 亚洲激情自拍偷拍| 99久久久无码国产精品| 国产日韩亚洲欧美综合| 久久99国内精品| 日韩一区二区精品在线观看| 亚洲亚洲精品在线观看| 91福利小视频| 一区二区三区国产| 91色在线porny| 亚洲手机成人高清视频| 99精品在线观看视频| 欧美激情中文不卡| 成人午夜在线免费| 国产精品久久久久婷婷| av在线综合网| **网站欧美大片在线观看| 成人97人人超碰人人99| 国产精品人成在线观看免费 | 日韩午夜在线影院| 亚瑟在线精品视频| 3d动漫精品啪啪| 日韩福利视频网| 欧美一卡二卡在线| 国产呦萝稀缺另类资源| 久久久久久黄色| 丰满少妇久久久久久久| 欧美国产综合色视频| www.日韩在线| 一区二区三区高清在线| 欧美精品在线一区二区三区| 看电影不卡的网站| 国产人成亚洲第一网站在线播放| 国产成人三级在线观看| 国产精品久久久99| 欧美色视频一区| 久久精品国产精品亚洲红杏| 国产精品免费视频网站| 色综合久久中文综合久久牛| 一区二区三区在线观看视频| 91福利视频在线| 免费看日韩a级影片| 2020国产精品自拍| 波波电影院一区二区三区| 亚洲综合丁香婷婷六月香| 日韩精品专区在线影院重磅| 成人精品视频一区二区三区| 亚洲综合色自拍一区| 日韩一区二区免费高清| 成人国产精品免费观看视频| 亚洲一区二区三区四区五区黄| 日韩一级片在线观看| www.久久精品| 美国十次了思思久久精品导航| 国产欧美精品一区二区色综合 | 秋霞电影一区二区| 国产欧美视频一区二区| 欧美无乱码久久久免费午夜一区| 久久99精品久久只有精品| 亚洲欧洲韩国日本视频| 日韩一区国产二区欧美三区| 国产a久久麻豆| 五月婷婷综合在线| 成人欧美一区二区三区白人| 欧美成人精品1314www| 91啦中文在线观看| 国内成人精品2018免费看| 一区二区成人在线| 亚洲国产精华液网站w| 日韩欧美国产1| 欧洲一区在线观看| eeuss鲁片一区二区三区在线看| 日韩国产欧美在线播放| 一区二区成人在线视频| 中文字幕高清一区| 337p粉嫩大胆噜噜噜噜噜91av| 欧美在线视频日韩| 91麻豆国产香蕉久久精品| 福利一区福利二区| 国产伦精品一区二区三区免费迷 | 欧美三区免费完整视频在线观看| 国产精品一区二区你懂的| 天天综合网天天综合色| 亚洲色欲色欲www| 国产精品国产三级国产普通话蜜臀| 欧美一级片在线| 欧美日本在线视频| 91国偷自产一区二区使用方法| 成人app在线观看| 成人在线综合网| 在线观看不卡一区| 一本久道久久综合中文字幕| 波多野结衣中文字幕一区| 国产乱子轮精品视频| 精品在线观看免费| 久久精品久久精品| 久久国产精品99久久久久久老狼| 午夜精品视频一区| 午夜国产不卡在线观看视频| 亚洲成人综合视频| 日韩中文字幕区一区有砖一区| 午夜影院在线观看欧美| 视频一区免费在线观看| 亚洲电影你懂得| 日韩在线观看一区二区| 香蕉影视欧美成人| 日韩中文字幕av电影| 免费成人结看片| 精品在线观看免费| 国产成人在线看| 成人精品在线视频观看| 99精品久久久久久| 欧美在线不卡一区| 在线不卡中文字幕播放| 精品国产乱码久久久久久牛牛| 亚洲精品一区二区三区四区高清 | 国产精品二区一区二区aⅴ污介绍| 国产亚洲精品bt天堂精选| 国产精品超碰97尤物18| 亚洲天天做日日做天天谢日日欢 | 国产一区二区三区免费播放| 丰满白嫩尤物一区二区| 色综合天天综合网天天看片| 欧洲在线/亚洲| 精品国产乱码久久久久久图片| 久久一留热品黄| 日韩毛片精品高清免费| 污片在线观看一区二区| 日本二三区不卡| 欧美日韩激情在线| 26uuuu精品一区二区| 中文字幕精品一区二区精品绿巨人| 亚洲精品国产a久久久久久| 日韩精彩视频在线观看| 国产精品66部| 精品视频一区二区不卡| 久久精品一区二区三区av| 亚洲一区中文日韩| 国产一区二区在线观看视频| 色婷婷精品大视频在线蜜桃视频| 日韩欧美成人一区| 日韩伦理电影网| 国产麻豆精品在线| 欧美日韩亚洲综合一区| 国产色91在线| 日韩和欧美一区二区三区| 成人免费高清视频在线观看| 在线不卡一区二区| 一区免费观看视频| 精品制服美女久久| 欧洲精品一区二区| 国产精品久久久久久久久免费丝袜 | 亚洲制服丝袜一区| 国产精品一区二区久久精品爱涩 | 欧美成人a∨高清免费观看| 中文字幕一区二区三区四区不卡| 青青草国产精品97视觉盛宴| 一本色道久久加勒比精品| 久久蜜桃av一区精品变态类天堂| 亚洲国产cao| 91丝袜呻吟高潮美腿白嫩在线观看| 精品国产一区二区三区不卡| 午夜精品一区二区三区免费视频| 91网站在线播放| 欧美激情中文不卡| 国产美女视频91| 精品国产成人在线影院| 日韩福利电影在线| 欧美亚一区二区| 亚洲精品视频一区| hitomi一区二区三区精品| 国产偷国产偷精品高清尤物| 国产专区综合网| 久久人人97超碰com| 精彩视频一区二区三区| 欧美成人精品二区三区99精品| 日韩精品国产欧美| 欧美精品 日韩| 亚洲成在人线在线播放| 欧美熟乱第一页| 亚洲bt欧美bt精品777| 欧美视频自拍偷拍| 亚洲1区2区3区视频| 777色狠狠一区二区三区| 夜夜嗨av一区二区三区四季av| 色天使久久综合网天天| 亚洲男人的天堂网| 日本电影欧美片|