Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: BODLEVEL в ATtiny2313
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
tobias_ivan
Не могу через последовательный программатор установить нужные значения.
Хотя прогрмматор самопальный, но ATmega128 программирует, поэтому собственно сабж?
AndryG
Цитата(tobias_ivan @ Nov 14 2006, 17:10) *
Не могу через последовательный программатор установить нужные значения.
Хотя прогрмматор самопальный, но ATmega128 программирует, поэтому собственно сабж?


Без проблем и заминок устанавливал с помощью AVReal в паре с STK200/300

Никаких заморочек ни разу не было.
VDG
Цитата(tobias_ivan @ Nov 14 2006, 17:10) *
Не могу через последовательный программатор установить нужные значения.
Хотя прогрмматор самопальный, но ATmega128 программирует, поэтому собственно сабж?

А в чём конкретно проблема? Какой программатор, какая управляющая программа?...
Potter
Цитата(tobias_ivan @ Nov 14 2006, 16:10) *
Не могу через последовательный программатор установить нужные значения.
Хотя прогрмматор самопальный, но ATmega128 программирует, поэтому собственно сабж?



Обратите внимание, что для некоторых процессоров (например, ATmega103, ATmega64, ATmega128) в режиме программирования вместо выводов MOSI, MISO её аппаратного контроллера SPI используются соответственно выводы PDI/RXD и PDO/TXD.

http://www.ln.com.ua/~real/avreal/adapters.html

Может в этом причина.....
prottoss
Цитата(tobias_ivan @ Nov 14 2006, 16:10) *
Не могу через последовательный программатор установить нужные значения.
Хотя прогрмматор самопальный, но ATmega128 программирует, поэтому собственно сабж?
Возможно, кривое ПО? Так какой программатор то, будете колоться?
Цитата(Potter @ Nov 15 2006, 03:31) *
Обратите внимание, что для некоторых процессоров....
Может в этом причина.....
Вообще то здесь речь идет об одной модели МК - ATtiny2313
Diusha
Обратите внимание, что у разных АВР ФУСы по-разному распиханы по фус-байтам
tobias_ivan
Цитата
Возможно, кривое ПО?

Почти 100%...
Цитата
Так какой программатор то, будете колоться?

Я написал - самопальный! wink.gif

Вот фрагмент проги, которая пишет fuse
Код
spiSend(0xAC);
spiSend(0xA0);
spiSend(0);
spiSend((BYTE)*(*buf+0));
Sleep(50);
spiSend(0xAC);
spiSend(0xA8);
spiSend(0);
spiSend((BYTE)*(*buf+1));
Sleep(50);
spiSend(0xAC);
spiSend(0xA4);
spiSend(0);
spiSend((BYTE)*(*buf+2));

Повторю - для ATmega128 и ATmega8515 запись проходит, проблема возникла с ATtiny2313. Программируется только Fuse Low Byte... а хочется чтобы и Fuse High Byte, а также Fuse Extended Byte.
Может между записями разных Fuse нужно выходить из режима прораммирования? huh.gif
prottoss
Цитата(tobias_ivan @ Nov 15 2006, 13:54) *
Вот фрагмент проги, которая пишет fuse ...
...Повторю - для ATmega128 и ATmega8515 запись проходит, проблема возникла с ATtiny2313. Программируется только Fuse Low Byte... а хочется чтобы и Fuse High Byte, а также Fuse Extended Byte.
Может между записями разных Fuse нужно выходить из режима прораммирования? huh.gif
Да нет, все нормально...Вот только Sleep(50); - это в милисекундах? Точно? Биты можно шить не выходя из режима программирования...
tobias_ivan
Цитата(prottoss @ Nov 15 2006, 10:59) *
Да нет, все нормально...Вот только Sleep(50); - это в милисекундах? Точно? Биты можно шить не выходя из режима программирования...

Ага. Пишу в C++ Builder 5.
В хелпе так сказано:

Цитата
The Sleep function suspends the execution of the current thread for a specified interval.

VOID Sleep(

DWORD dwMilliseconds // sleep time in milliseconds
);


Parameters

dwMilliseconds

Specifies the time, in milliseconds, for which to suspend execution. A value of zero causes the thread to relinquish the remainder of its time slice to any other thread of equal priority that is ready to run. If there are no other threads of equal priority ready to run, the function returns immediately, and the thread continues execution. A value of INFINITE causes an infinite delay.

Return Values

This function does not return a value.
Tcom
Pony Prog програмит точно, я вот только что это сделал. Программатор обычный ЛПТ порт и 4 резистора.
add
Цитата
Не могу через последовательный программатор установить нужные значения.
Хотя прогрмматор самопальный, но ATmega128 программирует, поэтому собственно сабж?

Возможно у Вас залочена микруха, и фузы необновляються. Попробуйте стереть и установить. (конечно мало вероятно но всеже)
Тин прошил за последний месяц штук 700 (партия). Все ок.
tobias_ivan
Спасибо всем за участие!
Пока проблему не решил... huh.gif
defunct
Цитата(tobias_ivan @ Nov 17 2006, 17:50) *
Пока проблему не решил... huh.gif

Может быть проблема с чтением фузов?
Еще, может быть стоит попробовать поменять порядок прошивки - вначале high, потом low?
extended fuse для t2313 вообще-то особой смысловой нагрузки не несет.
tobias_ivan
Все решил!
Все-таки фузы стали програмироваться после того, как между записью соседних фузов добавил процедуру вхождения в режим программирования. cool.gif
Всем спасибо! cheers.gif

ЗЫ. Кстати, где-то об этом читал, только не помню где...
ReAl
Цитата(tobias_ivan @ Nov 20 2006, 08:55) *
Все решил!
Все-таки фузы стали програмироваться после того, как между записью соседних фузов добавил процедуру вхождения в режим программирования. cool.gif
Всем спасибо! cheers.gif

ЗЫ. Кстати, где-то об этом читал, только не помню где...

Впервые слышу о таком. Всё программирование и всю верификацию делаю на одном входе в программирование (за исключением необходимости перевойти в программирование после стирания - но об этом написано явно в описании процедуры стирания).
Вот фрагмент кода avreal
Код
static void
DoWriteFuses(uchar i1, uchar i3)
{
    uchar iobuf[4] = { 0xAC, i1, 0x00, i3 };
    Dump4bytes(3, "WriteFuses command", iobuf);
    SPIio(4, iobuf);
    Delayus(fuses_delay);
    Dump4bytes(3, "WriteFuses reply  ", iobuf);
}

void
WriteFuses()
{
    assert(dev_id >= 0);
    assert(WorkChip()->fuselist != NULL);

    os_printf("Programming fuses\n");
    // fusein[].mask collected in CollectFuses to OR of all implemented fields
    for(int i = 0; i < FUSE_SIZE; ++i)
    {
        // mask unused bits in fusein[].val to '1' (can be readed as 'x' => must be ignored)
        fuseout[i].val = uchar((fuseout[i].val & fuseout[i].mask)       // requested
                               | ((fusein[i].val | ~fusein[i].mask) & ~fuseout[i].mask));       // read | not_implemented
    }

    fusetype ft = WorkChip()->ftype;

    switch (ft)
    {
    case F_NONE:               // error
        return;

    case F_OLD1:
    case F_OLD2:
        DoWriteFuses(uchar((fuseout[0].val & 0xBF) | 0xA0), 0);
        break;

    case F_NEW:
        fusemask fmask = WorkChip()->fmask;
        if(fmask & FM_LOW && fuseout[FA_LOW].mask != 0)
            DoWriteFuses(0xA0, fuseout[FA_LOW].val);
        if(fmask & FM_HIGH && fuseout[FA_HIGH].mask != 0)
            DoWriteFuses(0xA8, fuseout[FA_HIGH].val);
        if(fmask & FM_EXT && fuseout[FA_EXT].mask != 0)
            DoWriteFuses(0xA4, fuseout[FA_EXT].val);
        if(fmask & FM_LOCK && fuseout[FA_LOCK].mask != 0)
            DoWriteFuses(0xE0, fuseout[FA_LOCK].val);
        break;

    }
}
prottoss
Цитата(tobias_ivan @ Nov 20 2006, 13:55) *
Все решил!
Все-таки фузы стали програмироваться после того, как между записью соседних фузов добавил процедуру вхождения в режим программирования. cool.gif
Всем спасибо! cheers.gif

ЗЫ. Кстати, где-то об этом читал, только не помню где...
Все же что то у вас в РС-софтине не то - все должно программиться на одном вхождении в режим программирования
tobias_ivan
Цитата(prottoss @ Nov 20 2006, 20:10) *
Все же что то у вас в РС-софтине не то - все должно программиться на одном вхождении в режим программирования


Хз. Могу предположить, что нарушается синхронизация после записи первого фуза, только вот каким образом - незнаю. Причем, повторюсь, на ATmega128 и ATmega8515 запись проходит.

Поменял порядок записи (сначала фуз хай, затем фуз лоу), старший стал записываться, младший - нет. Это и навело на мысль, что нужно вставить повторное вхождение в режим программирования.

В любом случае главное - результат.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.