Перейти к содержанию
    

atruhin

Участник
  • Постов

    8
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Проблема с SPI

    Спасибо всем за рекомендации и советы, теперь только в понедельник посмотрю, отпишу результаты. BUSY смотрю при переключении страниц, при запросе статуса его смотреть не нужно, это видно и из примеров atmel, и по логике, т.к. busy, согласно документации, можно проверять 2 способами, либо проверять на выводе (если он есть), либо проверять бит статуса.
  2. Проблема с SPI

    Ну по порядку: WP напрямую на мониторе питания, так что тут проблем нет Не запрограммирован, т.е. нормальный режим atmega 128 SPDR = tx; 876: 8f b9 out 0x0f, r24 ; 15 878: 80 e0 ldi r24, 0x00 ; 0 В нерабочем/тестируемом куске именно такой код, т.е. не выкинул все ОК. Не распаян у меня JTAG, пока посмотреть не могу. Посмотрю, может завтра (у нас уже вечер). Нет. Сделал таймаут ожидания: SPDR = tx; uint8_t Cnt = 0; while(((SPSR & 0x80) == 0) and (Cnt++ < 0xFE)); rx = SPDR; Функция начала нормально читать данные. Но скорость ограниченна таймаутом. Проще но при инлайне выкидывается чтение, а оно нужно. Вообще тестирую на нескольких устройствах (пишу прошивку тестирования железа), на некоторых работает абсолютно нормально, на некоторых подвисает, похоже как раз на этих устройствах проблемы с памятью. Непонятно 2 момента: 1. как память slave может влиять на SPI 2. если ввести таймаут (см. выше) то память читается.
  3. Проблема с SPI

    Да вроде нет. Запись в SPDR и сразу простой цикл ожидания, компилируется он нормально: while(!(SPSR & 0x80)); c7c: 77 9b sbis 0x0e, 7 ; 14 c7e: fe cf rjmp .-4 ; 0xc7c <_Z12df_FlashReadjjjPh+0x74> так что вроде некому сбросить SPIF Хм. Вот нашел аналогичную тему, и то же нет решения: http://electronix.ru/forum/lofiversion/index.php/t59387.html
  4. Проблема с SPI

    Код настройки: static uint8_t df_GetStatus() { uint8_t status; SELECT(); status = DF_SPI_RW(StatusReg); status = DF_SPI_RW(0x00); DESELECT(); return status; } .... SPCR = 0; // Отключаем SPI чтобы сконфигурировать направление ножек DESELECT(); DDRB &= ~(DF_MISO_PB + DF_READY); DDRB |= DF_MOSI_PB + DF_SCK_PB + DF_SS_PB; // + DF_RESET_PB /* MOSI, SS, RESET, SCK - выходы */ SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL); // Enable SPI in Master mode, mode 3 SPSR = (1<<SPI2X); Определяю тип памяти: chip_id = df_GetStatus() & 0x3C; Это нормально отрабатывает, а вот дальше через некоторое время вызов df_GetStatus(), виснет на строке while(!(SPSR & 0x80));, причем у меня несколько устройств, практически одинаковых, на некоторых работает, на некоторых нет. Сижу вторые сутки нет ни каких идей. Хотя бы в принципе, отчего может не устанавливаться SPSR? Либо в каких ситуациях он сбрасывается кроме записи в SPDR?
  5. Проблема с SPI

    Atmega 128 и память AT45DB321, читаю статус памяти, SELECT(); status = DF_SPI_RW(StatusReg); status = DF_SPI_RW(0x00); DESELECT(); static uint8_t DF_SPI_RW( uint8_t tx ) { uint8_t rx; SPDR = tx; while(!(SPSR & 0x80)); rx = SPDR; return rx; } при первом чтении все ОК, но при повторном чтении, на строке status = DF_SPI_RW(0x00); программа зависает, т.е. SPSR не взводиться. Возможно есть проблемы с памятью, но почему не взводится флаг SPSR? Ведь насколько я понимаю, мастер устройству пофиг на реакцию слэйв устройства на SPI?
  6. Спасибо за внимание и ответы. Собака как всегда порылась в другом месте ;) Был полудохлый драйвер SP232, на некоторых скоростях/нагрузках как то жил, на других нет.
  7. M103C - посмотрел в первую очередь, не заданна. Ладно, сегодня на работе буду разбираться, затем отпишу. Думал, может какой известный глючек.
  8. Недавно начал работать с avr (раньше использовал pic)? Есть одинаковые устройства, на некоторых впаяна мега128, на некоторых мега64, нужно сделать тестовую прошивку. Поднял USART1 на устройстве с мега128, (асинхронный режим, 9600, прием/передача по прерываниям), но при прошивке в устройство с мега64, USART не работает. Причем при включении выдаю 2 тестовых байта "OK", дак вот с мега64 приходят нули ( 0x00 ). На сайте atmel про переход написано, что отличаются только размером памяти. Заводская (рабочая) прошивка в оба устройства заливается одна и та же, все ОК. В чем может быть проблема?
×
×
  • Создать...