📄 sdmmc_spi.lst
字号:
###############################################################################
# #
# 25/May/2009 02:53:24 #
# IAR ANSI C/C++ Compiler V5.20.0.20892/W32 EVALUATION for ARM #
# Copyright 1999-2008 IAR Systems AB. #
# #
# Cpu mode = arm #
# Endian = little #
# Source file = F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91lib\memories\sdmmc\sdmmc_spi.c #
# Command line = F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91lib\memories\sdmmc\sdmmc_spi.c -D #
# at91sam7x256 -D flash -D TRACE_LEVEL=4 -lC #
# F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91sam7x-ek\getting-started-project\ewp\at #
# 91sam7x256_flash\List\ --remarks --diag_suppress #
# Pe826,Pe1375 -o F:\Diplomovka\IARprojects\Diplomovka\25. #
# 4.2009\getting-started-project-at91sam7x-ek-iar\getting- #
# started-project-at91sam7x-ek\at91sam7x-ek\getting-starte #
# d-project\ewp\at91sam7x256_flash\Obj\ --no_cse #
# --no_unroll --no_inline --no_code_motion --no_tbaa #
# --no_clustering --no_scheduling --debug --endian=little #
# --cpu=ARM7TDMI -e --fpu=None --dlib_config "C:\Program #
# Files (x86)\IAR Systems\Embedded Workbench 5.0 #
# Evaluation\ARM\INC\DLib_Config_Full.h" -I #
# F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91sam7x-ek\getting-started-project\ewp\.. #
# \..\..\at91lib/peripherals\ -I #
# F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91sam7x-ek\getting-started-project\ewp\.. #
# \..\..\at91lib\ -I F:\Diplomovka\IARprojects\Diplomovka\ #
# 25.4.2009\getting-started-project-at91sam7x-ek-iar\getti #
# ng-started-project-at91sam7x-ek\at91sam7x-ek\getting-sta #
# rted-project\ewp\..\..\..\at91lib\memories\sdmmc\ -I #
# F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91sam7x-ek\getting-started-project\ewp\.. #
# \..\..\at91lib/components\ -I #
# F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91sam7x-ek\getting-started-project\ewp\.. #
# \..\..\at91lib/boards/at91sam7x-ek\ -I #
# F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91sam7x-ek\getting-started-project\ewp\.. #
# \..\..\external_libs/crc\ -I "C:\Program Files #
# (x86)\IAR Systems\Embedded Workbench 5.0 #
# Evaluation\ARM\INC\" --interwork --cpu_mode arm -Oh #
# List file = F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91sam7x-ek\getting-started-project\ewp\at #
# 91sam7x256_flash\List\sdmmc_spi.lst #
# Object file = F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-s #
# tarted-project-at91sam7x-ek-iar\getting-started-project- #
# at91sam7x-ek\at91sam7x-ek\getting-started-project\ewp\at #
# 91sam7x256_flash\Obj\sdmmc_spi.o #
# #
# #
###############################################################################
F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-started-project-at91sam7x-ek-iar\getting-started-project-at91sam7x-ek\at91lib\memories\sdmmc\sdmmc_spi.c
1 /* ----------------------------------------------------------------------------
2 * ATMEL Microcontroller Software Support
3 * ----------------------------------------------------------------------------
4 * Copyright (c) 2008, Atmel Corporation
5
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 * - Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the disclaimer below.
13 *
14 * Atmel's name may not be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
20 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 * ----------------------------------------------------------------------------
28 */
29
30 //------------------------------------------------------------------------------
31 // Headers
32 //------------------------------------------------------------------------------
33
34 #include "sdmmc_spi.h"
35 #include "sdspi.h"
36 #include <board.h>
37 #include <utility/assert.h>
38 #include <utility/trace.h>
39
40 #include <string.h>
\ In section .text, align 4
\ __??Code32?? __intrinsic __code __interwork void *memset(void *, int, size_t)
\ memset:
\ 00000000 10402DE9 PUSH {R4,LR}
\ 00000004 0040A0E1 MOV R4,R0
\ 00000008 0200A0E1 MOV R0,R2
\ 0000000C 0120A0E1 MOV R2,R1
\ 00000010 0010A0E1 MOV R1,R0
\ 00000014 0400A0E1 MOV R0,R4
\ 00000018 ........ BL __aeabi_memset
\ 0000001C 0400A0E1 MOV R0,R4
\ 00000020 1040BDE8 POP {R4,LR}
\ 00000024 1EFF2FE1 BX LR ;; return
41
42 //------------------------------------------------------------------------------
43 // Local constants
44 //------------------------------------------------------------------------------
45
46 // SD card operation states
47 #define SD_STATE_STBY 0
48 #define SD_STATE_DATA 1
49 #define SD_STATE_RCV 2
50
51 // Card type
52 #define UNKNOWN_CARD 0
53 #define CARD_SD 1
54 #define CARD_SDHC 2
55 #define CARD_MMC 3
56
57 // Delay between sending MMC commands
58 #define MMC_DELAY 0x4FF
59
60 #define SD_ADDRESS(pSd, address) (((pSd)->cardType == CARD_SDHC) ? \
61 (address):((address) << SD_BLOCK_SIZE_BIT))
62
63 //-----------------------------------------------------------------------------
64 /// MMC/SD in SPI mode reports R1 status always, and R2 for SEND_STATUS
65 /// R1 is the low order byte; R2 is the next highest byte, when present.
66 //-----------------------------------------------------------------------------
67 #define R1_SPI_IDLE (1 << 0)
68 #define R1_SPI_ERASE_RESET (1 << 1)
69 #define R1_SPI_ILLEGAL_COMMAND (1 << 2)
70 #define R1_SPI_COM_CRC (1 << 3)
71 #define R1_SPI_ERASE_SEQ (1 << 4)
72 #define R1_SPI_ADDRESS (1 << 5)
73 #define R1_SPI_PARAMETER (1 << 6)
74 // R1 bit 7 is always zero
75 #define R2_SPI_CARD_LOCKED (1 << 0)
76 #define R2_SPI_WP_ERASE_SKIP (1 << 1)
77 #define R2_SPI_LOCK_UNLOCK_FAIL R2_SPI_WP_ERASE_SKIP
78 #define R2_SPI_ERROR (1 << 2)
79 #define R2_SPI_CC_ERROR (1 << 3)
80 #define R2_SPI_CARD_ECC_ERROR (1 << 4)
81 #define R2_SPI_WP_VIOLATION (1 << 5)
82 #define R2_SPI_ERASE_PARAM (1 << 6)
83 #define R2_SPI_OUT_OF_RANGE (1 << 7)
84 #define R2_SPI_CSD_OVERWRITE R2_SPI_OUT_OF_RANGE
85
86 // Status register constants
87 #define STATUS_READY_FOR_DATA (1 << 8)
88 #define STATUS_IDLE (0 << 9)
89 #define STATUS_READY (1 << 9)
90 #define STATUS_IDENT (2 << 9)
91 #define STATUS_STBY (3 << 9)
92 #define STATUS_TRAN (4 << 9)
93 #define STATUS_DATA (5 << 9)
94 #define STATUS_RCV (6 << 9)
95 #define STATUS_PRG (7 << 9)
96 #define STATUS_DIS (8 << 9)
97 #define STATUS_STATE (0xF << 9)
98
99 //-----------------------------------------------------------------------------
100 /// OCR Register
101 //-----------------------------------------------------------------------------
102 #define AT91C_VDD_16_17 (1 << 4)
103 #define AT91C_VDD_17_18 (1 << 5)
104 #define AT91C_VDD_18_19 (1 << 6)
105 #define AT91C_VDD_19_20 (1 << 7)
106 #define AT91C_VDD_20_21 (1 << 8)
107 #define AT91C_VDD_21_22 (1 << 9)
108 #define AT91C_VDD_22_23 (1 << 10)
109 #define AT91C_VDD_23_24 (1 << 11)
110 #define AT91C_VDD_24_25 (1 << 12)
111 #define AT91C_VDD_25_26 (1 << 13)
112 #define AT91C_VDD_26_27 (1 << 14)
113 #define AT91C_VDD_27_28 (1 << 15)
114 #define AT91C_VDD_28_29 (1 << 16)
115 #define AT91C_VDD_29_30 (1 << 17)
116 #define AT91C_VDD_30_31 (1 << 18)
117 #define AT91C_VDD_31_32 (1 << 19)
118 #define AT91C_VDD_32_33 (1 << 20)
119 #define AT91C_VDD_33_34 (1 << 21)
120 #define AT91C_VDD_34_35 (1 << 22)
121 #define AT91C_VDD_35_36 (1 << 23)
122 #define AT91C_CARD_POWER_UP_BUSY (1 << 31)
123
124 #define AT91C_MMC_HOST_VOLTAGE_RANGE (AT91C_VDD_27_28 +\
125 AT91C_VDD_28_29 +\
126 AT91C_VDD_29_30 +\
127 AT91C_VDD_30_31 +\
128 AT91C_VDD_31_32 +\
129 AT91C_VDD_32_33)
130 #define AT91C_CCS (1 << 30)
131
132 // SPI_CMD Register Value
133 #define AT91C_POWER_ON_INIT (0)
134
135 //-----------------------------------------------------------------------------
136 // Command Classes
137 //-----------------------------------------------------------------------------
138 //
139 // Class 0, 2, 4, 5, 7 and 8 are mandatory and shall be supported by all SD Memory Cards.
140 // Basic Commands (class 0)
141 //
142 // Cmd0 MCI + SPI
143 #define AT91C_GO_IDLE_STATE_CMD (0)
144 // Cmd1 SPI
145 #define AT91C_MMC_SEND_OP_COND_CMD (1)
146 // Cmd2 MCI
147 #define AT91C_ALL_SEND_CID_CMD (2)
148 // Cmd3 MCI
149 #define AT91C_SET_RELATIVE_ADDR_CMD (3)
150 // Cmd4 MCI
151 //#define AT91C_SET_DSR_CMD (4)
152 // cmd7 MCI
153 #define AT91C_SEL_DESEL_CARD_CMD (7)
154 // Cmd8 MCI + SPI
155 #define AT91C_SEND_IF_COND (8)
156 // Cmd9 MCI + SPI
157 #define AT91C_SEND_CSD_CMD (9)
158 // Cmd10 MCI + SPI
159 #define AT91C_SEND_CID_CMD (10)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -