hsx
Участник-
Постов
17 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о hsx
-
Звание
Участник
-
Перенос проекта на реальное устройство
hsx ответил hsx тема в В помощь начинающему
Разобрался, с питанием проблемы были, а ST-шные примеры я пробывал -
Перенос проекта на реальное устройство
hsx ответил hsx тема в В помощь начинающему
Сделал программку из 10 строчек, если без прерываний, то все работает, как только разрешаю какое ниюудь прерывание, так начинаються резеты -
Перенос проекта на реальное устройство
hsx ответил hsx тема в В помощь начинающему
Уже проверял с буферами все нормально, я вообще из обработчика все выкидывал, одну строчку оставлял вычитывание данных из юарта не в буфер, а в локальную переменную, ничего не меняется почемуто резет происходит. -
Перенос проекта на реальное устройство
hsx ответил hsx тема в В помощь начинающему
Понятно что в ошибках, только чего пограммы или устройства и как это определить? При разрешении прирывания 2 юарта глюки начинаються, даже если в нем ничего не выполняется. Устройство не серийное, на этом юарте сидит атмел и постоянно гонит некую информацию, что внитри атмела не знаю. -
Перенос проекта на реальное устройство
hsx опубликовал тема в В помощь начинающему
Есть проект под IAR для ARM9. На отладочной плате STR9-12-SK все работает, при заликвки в реальное устройство периодически обнуляються значения переменных или появляються у них неимоверные значения. В чем может быть проблема? -
SD/MMC
hsx ответил hsx тема в В помощь начинающему
Спасибо, вот это меня как раз и интерисовало, получается что место нахождения ответа на команду тоже плавающее. -
SD/MMC
hsx ответил hsx тема в В помощь начинающему
Спасибо, но проблема чуть не в этом. Часть вычитывающая блок у меня работает нормально. static DWORD MMC_read_block (u8 cmd, DWORD arg, u8 *buf, DWORD len) { DWORD res = CARD_ERROR; DWORD i, k, indx; u8 constval = 0xFF; k = 0; i = 0; res = CARD_ERROR; sd_att = SD_MAX_ATT; do { SD_SELECT_CARD; cmd_buf[0] = 0xFF; cmd_buf[1] = 0xFF; cmd_buf[2] = 0xFF; cmd_buf[3] = 0xFF; cmd_buf[4] = cmd; cmd_buf[5] = (arg >> 24); cmd_buf[6] = (arg >> 16); cmd_buf[7] = (arg >> 8); cmd_buf[8] = (arg); cmd_buf[9] = 0xFF; cmd_buf[10] = 0xFF; cmd_buf[11] = 0xFF; cmd_buf[12] = 0xFF; // Cb_end, Cb_transfer_err функции изменяющие значение ssp_flgs ssp_flgs = 0; // Устанавливается в прерывании DMA в значения SSP_DONE или SSP_TX_ERR Start_dma_read_from_SSPSD(cmd_buf, 13, Cb_end, Cb_transfer_err); // После этого чтения в буфере Start_dma_write_to_SSPSD(cmd_buf, 13, 0, Cb_transfer_err); // 11 байт должен стать равным 0 если все нормально while ( (ssp_flgs&(SSP_DONE|SSP_TX_ERR))==0 ); // количество данных, которые необходимо прочитать извесны 13, а становиться либо 11 либо 12 if(ssp_flgs&SSP_TX_ERR ) goto exit__; if ( ((cmd_buf[11] & 0x80)==0) || ((cmd_buf[12] & 0x80)==0)) { if(cmd_buf[11]!=0 && cmd_buf[12]!=0) { res = cmd_buf; goto exit__; } sd_ratt = SD_MAX_RATT; do { ssp_flgs = 0; Start_dma_read_from_SSPSD(cmd_buf, READ_WAIT_LEN, Cb_end, Cb_transfer_err); Start_dma_write_const_to_SSPSD(&constval, READ_WAIT_LEN, 0, Cb_transfer_err); while((ssp_flgs&(SSP_DONE|SSP_TX_ERR))==0 ); if(ssp_flgs&SSP_TX_ERR ) goto exit__; for ( i=0;i<READ_WAIT_LEN;i++ ) { if ( cmd_buf == 0xFE ) { k = i + 1; break; } } if ( cmd_buf == 0xFE ) break; sd_ratt--; if ( sd_ratt==0 ) goto exit_att__; } while ( 1 ); indx = 0; for ( i=k;i<READ_WAIT_LEN;i++ ) { buf[indx++] = cmd_buf; if ( indx==len ) break; } if ( indx!=len ) { ssp_flgs = 0; Start_dma_read_from_SSPSD(&buf[indx], len - indx, Cb_end, Cb_transfer_err); Start_dma_write_const_to_SSPSD(&constval, len - indx, 0, Cb_transfer_err); while ( (ssp_flgs&(SSP_DONE|SSP_TX_ERR))==0 ); if ( ssp_flgs&SSP_TX_ERR) goto exit__; } ssp_flgs = 0; Start_dma_read_from_SSPSD(cmd_buf, 3, Cb_end, Cb_transfer_err); Start_dma_write_const_to_SSPSD(&constval, 3, 0, Cb_transfer_err); while ( (ssp_flgs&(SSP_DONE|SSP_TX_ERR))==0 ); if ( ssp_flgs&SSP_TX_ERR ) goto exit__; res = CARD_OK; goto exit__; } exit_att__: SD_UNSELECT_CARD; sd_att--; } while ( sd_att!=0 ); exit__: SD_UNSELECT_CARD; return res; } -
SD/MMC
hsx ответил hsx тема в В помощь начинающему
насколько я знаю, дма генерит приерывание только в случае ошибки или вычитывания заданного количества байт :(, т.е пока все требуемые байты не будут готовы, обработка дальше не пойдет -
SD/MMC
hsx ответил hsx тема в В помощь начинающему
С работоспособностью разобрался, задержка не причем, просто у одних карточек в 11-том быйте результат, а в других в 12-ом. Вот теперь такой вопрос, как определить какой байт смотреть? -
SD/MMC
hsx ответил hsx тема в В помощь начинающему
Это понятно, что по протоколу SD, где его спецификацию взять? -
SD/MMC
hsx ответил hsx тема в В помощь начинающему
С причиной неработоспособности я разобрался, работают только те карточки, которые понимают протокол ММС, а где бы посмотреть, как общаться с карточками, которые его не понимают? -
SD/MMC
hsx ответил hsx тема в В помощь начинающему
Написано на С, команды действительно 16-ти байтиные, а в случае успешного завершения 11-ый байт должен с 0xFF поменяться на 0x00. Общение осуществляется через DMA, поэтому проблем с таймоутом быть не может (проверка байта выполняется после соответствующего прирывания) однако всеравно не работает -
SD/MMC
hsx ответил hsx тема в В помощь начинающему
Чего к словам придираться, на команды CMD9 и CMD10 не меняют 11 байт SD Kingston и Panasonic, SD samsung и MMC Kingston работают нормально. В чем может быть причина? -
SD/MMC
hsx опубликовал тема в В помощь начинающему
Подскажите пожалуйста почему не все карточки на ARMе отзываються на команды CMD10 и CMD9 и можноли это как то обойти?