Jump to content

    

yachnyymaxim

Участник
  • Content Count

    14
  • Joined

  • Last visited

Community Reputation

0 Обычный
  1. MSP430F47186 и SD16_A

    Добрый день. Включаю новый процессор от Техаса MSP430F47186. Обнаружил некоторые неожиданности при работе с сигма дельта преобразователем. В документации указано, что АЦП имеет 6 абсолютно независимых каналов, которые можно скоммутировать с любыми аналоговыми входами +-A0 - +-A4. (Интересно, что входов у микросхемы 6, но A5 нельзя ни с кем скоммутировать) с помощью бит SD16INCHx в регистрах SD16INCTLx. Однако после целого дня попыток запустить АЦП выяснилось, что каждый внутренний канал CHANNEL_X можно скоммутировать только с соответствующим ему входом - т.е. если внутренний канал номер 1, то к нему можно подключить только вход А1. А вот внутренний датчик температуры и делитель Vcc/11 можно подключить к любому каналу с помощью бит SD16INCHx. И если я захочу использовать с каналом 1 вход А3, например, то в регистр SD16MEM1 будет попадать нечто, что соответствует закороченному входу + смещение PGA. Я думал что это баг АЦП, почитал Errata - нет никаких багов, связанных с SD16_A. Кто работал с этим процессором - такие же результаты или нет?
  2. День добрый, форумчане. Появился вопрос следующего характера. Купил я новую MicroSD карту от Transcend-а и вставил в свой прибор. И обнаружил неприятную особенность: после выполнения записи одного 512 байтного блока не усыпает, а на протяжении ~300 мс гребет ток в 18 мА, а только потом отключается. Ранее использованные мною карты этого производителя так себя не вели - отключались сразу после записи. Я пишу на карту 10 раз в секунду, и вместо 1,5 мА среднего тока получаю почти 20. Самое интересное, что взятая для сравнения карта с маркировкой NOKIA ведет себя примерно так же, разве что усыпает немного быстрее - за 260 мс. Я так предполагаю, что это некоторая оптимизация для ускорения записи на карту, но как бы ее отключить? Буду признателен за советы.
  3. Снова SD/MMC

    И еще интересный момент. В вышеописанных условиях первый сбой происходит на 373 секторе, а вот следующий сбой - на 629, т.е. с интервалом 256 секторов!!! Из любопытства уменьшил интервал записи секторов с 110 мс до 96. Получил первый сбой на 253 секторе (как-то не пропорционально с интервалом получилось), а вот следующий - на 509 - снова через 256 секторов!!! Что за магическое число 256 секторов для SD карты и почему так происходит вообще?
  4. Снова SD/MMC

    Цитата(aaarrr @ Sep 15 2008, 23:23) 28/0.11 = 254. Ну очень похоже на 256 - размер какого-нибудь блока флеш. Ну в таком случае это какой-то блок из 256 секторов - но я нигде не видел упоминание об этом. И еще - я пишу непрерывно, начиная с 66 сектора в файле на карте, а этот 66 сектор файла смещен относительно начала карточки на 95 секторов. Получаем начало в 161 секторе от начала карточки. Отладчикм посмотрел, что длительное ожидание происходит на 373 секторе файла, т.е. на 534 секторе от начала карточки. Но ведь это явно не блок, и явно не кратно 256. Короче, полная загадка.
  5. Снова SD/MMC

    Доброго дня. Имею аналогичную проблему с MicroSD картой. Начинаю писать на нее поток данных со скоростью примерно один сектор в 110 мс. Пишет корректно, однако один раз в 28 секунд (это я замерял, какое-то магическое числ небось) карточка держит сигнал BUSY слишком долго (до 80 мс), хотя в остальное время BUSY пропадает практически сразу после записи. Вот уже несколько дней думаю о причинах такого поведения, но как-то ничего не придумывается. Может кто знает?
  6. прерывание от P1 и P2

    Цитата(CAHTA_1939 @ Dec 3 2007, 17:44) имеются 2 шт msp430f1611. соединяю пин Р2.6 первой с Р2.6 второй микрухи и вешаю на нее прерывание(у второй микрухи). в первой , которая должна "вызывать прерывание" у второго, я вставил код. КодP2OUT = 0x00; P2DIR = BIT6; P2OUT = BIT6; _NOP(); P2OUT = 0x00; а во второй, у которой должно срабатывать прерывание... КодP2IN  = 0x00;   // P2DIR = 0x00;   //                                                             // все ножки на ввода информации P2IES = 0x00;   //                                                             // фронт...с низкого на высокий P2IE  = BIT6;   //                                                             // разрешения прерывание от P2.6 P2SEL = 0x00;   //                                                             // выбрана функция ввода\вывода #pragma vector = PORT2_VECTOR __interrupt void _port2_int_(void) {    P2IFG = 0x00;  // снятие флага запуска прерывания    P1OUT = 0х01; } на Р1.1 у меня весит светодиод. вот только он не загорается. подскажите плиз в чем я накосячел? Удивительно, как у тебя все заработало даже после того, как ты нашел свое EINT(). По-идее если ты хочешь чтобы на P1.1 выдавался сигнал, то надо делать P1OUT = 0х02, иначе дергаться будет P1.0
  7. Проблема с MicroSD картой. Кто поможет?

    Сегодня добавил еще один коненсатор на питание (хотя подозрения насчет питания и не оправдались) и подтягивающие резисторы на линии входных/выходных данных. Результаты те же. Если подробнее то ситуация такая: 1. Вызывается функция записи сектора и выполняется успешно 2. Затем вызывается функция ожидания освобождения карточки памяти, т.е. отсылает пустые байты и проверяет полученные до появления трех последовательных 0xFF. 3. Вызывается функция чтения. Ошибка происходдит при поиске стартового байта пакета данных. Когда отладчик останавливается на точке останова в подфункции поиска стартового байта я вижу что последний входной байт был равен 0??? Т.е. карточка вроде как еще занята, хотя в пункте 2 было зафиксировано несколько 0xFF, т.е. карточка освободилась. Если в этот момент руками послать пару пустых байт карточке, то входные байты станут 0xFF и будут постоянно такими пока посылаю байты. Если после этого заново послать карте команду считывания блока, то все нормально считается. Как для меня - то я не понимаю что происходит с карточкой. Разве карточка может войти в режим Busy после получения команды о считывании блока?
  8. Проблема с MicroSD картой. Кто поможет?

    Цитата(etoja @ Jan 25 2008, 07:07) Это ненормально. Проверьте правильность временной диаграммы: 1) SPI 2) транзакции команды для карточки памяти. Я тоже думаю, что это не нормально. Однако: 1. Я проверил правильность посылки команд и приема ответов по диаграммам, данным в спецификации на катры от SanDisk-a. Там все четко нарисовано, побитно. У меня все так же и реализовано. Думаю, если бы SPI был бы неправильно реализован, то не проходила бы ни одна команда. 2. Если шагать по функциям чтения/записи в отладчике, то ошибок нет, все работает. А вот когда отладчик отпускает процессор в свободный бег - то появляются такие ошибки, причем не сразу, может пару сотен секторов записать а только потом возникнет ошибка.
  9. Проблема с MicroSD картой. Кто поможет?

    Цитата(etoja @ Jan 24 2008, 07:13) Проверьте: 1)наличие подтягивающих резисторов и антизвоновых конденсаторов на сигнальных линиях карточки памяти, как это указано в прилагаемой документации. 2) наличие керамического конденсатора 1uF параллельно питанию карточки рядом с контактами разъёма карточки. У меня непрерывная запись в файл длиной 1Гигабайт идёт устойчиво (использую FAT16). Напишите тестовую программу: непрерывная запись и чтение сектора по абсолютному адресу. Если она проходит удачно, значит у вас ошибка в реализации FAT. Хотя может быть просто плохой контакт карточки в разъёме. Сегодня проверил конденсаторы, даже добавил еще один на всякий случай - не помогло. Слепил тестовый прогон - записывал и сразу после записи считывал 2000 секторов, сравнивая результаты. Ошибок, собственно в данных, нет. Однако из 2000 раз 5-25 раз процедура чтения не смогла найти байт начала данных в потоке данных от карточки после команды чтения. Может такие сбои - норма. А вот пару раз карточка вела себя неадекватно - на любую команду начинала выдавать ответ R1 0x05. Это вроде Idle и Illegal command - но не могут же все команды быть иллегальными? Пробовал руками вбивать все команды - на все такой ответ, кроме CMD0. На CMD0 ответ правильный 0x01, но это не помогало - на остальные команды все равно отвечала 0x05. Кому знакомы такие симптомы?
  10. Новая версия IAR EW430 4.10A

    Цитата(rezident @ Jan 23 2008, 21:58) У компиляторов IAR прослеживается такая тенденция - в новой версии они более тщательно стараются соответствовать стандартам языка Си. Так что, если в предыдущих версиях т.с. "прощались" некоторые вольности и неоднозначности программирования, то совсем не факт, что они не "всплывут" при компиляции этого же проекта в новой версии. Ну с версией 4.10 у меня не сложилось - постоянно падает. Интересно что проект открывает, если нажать сразу на Debug - то или просто завершается ничего не сказав, или вылетает стандартное окошко с просьбой отослать данные для анализа "что произошло" в IAR. А если сделать Rebuild all а затем Debug - все работает, заливается и отлаживается. Но стоит что-то исправить, то после частичной компиляции снова начинает падать при попытке нажать Debug. Были ли у кого-то такие симптомы?
  11. Проблема с MicroSD картой. Кто поможет?

    Цитата(etoja @ Jan 24 2008, 07:13) Проверьте: 1)наличие подтягивающих резисторов и антизвоновых конденсаторов на сигнальных линиях карточки памяти, как это указано в прилагаемой документации. 2) наличие керамического конденсатора 1uF параллельно питанию карточки рядом с контактами разъёма карточки. У меня непрерывная запись в файл длиной 1Гигабайт идёт устойчиво (использую FAT16). Напишите тестовую программу: непрерывная запись и чтение сектора по абсолютному адресу. Если она проходит удачно, значит у вас ошибка в реализации FAT. Хотя может быть просто плохой контакт карточки в разъёме. Хорошая у вас документация. А в даташите на мой Transcend TS1GUSD вообще рекомендуемой схемы подключения нет. Резисторы подтягивающие не ставил, т.к. 430 хорошо удерживает свои порты, еще ни разу не видел чтобы они у него плыли. Но попробую, если ничего не поможет. Конденсаторы на линии - это же только для больших частот обмена. Я пробовал запускать на 250 кГц SPI синхросигнала - и все равно то же самое. Питание я заподозрил с самого начала, хотя там стоит 0,1 + 2,2 мкф параллельно. Даже тектрониксом смотрел насчет проседаания питания в моменты стирания/записи. И ничего не увидел. Но сегодня с утра пропаял конденсаторы еще раз - может поможет? Ошибки в ФАТ нет, уже проверял. Виснет именно на низкоуровневых функциях чтения/записи сектора. Да и сомнительно, что неправильная реализация ФАТ могла бы так повесить карту. А вот с контактами это грустно - надо выпаивать разъем, ведь так не проверить контакт. Хотя я шатал плату в момент работы и зависимости между зависанием и механическим воздействием не заметил.
  12. Новая версия IAR EW430 4.10A

    Цитата(Сергей Борщ @ Jan 23 2008, 17:07) Ничто не мешает ему представить себе это число как знаковое и после CMP.B #0x0, R13 проверять флаг N. Скорее всего он так и делает дальше. Теперь докажите, что TST.B R13 - неправильный код. Чтобы понять причину такого решения - сравните длину и время команд BIT и CMP Да, вы правы. Компилятор все правильно сделал. Я уже и сам потом посмотрел и понял, что это я лапух. Конец дня и все такое, башка не варит. А чего я именно за это ухватился - при переходе на 4,10 версию программа зацикливалась на этом месте, хотя в предыдущей все работало. Буду разбираться что не так. А у вас часто бывает, что при переходе на новую среду разработки что-то перестает работать и надо подправлять исходный код?
  13. Новая версия IAR EW430 4.10A

    Уважаемые, а кто может объяснить такое поведение компилятора: С код: if( !(response & 0x80) ) А вот что сделал компилятор: CMP.B #0x0, R13 Хочу заметить, что компилятор из версии 3.42А давал другой код, но тоже неправильный: TST.B R13 А если поменять немного, другой бит проверять: if( !(response & 0x40) ) То компилятор дает правильный код: BIT.B #0x40, R13 Может я чего не понимаю? response - беззнаковое 8 битное число.
  14. Уважаемые форумчане, есть к вам вопрос. Итак, есть микроконтроллер msp430FG4618 и MicroSD карта Transcend. Я пытаюсь организовать поддержку FAT16/32. Для работы с карточкой я использовал техасовский пример для MMC, однако переделанный для моего конкретного применения и использования SDHC (ну это на будущее). Для FAT-а я использовал исходники DOSFS Level 1 Version 1.02 от Lewin-а, однако также достаточно переработанные мною. Вся эта канитель вроде бы работает нормально - создает файлы и папки, удаляет их, пишет в них небольшое количество данных. Однако когда я запускаю запись, скажем, мегабайт 10, то в некоторый момент с карточкой что-то происходит: на ее выходе постоянно 0, не реагирует ни на какие команды, даже CMD0. Помогает только передергивание питания. Единственное похожее состояние карточки что я нашел в спецификации - это "Inactive State". Однако согласно той же спецификации карточка не может просто так войти в это состояние - только по CMD15 или несовпадения напряжения питания в команде CMD8. Но во время записи у меня посылаются только 2 команды - чтение блока CMD17 и запись блока CMD24. Возникает такая ситуация каждый раз по-разному - может 100 секторов записать, может 5000. Но происходит все время при перезаписи сектора таблицы размещения - т.е. секторов, которые используются многократно. Может есть какая-то хитрость при работе с карточками? У кого есть опыт, поделитесь. Заранее спасибо