Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 11.08.2010, 23:09   #1
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Не запускается прошивка записанная бутлоадером AN1094

Разобрался в алгоритме лоадера на базе примера микрочипа AN1094
http://www.microchip.com/stellent/id...pnote=en530200
Алгоритм довольно прост и понятен. Использую микроконтроллер PIC24FJ64GA004. Подкорректировал пример бутлоадера под свой контроллер, пришлось также симулировать байты ID контроллера так как программное обеспечение которое идет в комплекте примера не поддерживает данный девайс (в результате бут выдает ID ближайшего сородича с тем же объемом памяти – PIC24FJ64GA006). Работает ПО с бутом нормально – читает ID, записывается флеш, читает флеш и т.д. Прошивка которая записывается через бут также откомпилирована на С30 с требованиями доки AN1094 (изменены адреса начала памяти программ как в буте так и в программе). Верификация на обычном программаторе проходит отлично – исключаем блок кодов бута и первый код – и прошивка полностью соответствует по которое должно было записаться.

В результате программа что записана бутом не запускается – контроллер почему то получается находится в режиме ожидания данных с линии бутлоадера? – если же штучно подать с терминала команду ресет в результате которой бут должен выполнится следующий блок:
;************************************************* **************
_ResetDevice:

goto 0xc02

return

;************************************************* **************

и программа должна перейти на адрес старта основной программы – не выполняется (после запуска подпрограммы перехода стоит маяк который сигналит что программа не перепрыгнула на адрес 0xc02). Причем получается что программа отказывается прыгать только когда бут сделал запись во флеш, если же флеш незаписана нормально пригает… странно!

В тоже время та же прошивка записана обычным программатором отлично работает.

В чем может быть проблема? Отзовитесь кто работал с этим примером бутлоадера?
gsm_storozh вне форума   Ответить с цитированием
Старый 12.08.2010, 16:30   #2
Sash
Senior Member
 
Регистрация: 14.04.2007
Адрес: Не очень далеко от Питера (Новосибирск)
Возраст: 37
Сообщений: 915
Вес репутации: 1304/50
Sash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud of
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Попробуй убрать перезапись конфигурации.
Sash вне форума   Ответить с цитированием
Старый 12.08.2010, 18:31   #3
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от Sash Посмотреть сообщение
Попробуй убрать перезапись конфигурации.
А на что может повлиять перезапись конфигурации? в ПО на ПК конфигурация записывается автоматически после записи основной программы... в любом случае конфигурация записыватся та же что в бутлоадере...?
gsm_storozh вне форума   Ответить с цитированием
Старый 13.08.2010, 03:14   #4
NeoKlin
Senior Member
 
Регистрация: 05.03.2007
Сообщений: 253
Вес репутации: 117/32
NeoKlin will become famous soon enoughNeoKlin will become famous soon enough
Отправить сообщение для NeoKlin с помощью ICQ Отправить сообщение для NeoKlin с помощью Skype™
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Была такая же проблема только на пик18.убрал запись конфигурации с загружаемой программы и всё заработало.
NeoKlin вне форума   Ответить с цитированием
Старый 13.08.2010, 09:06   #5
Sash
Senior Member
 
Регистрация: 14.04.2007
Адрес: Не очень далеко от Питера (Новосибирск)
Возраст: 37
Сообщений: 915
Вес репутации: 1304/50
Sash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud of
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от gsm_storozh Посмотреть сообщение
А на что может повлиять перезапись конфигурации? в ПО на ПК конфигурация записывается автоматически после записи основной программы... в любом случае конфигурация записыватся та же что в бутлоадере...?
Я же говорю... попробуй.
Sash вне форума   Ответить с цитированием
Старый 14.08.2010, 02:41   #6
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от NeoKlin Посмотреть сообщение
Была такая же проблема только на пик18.убрал запись конфигурации с загружаемой программы и всё заработало.
попробовал не помогло
gsm_storozh вне форума   Ответить с цитированием
Старый 14.08.2010, 07:54   #7
Sash
Senior Member
 
Регистрация: 14.04.2007
Адрес: Не очень далеко от Питера (Новосибирск)
Возраст: 37
Сообщений: 915
Вес репутации: 1304/50
Sash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud of
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от gsm_storozh Посмотреть сообщение
попробовал не помогло
Ну тогда покажи исходники бута и программы.
Sash вне форума   Ответить с цитированием
Старый 14.08.2010, 13:59   #8
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от Sash Посмотреть сообщение
Ну тогда покажи исходники бута и программы.
Программу не коректировал - полностью соответствует примеру микрочипа AN1094
http://www.microchip.com/stellent/id...pnote=en530200

Бут немножко поковырял (в общем добавил только настройки портов и уарт, все строки которые удалил из исходного проекта через "//" ). Часть проекта бута на ассемблере полностью соответствует по этому не выкладываю.

Код:
//#include "p24Hxxxx.h"
#include "p24fj64ga004.h"

#define COMMAND_NACK     0x00
#define COMMAND_ACK      0x01
#define COMMAND_READ_PM  0x02
#define COMMAND_WRITE_PM 0x03
#define COMMAND_WRITE_CM 0x07
#define COMMAND_RESET    0x08
#define COMMAND_READ_ID  0x09

#define PM_ROW_SIZE 64 * 8
#define CM_ROW_SIZE 8
#define CONFIG_WORD_SIZE 1

#define PM_ROW_ERASE 		0x4042
#define PM_ROW_WRITE 		0x4001
#define CONFIG_WORD_WRITE	0X4000

//#define FCY   40000000
//#define BAUDRATE        115200                   
//#define BRGVAL          ((FCY/BAUDRATE)/16)-1 

#define FCY   4000000
#define BAUDRATE        9600                   
#define BRGVAL          ((FCY/BAUDRATE)/16)-1 

#define led_2 _LATA8
#define led_1 _LATC1

_CONFIG1( JTAGEN_OFF &GCP_OFF &GWRP_OFF &BKBUG_OFF &ICS_PGx1 &FWDTEN_OFF &WINDIS_OFF &FWPSA_PR128 &WDTPS_PS32768 );

_CONFIG2(IESO_OFF &FNOSC_PRI &FCKSM_CSDCMD &OSCIOFNC_OFF &IOL1WAY_OFF &I2C1SEL_SEC &POSCMOD_XT );

// External Oscillator
//_FOSCSEL(FNOSC_PRIPLL);								// Primary (XT, HS, EC) Oscillator with PLL
//_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF  & POSCMD_XT);	// Clock Switching and Fail Safe Clock Monitor is disabled												// OSC2 Pin Function: OSC2 is Clock Output
													// Primary Oscillator Mode: XT Crystanl
//_FWDT(FWDTEN_OFF); 						            // Watchdog Timer Enabled/disabled by user software												// (LPRC can be disabled by clearing SWDTEN bit in RCON register
//_FPOR(PWRTEN_OFF);  					 			// Turn off the power-up timers.
//_FGS(GCP_OFF);            							// Disable Code Protection


typedef short          Word16;
typedef unsigned short UWord16;
typedef long           Word32;
typedef unsigned long  UWord32;

typedef union tuReg32
{
	UWord32 Val32;

	struct
	{
		UWord16 LW;
		UWord16 HW;
	} Word;

	char Val[4];
} uReg32;

extern UWord32 ReadLatch(UWord16, UWord16);
void PutChar(char);
void GetChar(char *);
void WriteBuffer(char *, int);
void ReadPM(char *, uReg32);
void WritePM(char *, uReg32);

char Buffer[PM_ROW_SIZE*3 + 1];

int main(void)

{

    uReg32 SourceAddr;
	uReg32 Delay;
	
// Configure Oscillator to operate the device at 40Mhz
// Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
// Fosc= 8M*40(2*2)=80Mhz for 8M input clock
//	PLLFBD=38;					// M=40
//	CLKDIVbits.PLLPOST=0;		// N1=2
//	CLKDIVbits.PLLPRE=0;		// N2=2
//	OSCTUN=0;					// Tune FRC oscillator, if FRC is used
//	RCONbits.SWDTEN=0;            /* Disable Watch Dog Timer*/
//	while(OSCCONbits.LOCK!=1) {}; /* Wait for PLL to lock*/
//	ResetDevice();
	SourceAddr.Val32 = 0xc00;

	Delay.Val32 = ReadLatch(SourceAddr.Word.HW, SourceAddr.Word.LW);

	if(Delay.Val[0] == 0)
	{
		ResetDevice();
	}

	T2CONbits.T32 = 1; /* to increment every instruction cycle */
	IFS0bits.T3IF = 0; /* Clear the Timer3 Interrupt Flag */
	IEC0bits.T3IE = 0; /* Disable Timer3 Interrup Service Routine */

	if((Delay.Val32 & 0x000000FF) != 0xFF)
	{
		/* Convert seconds into timer count value */
		Delay.Val32 = ((UWord32)(FCY)) * ((UWord32)(Delay.Val[0]));

		PR3 = Delay.Word.HW;
		PR2 = Delay.Word.LW;

		/* Enable Timer */
		T2CONbits.TON=1;
	}
	AD1PCFG=0xffff;
	TRISB = 0b1111111011111110; //0x0300;
	LATB =  0b0000000000000001;
	TRISC = 0b1111111111111001; 
	TRISA = 0b1111111011111101;
	TRISA =0;


	RPINR18bits.U1RXR = 3;	// Make Pin RP9 U1RX
	RPOR8bits.RP16R = 3;		// Make Pin RP8 U1TX

	RPINR19bits.U2RXR =2;	// 0b Make Pin RP9 U1RX
	RPOR0bits.RP1R = 5;
	
	RPOR2bits.RP4R = 18;

	U2BRG = BRGVAL ;      /*  BAUD Rate Setting of Uart2  */


	U2MODE = 0x8000; /* Reset UART to 8-n-1, alt pins, and enable */
	U2STA  = 0x0400; /* Reset status register and enable TX */
	led_2=1;

	while(1)
	{
		char Command;

		GetChar(&Command);

		switch(Command)
		{
			case COMMAND_READ_PM:				/*tested*/
			{
				uReg32 SourceAddr;

				GetChar(&(SourceAddr.Val[0]));
				GetChar(&(SourceAddr.Val[1]));
				GetChar(&(SourceAddr.Val[2]));
				SourceAddr.Val[3]=0;

				ReadPM(Buffer, SourceAddr);

				WriteBuffer(Buffer, PM_ROW_SIZE*3);

				break;
			}

			case COMMAND_WRITE_PM:				/* tested */
			{
			    uReg32 SourceAddr;
				int    Size;

				GetChar(&(SourceAddr.Val[0]));
				GetChar(&(SourceAddr.Val[1]));
				GetChar(&(SourceAddr.Val[2]));
				SourceAddr.Val[3]=0;
				
				for(Size = 0; Size < PM_ROW_SIZE*3; Size++)
				{
				GetChar(&(Buffer[Size]));
				}

				Erase(SourceAddr.Word.HW,SourceAddr.Word.LW,PM_ROW_ERASE);
		
				WritePM(Buffer, SourceAddr);		/*program page */

				PutChar(COMMAND_ACK);				/*Send Acknowledgement */

 				break;
			}

			case COMMAND_READ_ID:
			{
				uReg32 SourceAddr;
				uReg32 Temp;
				SourceAddr.Val32 = 0xFF0000;

				Temp.Val32 = ReadLatch(SourceAddr.Word.HW, SourceAddr.Word.LW);

//				WriteBuffer(&(Temp.Val[0]), 4);
				PutChar(0x05);
				PutChar(0x04);
				PutChar(0x00);
				PutChar(0x00);

				SourceAddr.Val32 = 0xFF0002;

				Temp.Val32 = ReadLatch(SourceAddr.Word.HW, SourceAddr.Word.LW);

				WriteBuffer(&(Temp.Val[0]), 4);
				break;
			}
			
			case COMMAND_WRITE_CM:	
			{
				int    Size;

				for(Size = 0; Size < CM_ROW_SIZE*3;)
				{
					GetChar(&(Buffer[Size++]));
					GetChar(&(Buffer[Size++]));
					GetChar(&(Buffer[Size++]));
				
					PutChar(COMMAND_ACK);				/*Send Acknowledgement */
				}

				
				break;
			}
			case COMMAND_RESET:
			{
				uReg32 SourceAddr;
				int    Size;
				uReg32 Temp;
				
				for(Size = 0, SourceAddr.Val32 = 0xF80000; Size < CM_ROW_SIZE*3; 
																Size +=3, SourceAddr.Val32 += 2)
				{
					if(Buffer[Size] == 0)
					{
						Temp.Val[0]=Buffer[Size+1];
						Temp.Val[1]=Buffer[Size+2];

						WriteLatch( SourceAddr.Word.HW,
										SourceAddr.Word.LW,
										Temp.Word.HW,
										Temp.Word.LW);

						WriteMem(CONFIG_WORD_WRITE);
					}
				}
				ResetDevice();
				led_2=1;
				break;
			}
			case COMMAND_NACK:
			{
				ResetDevice();
				led_2=1;
				break;
			}
			default:PutChar(COMMAND_NACK);break;
		}
	}
}

/******************************************************************************/
void GetChar(char * ptrChar)
{
	while(1)
	{	
		/* if timer expired, signal to application to jump to user code */
		if(IFS0bits.T3IF == 1)
		{
			* ptrChar = COMMAND_NACK;
			break;
		}
		/* check for receive errors */
		if(U2STAbits.FERR == 1)
		{
			continue;
		}
			
		/* must clear the overrun error to keep uart receiving */
		if(U2STAbits.OERR == 1)
		{
			U2STAbits.OERR = 0;
			continue;
		}

		/* get the data */
		if(U2STAbits.URXDA == 1)
		{
			T2CONbits.TON=0; /* Disable timer countdown */
			* ptrChar = U2RXREG;
			break;
		}
	}
}


/******************************************************************************/
void ReadPM(char * ptrData, uReg32 SourceAddr)
{
	int    Size;
	uReg32 Temp;

	for(Size = 0; Size < PM_ROW_SIZE; Size++)
	{
		Temp.Val32 = ReadLatch(SourceAddr.Word.HW, SourceAddr.Word.LW);

		ptrData[0] = Temp.Val[2];;
		ptrData[1] = Temp.Val[1];;
		ptrData[2] = Temp.Val[0];;

		ptrData = ptrData + 3;

		SourceAddr.Val32 = SourceAddr.Val32 + 2;
	}
}
/******************************************************************************/

void WriteBuffer(char * ptrData, int Size)
{
	int DataCount;
	
	for(DataCount = 0; DataCount < Size; DataCount++)
	{
		PutChar(ptrData[DataCount]);
	}
}
/******************************************************************************/
void PutChar(char Char)
{
	while(!U2STAbits.TRMT);
	
	U2TXREG = Char;
}
/******************************************************************************/
void WritePM(char * ptrData, uReg32 SourceAddr)
{
	int    Size,Size1;
	uReg32 Temp;
	uReg32 TempAddr;
	uReg32 TempData;

	for(Size = 0,Size1=0; Size < PM_ROW_SIZE; Size++)
	{
		
		Temp.Val[0]=ptrData[Size1+0];
		Temp.Val[1]=ptrData[Size1+1];
		Temp.Val[2]=ptrData[Size1+2];
		Temp.Val[3]=0;
		Size1+=3;

	   WriteLatch(SourceAddr.Word.HW, SourceAddr.Word.LW,Temp.Word.HW,Temp.Word.LW);

		/* Device ID errata workaround: Save data at any address that has LSB 0x18 */
		if((SourceAddr.Val32 & 0x0000001F) == 0x18)
		{
			TempAddr.Val32 = SourceAddr.Val32;
			TempData.Val32 = Temp.Val32;
		}

		if((Size !=0) && (((Size + 1) % 64) == 0))
		{
			/* Device ID errata workaround: Reload data at address with LSB of 0x18 */
	      WriteLatch(TempAddr.Word.HW, TempAddr.Word.LW,TempData.Word.HW,TempData.Word.LW);

			WriteMem(PM_ROW_WRITE);
		}

		SourceAddr.Val32 = SourceAddr.Val32 + 2;
	}

   
}

/******************************************************************************/
gsm_storozh вне форума   Ответить с цитированием
Старый 15.08.2010, 11:39   #9
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 44
Сообщений: 4,101
Вес репутации: 1864/88
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от gsm_storozh Посмотреть сообщение
Программу не коректировал - полностью соответствует примеру микрочипа AN1094
http://www.microchip.com/stellent/id...pnote=en530200

Бут немножко поковырял (в общем добавил только настройки портов и уарт, все строки которые удалил из исходного проекта через "//" ). Часть проекта бута на ассемблере полностью соответствует по этому не выкладываю.

Код:
//#include "p24Hxxxx.h"
#include "p24fj64ga004.h"

#define COMMAND_NACK     0x00
#define COMMAND_ACK      0x01
#define COMMAND_READ_PM  0x02
#define COMMAND_WRITE_PM 0x03
#define COMMAND_WRITE_CM 0x07
#define COMMAND_RESET    0x08
#define COMMAND_READ_ID  0x09

#define PM_ROW_SIZE 64 * 8
#define CM_ROW_SIZE 8
#define CONFIG_WORD_SIZE 1

#define PM_ROW_ERASE 		0x4042
#define PM_ROW_WRITE 		0x4001
#define CONFIG_WORD_WRITE	0X4000

//#define FCY   40000000
//#define BAUDRATE        115200                   
//#define BRGVAL          ((FCY/BAUDRATE)/16)-1 

#define FCY   4000000
#define BAUDRATE        9600                   
#define BRGVAL          ((FCY/BAUDRATE)/16)-1 

/
когда же это кончится то...
IgorV вне форума   Ответить с цитированием
Старый 15.08.2010, 22:12   #10
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от IgorV Посмотреть сообщение
когда же это кончится то...
неясно что должно кончится?

Если Вы что то усмотрели в строках подсчета значения генератора скорости уарт - по части уарта все работает отлично, что подтверждается связью с ПО... сама же проблема описана в начале топика и в теме сообщения - "Не запускается прошивка записанная бутлоадером AN1094" - то есть она туда нормально записывается но почему то не запускается...
gsm_storozh вне форума   Ответить с цитированием
Старый 16.08.2010, 00:05   #11
vitalka
Super Moderator
 
Аватар для vitalka
 
Регистрация: 19.03.2007
Адрес: Львов
Возраст: 39
Сообщений: 3,334
Вес репутации: 2341/85
vitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond repute
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от gsm_storozh Посмотреть сообщение
неясно что должно кончится?
вот что имелось ввиду
vitalka вне форума   Ответить с цитированием
Старый 16.08.2010, 01:31   #12
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от vitalka Посмотреть сообщение
вот что имелось ввиду
Все претензии к микрочипу - так написано в его примере.

За ссылку спасибо... но все таки это далеко от сути вопроса ?
gsm_storozh вне форума   Ответить с цитированием
Старый 16.08.2010, 09:03   #13
Sash
Senior Member
 
Регистрация: 14.04.2007
Адрес: Не очень далеко от Питера (Новосибирск)
Возраст: 37
Сообщений: 915
Вес репутации: 1304/50
Sash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud ofSash has much to be proud of
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Код:
case COMMAND_WRITE_CM:	
			{
				int    Size;

				for(Size = 0; Size < CM_ROW_SIZE*3;)
				{
					// GetChar(&(Buffer[Size++]));
					// GetChar(&(Buffer[Size++]));
					// GetChar(&(Buffer[Size++]));
				
					PutChar(COMMAND_ACK);				
				}

				
				break;
			}
Попробуй так. И проследи что бы конфиг программы и бута был один и тот же.
Sash вне форума   Ответить с цитированием
Старый 16.08.2010, 19:21   #14
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от Sash Посмотреть сообщение
Попробуй так. И проследи что бы конфиг программы и бута был один и тот же.
Спасибо за помощь и подсказки... попробовал - не помогло... в любом случае у меня слово конфигурации тоже что в буте и основной программе...

Решил пойти другим путем - сделал простую программу - мигалку - и все заработало - бут пишет программа запускается сразу после окончания записи и/или после снятия питания через паузу бута...

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

теперь хоть ясно в какую сторону смотреть и где искать...
какие теперь мысли будут?
по поводу прерываний в исходном документе AN1094 ничего вроде не сказано - ПО бута не использует прерываний и записывает таблицу прерываний основного приложения (это видно при верификации) ??
gsm_storozh вне форума   Ответить с цитированием
Старый 16.08.2010, 22:04   #15
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Мое первое предположение о невыполнении команды ресет оказались верными:

_ResetDevice:

goto 0xc02

return

Вернее команда выполняется только по этому адресу находится не начало прикладной программы, а все что находится перед функцией main() ...
Так например если перед main() поставить любую другую подпрограмму или функцию обработки прерываний то бут входит в первую по списку подпрограмму (что подтверждается мигалкой). Очевидно компилятор ставит их по порядку - так как как они идут в Си файле и старт основной программы main() находиться далеко от адреса 0xc02.

Если же все подпрограммы записать после main() то все работает как обработчики прерываний так и другие функции.

Отсюда вопрос - как сказать компилятору что функцию main() нужно положить по адресу 0xc02 ??
gsm_storozh вне форума   Ответить с цитированием
Старый 16.08.2010, 22:29   #16
vitalka
Super Moderator
 
Аватар для vitalka
 
Регистрация: 19.03.2007
Адрес: Львов
Возраст: 39
Сообщений: 3,334
Вес репутации: 2341/85
vitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond repute
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от gsm_storozh Посмотреть сообщение
Отсюда вопрос - как сказать компилятору что функцию main() нужно положить по адресу 0xc02 ??
Код:
void __attribute__ ((address(0xc02))) main() {
vitalka вне форума   Ответить с цитированием
Старый 16.08.2010, 22:55   #17
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от vitalka Посмотреть сообщение
Код:
void __attribute__ ((address(0xc02))) main() {
Компилятор ругается
Код:
Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=24FJ64GA004 "LED_Switch.o" -o"LED_Switch.cof" -Wl,--script="..\..\Program Files\Microchip\MPLAB C30\support\PIC24F\gld\p24FJ64GA004_for_boatloader.gld",--defsym=__MPLAB_BUILD=1,--defsym=__MPLAB_DEBUG=1,-Map="LED_Switch.map",--report-mem
..\..\Program Files\Microchip\MPLAB C30\support\PIC24F\gld\p24FJ64GA004_for_boatloader.gld:1: address for section .text conflicts with absolute section _010c58504c6976c8
Link step failed.
Если задать адрес значительно ниже основного блока 0xc02 - то компиляция проходит и все работает... компилятор кладет main() ниже основного блока... но работает все только на простой программке мигалке где мало подпрограмм и мало текста. Если запускаю на основном приложении где много подпрограмм и текста - компилируется тоже нормально но после записи контроллер выдает _AddressError ?

И все таки желательно разместить main() именно на старте - поскольку она очень объемная и ее размер может меняться от версии к версии
gsm_storozh вне форума   Ответить с цитированием
Старый 17.08.2010, 07:15   #18
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 44
Сообщений: 4,101
Вес репутации: 1864/88
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от gsm_storozh Посмотреть сообщение
Компилятор ругается
Код:
Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=24FJ64GA004 "LED_Switch.o" -o"LED_Switch.cof" -Wl,--script="..\..\Program Files\Microchip\MPLAB C30\support\PIC24F\gld\p24FJ64GA004_for_boatloader.gld",--defsym=__MPLAB_BUILD=1,--defsym=__MPLAB_DEBUG=1,-Map="LED_Switch.map",--report-mem
..\..\Program Files\Microchip\MPLAB C30\support\PIC24F\gld\p24FJ64GA004_for_boatloader.gld:1: address for section .text conflicts with absolute section _010c58504c6976c8
Link step failed.
Если задать адрес значительно ниже основного блока 0xc02 - то компиляция проходит и все работает... компилятор кладет main() ниже основного блока... но работает все только на простой программке мигалке где мало подпрограмм и мало текста. Если запускаю на основном приложении где много подпрограмм и текста - компилируется тоже нормально но после записи контроллер выдает _AddressError ?

И все таки желательно разместить main() именно на старте - поскольку она очень объемная и ее размер может меняться от версии к версии
Разве перед main не должен быть запущен сначала startup? Почему сразу main то?
IgorV вне форума   Ответить с цитированием
Старый 17.08.2010, 15:46   #19
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Спасибо всем за участие!

Уже разобрался! Помог документ AN1157 http://www.microchip.com/stellent/id...pnote=en533906
там описана более сложная версия бута... Взял с этого примера кусок скрипта линкера и добавил блок *(.init) - теперь блок старта и начальной инициализации контроллера находится всегда по адресу 0хС02 - все работает как часы...

Код:
.text :
  {
         SHORT(0x10);
        *(.init);
        *(.handle);
        *(.libc) *(.libm) *(.libdsp);  /* keep together in this order */
        *(.lib*);
        *(.text);
  } >program
Отдельное спасибо микрочипу за недописанный документ AN1094 и потраченное время...
gsm_storozh вне форума   Ответить с цитированием
Старый 19.08.2010, 14:31   #20
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Возник еще один логичный вопрос как совместить прошивку бута и основной программы для первой прошивки МК? - только в HEX файлах ковыряться? или есть другие варианты? - может есть возможность как то на уровне компилятора объединить?

И еще одно если установить в слое конфигурации бута защиту чтения - то программатор не может прочитать содержимое МК... если же в конфиге записываемой бутом программы разрешить чтение - то при проверке внешним программатором после записи по сразу становиться видно содержимое пзу в МК, как основной программы так и самого бута...? Как такое может быть? Получается буту доступно изменение конфигурации (бита защиты памяти) а внешнему программатору нет (только полное стирание)?
gsm_storozh вне форума   Ответить с цитированием
Старый 19.08.2010, 15:10   #21
Рак
Senior Member
 
Регистрация: 03.04.2008
Адрес: Кременчуг
Возраст: 28
Сообщений: 837
Вес репутации: 812/41
Рак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to behold
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от gsm_storozh Посмотреть сообщение
Возник еще один логичный вопрос как совместить прошивку бута и основной программы для первой прошивки МК? - только в HEX файлах ковыряться? или есть другие варианты? - может есть возможность как то на уровне компилятора объединить?

И еще одно если установить в слое конфигурации бута защиту чтения - то программатор не может прочитать содержимое МК... если же в конфиге записываемой бутом программы разрешить чтение - то при проверке внешним программатором после записи по сразу становиться видно содержимое пзу в МК, как основной программы так и самого бута...? Как такое может быть? Получается буту доступно изменение конфигурации (бита защиты памяти) а внешнему программатору нет (только полное стирание)?
Зачем совмещать то? Залили лоадер, а дальше заливаете основную программу через USART, USB, CAN или что-то ещё.
Установите конфиг в лоадере такой же как и основной программе, потом уберие его из основной и лейте на здоровье.
Рак на форуме   Ответить с цитированием
Старый 19.08.2010, 15:56   #22
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от Рак Посмотреть сообщение
Зачем совмещать то? Залили лоадер, а дальше заливаете основную программу через USART, USB, CAN или что-то ещё.
Установите конфиг в лоадере такой же как и основной программе, потом уберие его из основной и лейте на здоровье.
Просто накладно как то по два раза шить одно устройство , а если их сотни...? + не все так просто обновленное по будет писаться с внешней памяти (АТ45), получается и ее еще нужно шить... Проще уже тогда поиграться с HEXами и на начальном этапе объединить их в один и шить все скопом в виде одной прошивки...

По конфигу - меня просто насторожило то что с бута можно снять защиту от чтения и вся прошивка как на ладони - наводит на некоторые мысли... тогда лучше вообще не обновлять слово конфигурации а то еще взломают...
gsm_storozh вне форума   Ответить с цитированием
Старый 19.08.2010, 16:15   #23
Рак
Senior Member
 
Регистрация: 03.04.2008
Адрес: Кременчуг
Возраст: 28
Сообщений: 837
Вес репутации: 812/41
Рак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to beholdРак is a splendid one to behold
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от gsm_storozh Посмотреть сообщение
Просто накладно как то по два раза шить одно устройство , а если их сотни...? + не все так просто обновленное по будет писаться с внешней памяти (АТ45), получается и ее еще нужно шить... Проще уже тогда поиграться с HEXами и на начальном этапе объединить их в один и шить все скопом в виде одной прошивки...

По конфигу - меня просто насторожило то что с бута можно снять защиту от чтения и вся прошивка как на ладони - наводит на некоторые мысли... тогда лучше вообще не обновлять слово конфигурации а то еще взломают...
У нас на предприятии получают собраные платы, садится человек и прошивает эти самые лоадеры, потом сдаёт их на склад, далее слесарь выполняют сборку оборудования и через лоадер загружают необходимую программу. Если вы хотите заливать всё сразу и все программы одинаковые, тогда смысл загрузчика теряется. Возьмите PICkit2, загрузите в него свою обновлённую программу, подключили питание через USB (зу Мотороллы или фотоаппарата), нажимаете на кнопку и программа сама обновится даже без компьютера.
Рак на форуме   Ответить с цитированием
Старый 19.08.2010, 17:05   #24
gsm_storozh
Senior Member
 
Регистрация: 05.06.2007
Возраст: 31
Сообщений: 138
Вес репутации: 100/30
gsm_storozh will become famous soon enoughgsm_storozh will become famous soon enough
По умолчанию Re: Не запускается прошивка записанная бутлоадером AN1094

Цитата:
Сообщение от Рак Посмотреть сообщение
У нас на предприятии получают собраные платы, садится человек и прошивает эти самые лоадеры, потом сдаёт их на склад, далее слесарь выполняют сборку оборудования и через лоадер загружают необходимую программу. Если вы хотите заливать всё сразу и все программы одинаковые, тогда смысл загрузчика теряется. Возьмите PICkit2, загрузите в него свою обновлённую программу, подключили питание через USB (зу Мотороллы или фотоаппарата), нажимаете на кнопку и программа сама обновится даже без компьютера.
...про такую возможность пик кита я знаю - пользовался

Задача немного другая... как правило партия устройств уходит с одинаковой стартовой версией прошивки... а потом уже обновляется по мере необходимости на стороне пользователя... да еще по радиоканалу через общий сервер

Последний раз редактировалось gsm_storozh; 19.08.2010 в 17:10.
gsm_storozh вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна ли МК ОС? syv Инструментарий 179 22.01.2009 11:59
Макимальная частота прерываний от TMR0 ANH Продукция MICROCHIP 114 05.04.2008 01:50
Почему не запускается внутренний генератор 4 МГц на PIC12F629? turmalin Продукция MICROCHIP 14 21.02.2008 21:33
Pic18f4520 не запускается кварц Алексей Острижний Продукция MICROCHIP 3 26.11.2007 21:18
Нужна прошивка на PIC16F877 для бегущей строки!!! VanoMC Продукция MICROCHIP 12 13.04.2007 12:06


Часовой пояс GMT +4, время: 15:28.


Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd. Перевод: zCarot