Вот, уважаемый, проектик http://caxapa.ru/u …t_2017_05152115_12.rar
Я слегка поправил чановские и в основном цикле инициализирую и пару раз вызываю функцию res = MCI_read((u8_t*)&buf[0], 0, 1); Никаких фатов. Просто читать-писать блок 512 байт. На втором вызове функции она стопорится в процедуре if (!wait_ready(500)) return RES_ERROR;/* Make sure that card is tran state */ где проверяется статус карты. Т.е. карта неготова. Если снова в программе вызывать инициализацию или скидывать питание с карты не помогает. Где то в кишках дма или MCI косяк сидит. Может конечно я криво в целом организовал прерывания. Если у таймеров сделать приоритет пониже или одинаковый дма-mci, то перестает работать прерывание таймера. Проект я сделал на основе примера из IAR. Т.е. без файла стартапа ассемблерного.
Вот дополнительный буфер перенес в USB DMA чтоб совсем как у чана, но сути не меняет
http://caxapa.ru/u …017_05152145_26___.rar