Здравствуйте.
Вот в чём беда: пробовал сделать простой аудиоплеер на одном контроллере (mega
и ММС карте. С картой от PQ1 (фирма, наверное) всё работало хорошо, а вот с довольно известной SanDisk'овской начались глюки: при попытке считать блок передаются какие-то левые данные.
Аппаратный SPI не использую, т.к. выводы задействованы под ШИМ. Вот подпрограмма чтения/записи байта в карту (частота кварца 15 МГц):
Код:
|
MMC_Read:
ser Input
MMC_Write: ;
push R17
ldi R17,8 ;8 бит
MMC_Write_Loop:
cbi MMC_PORT,MMC_SCLK
cbi MMC_PORT,MMC_DO
sbrc Input,7
sbi MMC_PORT,MMC_DO
sbi MMC_PORT,MMC_SCLK
lsl Input
sbic MMC_PORT-2,MMC_DI
sbr Input,1
dec R17
brne MMC_Write_Loop
pop R17
ret |
Команда чтения имеет следующий вид:
0x51,AdrHH,AdrHL,AdrLH,AdrLL,0x01
Дальше шёл ответ от карты:
0x00 - команда в порядке
0xFE - данные доступны
И сами данные, но неправильные!
Самое удивительное, что если после команды сделать паузу в несколько мс, то всё работает, но слишком медленно (скорость снижается до 300-400 Кбит/с вместо 600-700 Кбит/с).
А в кардридере эти карты работали стабильно на 800 Кбайт/с.
Вот сам вопрос: как увеличить скорость карты?[/code]