02.03.2020, 02:27
|
|
Прописка
Регистрация: 17.07.2006
Сообщений: 129
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
|
Запись конфигурационных слов в PIC16F18456
Уважаемые коллеги, решил написать свой загрузчик для семейства PIC16. Подскажите пожалуйста, что не правильно делаю и как сделать правильно, что бы загрузчик смог записывать конфигурационные слова в микроконтроллере.
Инфо на скриншоте.
|
|
|
|
02.03.2020, 09:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.02.2008
Адрес: Ukraine, рядом с Полтавой
Сообщений: 9,783
Сказал спасибо: 5,557
Сказали Спасибо 25,356 раз(а) в 5,697 сообщении(ях)
|
Re: Запись конфигурационных слов в PIC16F18456
Насколько я помню, слово конфигурации можно только программатором снаружи писать
__________________
«Совершенство — это не тогда, когда уже нечего больше добавить, а тогда, когда уже нечего отнять.»
/Эйнштейн/
моя домашняя страничка: http://www.eddy.com.ua/
|
|
|
|
02.03.2020, 11:02
|
|
Прописка
Регистрация: 26.01.2007
Сообщений: 106
Сказал спасибо: 4
Сказали Спасибо 37 раз(а) в 25 сообщении(ях)
|
Re: Запись конфигурационных слов в PIC16F18456
Я давно для 16f877A писал:
list p=16f877A
include‹p16F877A.inc›
__CONFIG 03F76H ;Бит защиты выкл,WDT вкл,ВЧ HS-генератор RB6,7-порты
|
|
|
|
02.03.2020, 14:10
|
|
Прописка
Регистрация: 17.07.2006
Сообщений: 129
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
|
Re: Запись конфигурационных слов в PIC16F18456
Сообщение от Eddy71
|
Насколько я помню, слово конфигурации можно только программатором снаружи писать
|
Это относится только к семействе PIC16? Потому что в PIC18, конфигурационные слова пишутся загрузчиком.
|
|
|
|
02.03.2020, 14:27
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 723
Сказал спасибо: 363
Сказали Спасибо 803 раз(а) в 377 сообщении(ях)
|
Re: Запись конфигурационных слов в PIC16F18456
Этот пик умеет писать "изнутре" биты конфигурации (раздел даташита "NVM - Nonvolatile Memory Control").
В кишках МПЛАБХ-а (вернее, компилятора ХС8 ) есть файл "eeprom.c" который, возможно, окажется полезным для подсмотреть.
|
|
|
Сказали "Спасибо" j-Roger
|
|
|
02.03.2020, 14:47
|
|
Прописка
Регистрация: 17.07.2006
Сообщений: 129
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
|
Re: Запись конфигурационных слов в PIC16F18456
Сообщение от vsch8
|
Я давно для 16f877A писал:
list p=16f877A
include‹p16F877A.inc›
__CONFIG 03F76H ;Бит защиты выкл,WDT вкл,ВЧ HS-генератор RB6,7-порты
|
Вы в какой среде писали?
|
|
|
|
02.03.2020, 14:51
|
|
Прописка
Регистрация: 17.07.2006
Сообщений: 129
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
|
Re: Запись конфигурационных слов в PIC16F18456
Сообщение от j-Roger
|
Этот пик умеет писать "изнутре" биты конфигурации (раздел даташита "NVM - Nonvolatile Memory Control").
В кишках МПЛАБХ-а (вернее, компилятора ХС8 ) есть файл "eeprom.c" который, возможно, окажется полезным для подсмотреть.
|
Более того, я смотрел код загрузчика, сгенерированную МСС. Там есть фрагмент кода, на ассемблере, который именно отвечает за запись. Сейчас поищу и выставлю сюда.
Вот фрагменты, которые отвечают за запись конфигурационных слов в загрузчике, которую генерирует МСС.
Код:
|
#include "xc.h" // Standard include
#define _str(x) #x
#define str(x) _str(x)
// Force variables into Unbanked for 1-cycle accessibility
uint8_t EE_Key_1 __at(0x70) = 0;
uint8_t EE_Key_2 __at(0x71) = 0;
// Write Config Words
uint8_t Write_Config ()
{
NVMADRL = frame.address_L;
NVMADRH = frame.address_H;
NVMCON1 = 0xC4; // Setup writes
for (uint8_t i = 0; i ‹ frame.data_length; i += 2)
{
NVMDATL = frame.data[i];
NVMDATH = frame.data[i+1];
StartWrite();
if ((++ NVMADRL) == 0x00)
{
++ NVMADRH;
}
}
frame.data[0] = COMMAND_SUCCESS;
EE_Key_1 = 0x00; // erase EE Keys
EE_Key_2 = 0x00;
return (10);
}
// Unlock and start the write or erase sequence.
void StartWrite()
{
CLRWDT();
// NVMCON2 = EE_Key_1;
// NVMCON2 = EE_Key_2;
// NVMCON1bits.WR = 1; // Start the write
// had to switch to assembly -
// compiler doesn't comprehend no need
// for bank switch
asm ("movf " str(_EE_Key_1) ",w");
asm ("movwf " str(BANKMASK(NVMCON2)));
asm ("movf " str(_EE_Key_2) ",w");
asm ("movwf " str(BANKMASK(NVMCON2)));
asm ("bsf " str(BANKMASK(NVMCON1)) ",1"); // Start the write
NOP();
NOP();
return;
} |
Может суть зарыта в комменте, которую выделил жирным текстом и подчеркнул?
Последний раз редактировалось stubiflex; 02.03.2020 в 17:01.
|
|
|
|
02.03.2020, 17:31
|
|
Супер-модератор
Регистрация: 09.06.2011
Сообщений: 2,671
Сказал спасибо: 74
Сказали Спасибо 1,806 раз(а) в 654 сообщении(ях)
|
Re: Запись конфигурационных слов в PIC16F18456
Сообщение от stubiflex
|
Более того, я смотрел код загрузчика, сгенерированную МСС. Там есть фрагмент кода, на ассемблере, который именно отвечает за запись.
|
Что-то я не пойму, чего вы хотите...
Вы хотите из своей программы переписать биты конфигурации? Так, что ли?
А на первом скриншоте у вас - сообщение программатора, который не может записать данные по указанному адресу...
То есть, до выполнения программы дело даже не дошло - оно застряло ещё на этапе программирования МК...
..
Последний раз редактировалось RECTO; 02.03.2020 в 17:40.
|
|
|
|
02.03.2020, 19:00
|
|
Прописка
Регистрация: 17.07.2006
Сообщений: 129
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
|
Re: Запись конфигурационных слов в PIC16F18456
"Что-то я не пойму, чего вы хотите...
Вы хотите из своей программы переписать биты конфигурации? Так, что ли?"
Да.
"А на первом скриншоте у вас - сообщение программатора, который не может записать данные по указанному адресу...
То есть, до выполнения программы дело даже не дошло - оно застряло ещё на этапе программирования МК..."
Совершенно верно.
Вопрос в том, почему?
|
|
|
|
02.03.2020, 19:14
|
|
Супер-модератор
Регистрация: 09.06.2011
Сообщений: 2,671
Сказал спасибо: 74
Сказали Спасибо 1,806 раз(а) в 654 сообщении(ях)
|
Re: Запись конфигурационных слов в PIC16F18456
Сообщение от stubiflex
|
Совершенно верно.
Вопрос в том, почему?
|
Судя по всему, адреса 8007h физически не существует: программатор пытается записать туда значение "2914", при проверке получает "63" (=3FFh).
Скорее всего, в проекте неправильно указан тип МК...
Последний раз редактировалось RECTO; 02.03.2020 в 19:35.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:00.
|
|