Skip to contentSkip to conversation

AT91SAM9xxx SDCard/MMC support?

U-Boot Reinhard Meyer (-VC) 1 participant 4 messages Jul 1, 2010

lore
Share & tools
lore
#0 lore raw

Hello,

apparently none of the mainstream u-boot designs use SDCard/MMC.

It appears that this task should not be a huge problem, the MCI for both AVR32 and AT91SAM9 seems to be identical (and MCI on AVR32 works).

But before I perhaps reinvent anything already done, I prefer to ask here. Also any input what obstacles have been found would be appreciated.

I need the support for 9260/9G20/9XE.

Best Regards
Reinhard

#1 lore raw
Quoted 9 lines · Reinhard Meyer (-VC)

Hello,

apparently none of the mainstream u-boot designs use SDCard/MMC.

It appears that this task should not be a huge problem, the MCI for both AVR32 and AT91SAM9 seems to be identical (and MCI on AVR32 works).

Quoted 6 lines

But before I perhaps reinvent anything already done, I prefer to ask here. Also any input what obstacles have been found would be appreciated.

I need the support for 9260/9G20/9XE.

After some hacking I get the following results:

TOP9000> mmc init
mmc: bus_hz is 99328000, setting clock 150000 Hz, block size 512
mmc: requested clock 150000 is too low; setting CLKDIV to 255; resulting clock is 194000
mmc: CMD0 0x0 (flags 0x0)
mmc: status 0x0000c0e5

mmc: CMD0 0x0 (flags 0x100)
mmc: status 0x0000c0e5

mmc: CMD55 0x0 (flags 0x1040)
mmc: status 0x0000c0e5
mmc: response: 00000120
mmc: CMD41 0x100000 (flags 0x41)
mmc: status 0x0004c0e5
mmc: response: 00ff8000
mmc: CMD55 0x0 (flags 0x1040)
mmc: status 0x0000c0e5
mmc: response: 00000120
mmc: CMD41 0x100000 (flags 0x41)
mmc: status 0x0004c0e5
mmc: response: 80ff8000
mmc: CMD2 0x0 (flags 0x80)
mmc: status 0x0000c0e5
mmc: response: 19445953 4d495344 10000073 f30054bb
Manufacturer ID:       19
OEM/Application ID:    4459
Product name:          SMISD
Product Revision:      1.0
Product Serial Number: 29683
Manufacturing Date:    05/04
mmc: CMD3 0x0 (flags 0x1040)
mmc: status 0x0000c0e5
mmc: response: b3680500
SD Card detected (RCA 45928)
mmc: CMD9 0xb3680000 (flags 0x1080)
mmc: status 0x0000c0e5
mmc: response: 005e0032 1f5983d0 6db7bf9f 96400005
CSD data: 005e0032 1f5983d0 6db7bf9f 96400005
CSD structure version:   1.2
MMC System Spec version: 12
Card command classes:    3d0
Read block length:       256

Supports partial reads
Write block length: 1
Does not support partial writes
Does not support group WP

Card capacity:          131072000 bytes
File format:            1/2
Write protection:         permanent
mmc: Using 983040 cycles data timeout (DTOR=0x6f)

Card does not support 512 byte reads, aborting.
No MMC card found

It IS a 1 GB Card, and sure has 512 Byte sectors
(it worked well on the ATNGW100)
with the same driver source.

What I notice is that the current driver (atmel_mci.c) nowhere sets the MMCI_SDCR register, therefore using the bus in 1 bit mode. But that is the case in the AVR32 case as well, and there MCI did work...

#2 lore raw
Quoted 17 lines · Reinhard Meyer (-VC)

TOP9000> mmc init

Manufacturer ID:       19
OEM/Application ID:    4459
Product name:          SMISD
Product Revision:      1.0
Product Serial Number: 29683
Manufacturing Date:    05/04
SD Card detected (RCA 45928)
CSD data: 005e0032 1f5983d0 6db7bf9f 96400005
CSD structure version:   1.2
MMC System Spec version: 12
Card command classes:    3d0
Read block length:       256

Supports partial reads
Write block length: 1
Does not support partial writes
Does not support group WP

Quoted 5 lines
Card capacity:          131072000 bytes
File format:            1/2
Write protection:         permanent

Card does not support 512 byte reads, aborting.
No MMC card found

on AVR32 the ouput is:
top7000> mmc init

Manufacturer ID:       19
OEM/Application ID:    4459
Product name:          SMISD
Product Revision:      1.0
Product Serial Number: 29683
Manufacturing Date:    05/04
SD Card detected (RCA 45928)
CSD data: 005e0032 1f5983d0 6db7bf9f 96400005
CSD structure version:   1.0
MMC System Spec version: 0
Card command classes:    1f5
Read block length:       512
Supports partial reads
Write block length:      512
Does not support partial writes
Supports group WP:      32
Card capacity:          1023934464 bytes
File format:            0/0

Write protection:
mmc: Using 262144 cycles data timeout (DTOR=0x64)

*** the CSD Data is the same, the interpretation of non-byte values is different. Looks like an alignment or byteswap issue...

#3 lore raw
Quoted 4 lines · Reinhard Meyer (-VC)

*** the CSD Data is the same, the interpretation of non-byte values is different. Looks like an alignment or byteswap issue...

The issue has been solved: A bitfielded struct was effectively unioned with a u32 array... Bad by design.
SD/MMC now works for 9260/9XE, probably for 9G20, too.
After a bit more cleanup I will provide a patch.