⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd.h

📁 sd card for pxa270 (在bootloader 下)
💻 H
字号:
#ifndef __PC5000_SD_H
#define __PC5000_SD_H
//#include <bsp.h>
#include <nkintr.h>
#include <bulverde.h>
//#include"eboot_debug.h"
#include<windows.h>
#include <nkintr.h>
//#include <GPIO.h>
#include <ethdbg.h> 
#include "halether.h" 
#include <nkintr.h>
#include <pehdr.h>
#include <romldr.h>
//#include "ethdown.h"
//#include "xllp_defs.h"
//#include "xllp_ethernet.h"
//#include "sd.h"
//#include "xllp_pwm.h"
#include <pcireg.h>
//#include"xllp_mmc.h"
//#include"xllp_dmac.h"
#define MMC_RXFIFO_SIZE 32
#define MMC_TXFIFO_SIZE 32

    // GPIO definitions for the MMC controller
#define MMCCLK_PIN                  GPIO_32;
#define MMCCMD_PIN                  GPIO_112;
#define MMCDAT0_PIN                 GPIO_92;
#define MMCDAT1_PIN                 GPIO_109;
#define MMCDAT2_PIN                 GPIO_110;
#define MMCDAT3_PIN                 GPIO_111;

#define GPIO6_MMCCLK_PIN            GPIO_6
#define GPIO8_MMCCS0_PIN            GPIO_8
#define GPIO10_DAT0_PIN_POLL        GPIO_10
#define GPIO12_DAT1_PIN_INTERRUPT   GPIO_12

    // GPIO control register offsets
#define GPIO_GPLR0  0x0000  // pin level register
#define GPIO_GRER0  0x0030  // Rising Edge Detect register       
#define GPIO_GFER0  0x003C  // Falling Edge Detect register
#define GPIO_GPSR0  0x0018  // pin output select register
#define GPIO_GPDR0  0x000C  // pin direction register 
#define GPIO_GAFR0_L 0x00054 // alternate function register
    
#define GPIO_ALT_FN_CLEAR_BITS 0x03
#define GPIO_ALT_FN_1_BITS     0x01
#define GPIO_6_ALTFN_SHIFT     12
#define GPIO_8_ALTFN_SHIFT     16
#define GPIO_10_ALTFN_SHIFT    20
#define GPIO_12_ALTFN_SHIFT    24

    // MMC Controller register offsets

#define MMC1_STRPCL 0x0000   // clock start/stop
#define MMC1_STAT   0x0004   // MMC Status register
#define MMC1_CLKRT  0x0008   // clock rate
#define MMC1_SPI    0x000C   // SPI mode control
#define MMC1_CMDAT  0x0010   // command/response/data sequence
#define MMC1_RESTO  0x0014   // response timeout
#define MMC1_RDTO   0x0018   // expected data read timeout
#define MMC1_BLKLEN 0x001C   // data phase block length
#define MMC1_NOB    0x0020   // number of blocks
#define MMC1_PRTBUF 0x0024   // partial MMC TX Fifo
#define MMC1_IMASK  0x0028   // interrupt mask
#define MMC1_IREG   0x002C   // interrupt register
#define MMC1_CMD    0x0030   // command
#define MMC1_ARGH   0x0034   // MSW of command argument
#define MMC1_ARGL   0x0038   // LSW of command argument
#define MMC1_RES    0x003C   // response Fifo


    // OS Timer register offsets
#define OST_COUNT_REG       0x0010   // OS Timer count register

    // bit definitions for MMC_STRPCL
#define MMC_STRPCL_START_CLOCK 0x02
#define MMC_STRPCL_STOP_CLOCK  0x01

    // bit definitions for MMC_IMASK
#define MMC_IMASK_DATA_TRAN_DONE_INT_MASKED   (1 << 0)
#define MMC_IMASK_PROG_DONE_INT_MASKED        (1 << 1)
#define MMC_IMASK_END_CMD_INT_MASKED          (1 << 2)
#define MMC_IMASK_STOP_CMD_INT_MASKED         (1 << 3)
#define MMC_IMASK_CLOCK_OFF_INT_MASKED        (1 << 4)
#define MMC_IMASK_RXFIFO_REQ_INT_MASKED       (1 << 5)
#define MMC_IMASK_TXFIFO_REQ_INT_MASKED       (1 << 6)
#define MMC_IMASK_TRANSMIT_TIMEOUT_INT_MASKED (1 << 7)
#define MMC_IMASK_DATA_ERROR_INT_MASKED       (1 << 8)
#define MMC_IMASK_RESPONSE_ERROR_INT_MASKED   (1 << 9)
#define MMC_IMASK_STALLED_READ_INT_MASKED     (1 << 10)
#define MMC_IMASK_SDIO_INT_MASKED             (1 << 11)
#define MMC_IMASK_SDIO_SUSPEND_ACK_INT_MASKED (1 << 12)
#define MMC_IMASK_ALL_INTERRUPTS_MASKED      (MMC_IMASK_DATA_TRAN_DONE_INT_MASKED   | \
                                              MMC_IMASK_PROG_DONE_INT_MASKED        | \
                                              MMC_IMASK_END_CMD_INT_MASKED          | \
                                              MMC_IMASK_STOP_CMD_INT_MASKED         | \
                                              MMC_IMASK_CLOCK_OFF_INT_MASKED        | \
                                              MMC_IMASK_RXFIFO_REQ_INT_MASKED       | \
                                              MMC_IMASK_TXFIFO_REQ_INT_MASKED)      | \
                                              MMC_IMASK_TRANSMIT_TIMEOUT_INT_MASKED | \
                                              MMC_IMASK_DATA_ERROR_INT_MASKED       | \
                                              MMC_IMASK_RESPONSE_ERROR_INT_MASKED   | \
                                              MMC_IMASK_STALLED_READ_INT_MASKED     | \
                                              MMC_IMASK_SDIO_INT_MASKED             | \
                                              MMC_IMASK_SDIO_SUSPEND_ACK_INT_MASKED
    // bit definitions for MMC_IREG
#define MMC_IREG_DATA_TRAN_DONE             (1 << 0)
#define MMC_IREG_PROG_DONE                  (1 << 1)
#define MMC_IREG_END_CMD                    (1 << 2)
#define MMC_IREG_STOP_CMD                   (1 << 3)
#define MMC_IREG_CLOCK_IS_OFF               (1 << 4)
#define MMC_IREG_RXFIFO_REQ                 (1 << 5)
#define MMC_IREG_TXFIFO_REQ                 (1 << 6)
#define MMC_IREG_TINT                       (1 << 7)
#define MMC_IREG_DAT_ERR                    (1 << 8)
#define MMC_IREG_RES_ERR                    (1 << 9)
#define MMC_IREG_RD_STALLED                 (1 << 10)
#define MMC_IREG_SDIO_INT                   (1 << 11)
#define MMC_IREG_SDIO_SUSPEND_ACK           (1 << 12)
#define MMC_IREG_INTERRUPTS                 0x1FFF

    // bit definitions for MMC_CMDAT
#define MMC_CMDAT_RESPONSE_NONE 0x00        // no response
#define MMC_CMDAT_RESPONSE_R1   0x01        // expected R1 response
#define MMC_CMDAT_RESPONSE_R2   0x02        // expected R2 response
#define MMC_CMDAT_RESPONSE_R3   0x03        // expected R3 response
#define MMC_CMDAT_DATA_EN       (1 << 2)    // data transfer to follow
#define MMC_CMDAT_DATA_WRITE    (1 << 3)    // data transfer is a write
#define MMC_CMDAT_STREAM        (1 << 4)    // data transfer is stream mode
#define MMC_CMDAT_EXPECT_BUSY   (1 << 5)    // the command uses busy signalling
#define MMC_CMDAT_INIT          (1 << 6)    // add init clocks
#define MMC_CMDAT_DMA_ENABLE    (1 << 7)    // enable DMA
#define MMC_CMDAT_SD_4DAT       (1 << 8)    // enable 4 bit data transfers
#define MMC_CMDAT_STOP_TRAN     (1 << 10)   // stop data transmission
#define MMC_CMDAT_SDIO_INT_EN   (1 << 11)   // enable controller to check for an SDIO interrupt from the card
#define MMC_CMDAT_SDIO_SUSPEND  (1 << 12)   // SDIO CMD 52, suspend current data transfer
#define MMC_CMDAT_SDIO_RESUME   (1 << 13)   // SDIO CMD 52, resume a suspended data transfer

    // bit definitions for MMC_STAT
#define MMC_STAT_READ_TIMEOUT          (1 << 0)
#define MMC_STAT_RESPONSE_TIMEOUT      (1 << 1)
#define MMC_STAT_WRITE_DATA_CRC_ERROR  (1 << 2)

#define MMC_STAT_READ_DATA_CRC_ERROR   (1 << 3)
#define MMC_STAT_SPI_READ_TOKEN_ERROR  (1 << 4)
#define MMC_STAT_RESPONSE_CRC_ERROR    (1 << 5)

#define MMC_STAT_CLOCK_ENABLED         (1 << 8)

#define MMC_STAT_FLASH_ERROR           (1 << 9)
#define MMC_STAT_SPI_WR_ERROR          (1 << 10)

#define MMC_STAT_DATA_TRANSFER_DONE    (1 << 11)
#define MMC_STAT_PROGRAM_DONE          (1 << 12)
#define MMC_STAT_END_CMD_RES           (1 << 13)

#define MMC_STAT_RD_STALLED            (1 << 14)
#define MMC_STAT_SDIO_INT              (1 << 15)
#define MMC_STAT_SDIO_SUSPEND_ACK      (1 << 16)

    // bit definition for MMC_PRTBUF
#define MMC_PRTBUF_BUFFER_PARTIAL_FULL (1 << 0)

typedef enum {
    Idle = -1 ,
    CommandSend = 1,
    CommandComplete = 2,
    ResponseWait = 3,
    WriteDataTransfer = 4,
    WriteDataTransferDone = 5,
    ProgramWait = 6,
    WriteDataDone = 7,
    ReadDataTransfer = 8,
    ReadDataTransferDone = 9,
    ReadDataDone = 10,
} SDHSTATE;


  // PXA27x hardware specific context








#define SDH_INTERRUPT_ZONE    SDCARD_ZONE_0
#define SDH_SEND_ZONE         SDCARD_ZONE_1
#define SDH_RESPONSE_ZONE     SDCARD_ZONE_2
#define SDH_RECEIVE_ZONE      SDCARD_ZONE_3
#define SDH_CLOCK_ZONE        SDCARD_ZONE_4
#define SDH_TRANSMIT_ZONE     SDCARD_ZONE_5
#define SDH_SDBUS_INTERACTION_ZONE     SDCARD_ZONE_7

#define SDH_INTERRUPT_ZONE_ON ZONE_ENABLE_0
#define SDH_SEND_ZONE_ON      ZONE_ENABLE_1
#define SDH_RESPONSE_ZONE_ON  ZONE_ENABLE_2
#define SDH_RECEIVE_ZONE_ON   ZONE_ENABLE_3
#define SDH_CLOCK_ZONE_ON     ZONE_ENABLE_4
#define SDH_TRANSMIT_ZONE_ON  ZONE_ENABLE_5
#define SDH_SDBUS_INTERACTION_ZONE_ON  ZONE_ENABLE_7

#define SDH_CARD_CONTROLLER_PRIORITY 100
#define SDH_DEFAULT_RESPONSE_TIMEOUT_CLOCKS 64
#define SDH_DEFAULT_DATA_TIMEOUT_CLOCKS 0xFFFF

#define SDH_RESPONSE_FIFO_DEPTH              8  // 
      
#define SDH_MAX_BLOCK_SIZE           1023
#define SDH_MIN_BLOCK_SIZE           32

extern void msWait(unsigned );
extern void Wait(unsigned );
#define SD_DEFAULT_CARD_ID_CLOCK_RATE   100000      // 100 khz 
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -