03.12.2021, 11:04
|
|
Прохожий
Регистрация: 01.12.2021
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
dsPIC33CH slave ядро не стартует (PLL+boot)
Привет!
Я использую: dsPIC33CH512MP508, MPLAB X v5.50, MCC v5.0.3, XC16 v1.70.
Создал три проекта с помощью MCC: Master, Slave, boot (bootloader).
Каждый из них использует Primary Oscilator (8 МГц) и PLL.
1. Когда прошиваю Master через ICSP (без boot) - всё работает (master LED и slave LED мигают).
2. Когда прошиваю boot через ICSP, затем заливаю Master через UART - работает только Master ядро (master LED мигает, slave LED просто горит).
3. Когда отключаю PLL в Slave проекте и повторяю действия из пункта 2, то всё работает.
PLL мне необходим. В чём может быть проблема?
Благодарю.
PS Slave code:
Код:
|
void CLOCK_Initialize(void)
{
// FRCDIV FRC/1; PLLPRE 1; DOZE 1:8; DOZEN disabled; ROI disabled;
CLKDIV = 0x3001;
// PLLFBDIV 150;
PLLFBD = 0x96;
// POST1DIV 1:3; VCODIV FVCO/4; POST2DIV 1:1;
PLLDIV = 0x31;
// APLLEN disabled; FRCSEL FRC; APLLPRE 1:1;
ACLKCON1 = 0x101;
// APLLFBDIV 150;
APLLFBD1 = 0x96;
// APOST1DIV 1:4; APOST2DIV 1:1; AVCODIV FVCO/4;
APLLDIV1 = 0x41;
// ROEN disabled; ROSWEN disabled; ROSLP disabled; ROSEL FOSC; ROOUT disabled; ROSIDL disabled;
REFOCONL = 0x00;
// RODIV 0;
REFOCONH = 0x00;
// ROTRIM 0;
REFOTRIMH = 0x00;
// IOLOCK disabled;
RPCON = 0x00;
// ADC1MD enabled; T1MD enabled; U1MD enabled; SPI1MD enabled; QEIMD enabled; PWMMD enabled; I2C1MD enabled;
PMD1 = 0x00;
// CCP2MD enabled; CCP1MD enabled; CCP4MD enabled; CCP3MD enabled;
PMD2 = 0x00;
// REFOMD enabled;
PMD4 = 0x00;
// DMA1MD enabled; DMA0MD enabled;
PMD6 = 0x00;
// CMP3MD enabled; PGA1MD enabled; CMP1MD enabled; CMP2MD enabled;
PMD7 = 0x00;
// CLC3MD enabled; CLC4MD enabled; PGA2MD enabled; PGA3MD enabled; CLC1MD enabled; CLC2MD enabled;
PMD8 = 0x00;
// CF no clock failure; NOSC PRIPLL; CLKLOCK unlocked; OSWEN Switch is Complete;
__builtin_write_OSCCONH((uint8_t) (0x03));
__builtin_write_OSCCONL((uint8_t) (0x01));
// Wait for Clock switch to occur
while (OSCCONbits.OSWEN != 0);
while (OSCCONbits.LOCK != 1);
} |
Master code:
Код:
|
void CLOCK_Initialize(void)
{
// FRCDIV FRC/1; PLLPRE 1; DOZE 1:8; DOZEN disabled; ROI disabled;
CLKDIV = 0x3001;
// PLLFBDIV 135;
PLLFBD = 0x87;
// TUN Center frequency;
OSCTUN = 0x00;
// POST1DIV 1:3; VCODIV FVCO/4; POST2DIV 1:1;
PLLDIV = 0x31;
// APLLEN disabled; FRCSEL FRC; APLLPRE 1:1;
ACLKCON1 = 0x101;
// APLLFBDIV 150;
APLLFBD1 = 0x96;
// APOST1DIV 1:4; APOST2DIV 1:1; AVCODIV FVCO/4;
APLLDIV1 = 0x41;
// CANCLKEN disabled; CANCLKSEL No Clock Selected; CANCLKDIV Divide by 1;
CANCLKCON = 0x00;
// ROEN disabled; ROSWEN disabled; ROSLP disabled; ROSEL FOSC; ROOUT disabled; ROSIDL disabled;
REFOCONL = 0x00;
// RODIV 0;
REFOCONH = 0x00;
// ROTRIM 0;
REFOTRIMH = 0x00;
// IOLOCK disabled;
RPCON = 0x00;
// ADC1MD enabled; T1MD enabled; U2MD enabled; U1MD enabled; SPI2MD enabled; SPI1MD enabled; QEIMD enabled; C1MD enabled; PWMMD enabled; I2C1MD enabled;
PMD1 = 0x00;
// CCP2MD enabled; CCP1MD enabled; CCP4MD enabled; CCP3MD enabled; CCP7MD enabled; CCP8MD enabled; CCP5MD enabled; CCP6MD enabled;
PMD2 = 0x00;
// CRCMD enabled; I2C2MD enabled;
PMD3 = 0x00;
// REFOMD enabled;
PMD4 = 0x00;
// DMA5MD enabled; DMA1MD enabled; DMA2MD enabled; DMA3MD enabled; DMA4MD enabled; DMA0MD enabled;
PMD6 = 0x00;
// PTGMD enabled; CMP1MD enabled;
PMD7 = 0x00;
// DMTMD enabled; CLC3MD enabled; BIASMD enabled; CLC4MD enabled; SENT2MD enabled; SENT1MD enabled; CLC1MD enabled; CLC2MD enabled;
PMD8 = 0x00;
// CF no clock failure; NOSC PRIPLL; CLKLOCK unlocked; OSWEN Switch is Complete;
__builtin_write_OSCCONH((uint8_t) (0x03));
__builtin_write_OSCCONL((uint8_t) (0x01));
// Wait for Clock switch to occur
while (OSCCONbits.OSWEN != 0);
while (OSCCONbits.LOCK != 1);
} |
Код:
|
void SLAVE1_Initialize()
{
//SRSTIE disabled; SLVEN disabled; MTSIRQ disabled; RFITSEL Trigger data valid interrupt when 1st FIFO entry is written by Slave; STMIACK disabled;
MSI1CON = 0x00;
//WFEN enabled; RFEN enabled;
MSI1FIFOCS = 0x8080;
MSI1CONbits.SRSTIE = 1;
MSI1CONbits.SLVEN = 1;
SLAVE1_Program();
SLAVE1_Start();
} |
Не знаю что именно вас интересует, поскольку не знаю где проблема.
Могу полностью исходники скинуть. (в виде архива, например).
PPS Всё три проекта в архиве.
Последний раз редактировалось mike-y-k; 03.12.2021 в 13:43.
Причина: 6.6, 7.15
|
|
|
|
05.12.2021, 10:30
|
|
Прописка
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: dsPIC33CH slave ядро не стартует (PLL+boot)
Вообще это желательно смотреть в отладчике. По своему опыту работы с этим чипом (точнее с MP208 ) могу сказать, что при полных и непрерывных максимальных скоростях мастера и слейва устойчивой работы не получилось. В серийном изделии мастер работает на 75 МИПС-ах, а слейв динамически меняет скорость. Причем есть эпизод с разгоном до 150 МИПС для захвата данных с пинов от параллельного конвейерного АЦП через ДМА. Есть значительное время работы на 75 МИПС-ах (редукция 1:2) и остальное время (интервал фактического простоя) ядро работает на примерно 18 МИПС (редукция 1:8 ). В слейв ядре так же запущены три PWM на 500 МГц в режиме высокого разрешения и один PWM в стандартном, но тоже на 500 МГц. Все ШИМы работают лишь 1% времени.
На начальном этапе разработки я пытался запускать 90 и 100 МГц с ШИМами, но мастер при этом падал (уходил в ошибки адреса или стека случайным образом) пока я не опустил его до ниже 80.
Разогрев был очень приличный. Тепловизор показывал примерно 75...80 градусов на кристалле уже через примерно 3...5 мин.
Возможно, что пока вы грузите бутом флеш, чип подогревается настолько, что запуск на полных скоростях становится невозможным. А когда сразу после прошивки через ICSP он вроде как работает.
ЗЫ. Есть сильное подозрение, что все чипы этого семейства были выпущены в конце 18-го года (мои на 33-ей неделе) и такого рода эффекты будут наблюдаться у всех.
Последний раз редактировалось my504; 05.12.2021 в 10:33.
|
|
|
|
06.12.2021, 13:30
|
|
Прохожий
Регистрация: 01.12.2021
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от my504
|
Вообще это желательно смотреть в отладчике. По своему опыту работы с этим чипом ....
|
Мой опыт этого не подтверждает. Мой рабочий проект использует slave ядро почти на 100% на частоте 200МГц (QPSK модуляция), т.е. оно занято вычислениями постоянно. При этом проводил испытания в термокамере при температуре 120 гр.Ц. в течении 6 часов. Всё ОК.
Согласен, MIPS - величина не постоянная.
Работает.
Подключил slave ядро к бутлоадеру (так же как в Master проекте) с теми же настройками и всё заработало.
Думаю, это не лучший решение, поскольку все изменения в Master (собственник ножек, прерывания и т.п.) нужно будет так же переносить в boot.
По хорошему нужно, как-то реинициализировать всё это.
Последний раз редактировалось mike-y-k; 06.12.2021 в 15:02.
Причина: 6.6
|
|
|
|
07.12.2021, 22:27
|
|
Прописка
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: dsPIC33CH slave ядро не стартует (PLL+boot)
Во первых, если бы вы в самом деле поднимали температуру в термокамере до 120 градусов, то даже стандартное потребление слейва и мастера на 90 МИПСах БЕЗ включения ШИМов разогревает чип в TQFP80 примерно на 40 градусов поверх среды. То есть примерно до 70 градусов. То есть вы утверждаете, что разогрели кристалл до 120+40=160. ![Очень смешно](images/smilies/icon_veryhappy.gif)
Позвольте вам не поверить.
Во вторых, у МК этой архитектуры при отказе от использования DOZE MODE нет понятия "занятости вычислениями". МК совершенно по барабану что написано во флеше - пустой цикл или сложнейшие вычисления.
Ну и в третьих, я ничего не говорил о слейве. Я сказал, что падает МАСТЕР при попытке работать на 90 МИПСах при полной скорости слейва. Есть такое ощущение, что падает чтение из флеша программного кода. А PRAM слейва работает безукоризненно.
Я вам предложил посмотреть в отладчике состояние слейва ИЗ МАСТЕРА в режиме, когда он отказывается работать. Чего там с битом SLVEN?
Ваши странные попытки в коде установить этот бит просто так наводят на некоторые грустные мысли...
Последний раз редактировалось mike-y-k; 08.12.2021 в 13:29.
Причина: 7.15
|
|
|
|
08.12.2021, 05:47
|
|
Прохожий
Регистрация: 01.12.2021
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от my504
|
Во первых…
|
Чип рассчитан работать гарантированно при температуре окружающей среды до 125 гр.Ц (@ 90 МИПС). И 6 часов в термокамере в рабочем состоянии с тремя шимами, тремя UART-ами, двумя SPI и т.д. доказывает, что даташиты не врут.
Сообщение от my504
|
Во вторых…
|
Согласен, некорректно выразился. Имел ввиду, что постоянно работают модули ШИМ, АЦП, UART, SPI ..
Сообщение от my504
|
SLVEN
|
Без SLVEN бита слейв не стартует. Как бы вы сделали?
Последний раз редактировалось mike-y-k; 08.12.2021 в 13:28.
Причина: 6.6, 7.15
|
|
|
|
08.12.2021, 22:21
|
|
Прописка
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: dsPIC33CH slave ядро не стартует (PLL+boot)
Сообщение от denos
|
Чип рассчитан работать гарантированно при температуре окружающей среды до 125 гр.Ц (@ 90 МИПС)......даташиты не врут.
|
Даташиты действительно не врут. Я даташиты во вранье не обвинял.
Почитаем даташит.
В даташите есть формула расчета максимально допустимой рассеиваемой мощности.
Для версии чипа Extended (У вас какая версия?) макс. среда 125, макс. кристалл 140, максимальная мощность составит для корпуса TQFP80 - 296 мВт (собственное потребление 90 мА)
При этом только ЯДРА на своих максимальных скоростях потребляют от 67 до 98 мА.
![Прикольно](images/smilies/icon_wink3.gif) "Так о чем же этот фильм? Да ни о чем...." (с)
У версии Industrial макс.среда 85, макс. кристалл 125 и расчет мощности на максимальной температуре дает нам 790 мВт (239 мА). К этому нужно добавить, что КАЖДЫЙ ШИМ работающий на максимальной частоте тактирования (а не выходной частоте!) 500 МГц потребляет по 8 мА и около 10 мА потребляет APLL от которого тактируются ШИМы на 500 Гц...
![Очень смешно](images/smilies/icon_veryhappy.gif) ![Очень смешно](images/smilies/icon_veryhappy.gif)
Сообщение от denos
|
Без SLVEN бита слейв не стартует. Как бы вы сделали?
|
Вообще то слейв запускается этим битом после разблокировки. Это обязательная последовательность. Разблокировка действует один или два машинных цикла.
Последний раз редактировалось my504; 08.12.2021 в 22:29.
|
|
|
|
10.12.2021, 06:03
|
|
Прохожий
Регистрация: 01.12.2021
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: dsPIC33CH slave ядро не стартует (PLL+boot)
Сообщение от my504
|
Для версии чипа Extended (У вас какая версия?)
|
Extended.
Сообщение от my504
|
Вообще то слейв запускается этим битом после разблокировки. Это обязательная последовательность. Разблокировка действует один или два машинных цикла.
|
Что-то не пойму. Как должно быть на ваш взгляд?
Последний раз редактировалось denos; 10.12.2021 в 06:09.
|
|
|
|
10.12.2021, 09:46
|
|
Прописка
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: dsPIC33CH slave ядро не стартует (PLL+boot)
Сообщение от denos
|
Что-то не пойму. Как должно быть ...?
|
Моего "взгляда" тут нет. Тут есть прямое требование даташита на контроллер в разделе междупроцессорного интерфейса MSI.
Нам пишут:
Цитата:
|
The SLVEN bit may only be modified after satisfying the
hardware write interlock. The SLVEN bit is protected
from unexpected writes through a software unlocking
sequence that is based on the MSI1KEY register.
Given the critical nature of the MSI control interface,
the MSI macro unlock mechanism is independent from
that of the Flash controller for added robustness.
Completing a predefined data write sequence to the
MSI1KEY register will open a window. The SLVEN bit
should be written on the first instruction that follows the
unlock sequence. No other bits within the MSI1CON
register are affected by the interlock. The MSI1KEY
register is not a physical register. A read of the
MSI1KEY register will read all ‘0’s.
|
Вы привели код из библиотечной инициализации:
Цитата:
|
void SLAVE1_Initialize()
{
//SRSTIE disabled; SLVEN disabled; MTSIRQ disabled; RFITSEL Trigger data valid interrupt when 1st FIFO entry is written by Slave; STMIACK disabled;
MSI1CON = 0x00;
//WFEN enabled; RFEN enabled;
MSI1FIFOCS = 0x8080;
MSI1CONbits.SRSTIE = 1;
MSI1CONbits.SLVEN = 1;
SLAVE1_Program();
SLAVE1_Start();
}
|
Отмеченное красным работать не будет, а вместо него нужно написать код для останова слейва, дабы не использовать дефолтный ресет слейва, когда он аппаратно остановлен.
Код останова слейва идентичен коду старта в функции SLAVE1_Start(), с той лишь разницей, что в последней инструкции bset нужно заменить на bclr.
|
|
|
|
03.03.2022, 17:40
|
|
Заблокирован
Регистрация: 13.06.2008
Сообщений: 248
Сказал спасибо: 3
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: dsPIC33CH slave ядро не стартует (PLL+boot)
Код:
|
Asm volatile ( "Mov #osccon, w1\n"
" mov #0x46,w2\n"
"mov #0x57,w3\n"
"mov.b w2,[w1]\n"
"mov.b w3,[w1]\n"
"bclr osccon, #6");rpor,pll,div |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:28.
|
|