Проблема во Fla sh Программирование PIC24FJ128GC006 - PullRequest
1 голос
/ 28 мая 2020

Я делаю загрузчик USB для PIC24FJ. Сейчас я пишу в память fla sh шестнадцатеричный файл кода приложения через программное обеспечение и без использования ICD3. После загрузки шестнадцатеричного файла кода приложения я проверил программную память PI C, используя PI C Memory Views панели инструментов окна MPLAB, и вот как это выглядит. PIC24_BOOT_APP_VECTOR_AREA Как вы можете видеть на картинке, код операции не записывается непрерывно в каждый адрес. Он чередуется с 000000.

Также я сравнил коды операций загруженного кода приложения с использованием загрузчика с кодом приложения без использования загрузчика. Я обнаружил, что в кодах операций есть данные, которых нет только в приложении. Фотографии прилагаются. Application_Code_Alone_User_Area , PIC24_Boot_App_User_Area Это может создать проблему при переходе к приложению.

Ниже мой код для хранения данных в буфере и записи в память fla sh. (Я использую программирование одним словом для fla sh)

    #define WRITE_FLASH_BLOCK_SIZE          0x04
    #define USER_MEM_START_ADDRESS          0x004002

    unsigned long        rxBuff[60];
    int                  rxIndexer;
    int                  xfer;

    lineStart = rxBuff[ 0 ];                                 
    positionAddress = (rxBuff[ 2 ] << 8) + (rxBuff[ 3 ]);    // THIS IS THE ADDRESS WHERE THE DATA SHOULD BE ADDRESSED
    numberOfData = rxBuff[ 1 ];                              // THIS IS THE TOTAL NUMBER OF DATA RECEIVED IN THE STREAM
    recordType = rxBuff[ 4 ];                               

    rxIndexer = 5;          //Start of data index in a INTEL Hex file format
    for(xfer = 0; xfer < numberOfData; xfer += WRITE_FLASH_BLOCK_SIZE)              // THIS SECTION CONTAINS THE PROCESS OF COMBINING THE INFORMATION
    {                                                                               // FROM THE DATA STREAM TO THIS FORMAT - 0x00AA, 0xBBCC
           rxBuff[rxIndexer]  = ((rxBuff[START_OF_DATA_INDEX + xfer]) &0x00FF); 
           rxBuff[rxIndexer] |= ((rxBuff[START_OF_DATA_INDEX + xfer + 1] << 8)  &0xFF00);            //end of lower word
           rxIndexer++;
           rxBuff[rxIndexer]  = ((rxBuff[START_OF_DATA_INDEX + xfer + 2]) &0x00FF);                  //start of upper byte
           rxBuff[rxIndexer] |= ((0x00 << 8) & 0xFF00);                                              // phantom byte (0x00)
           rxIndexer++;
    }

    if(lineStart == ':')                                             
    {      
         if(recordType == 0x00  && data_checksum == 0)                    
         {                      
              for(xfer = 0; xfer < numberOfData; xfer += 2)
              {
                 FlashWrite_Word(programAddress + positionAddress, rxBuff[5 + xfer], rxBuff[5 + xfer + 1]); 
                 positionAddress += 2;
              }
         }
         else if(recordType == 0x04  && data_checksum == 0)
         {                
              programAddress = USER_MEM_START_ADDRESS;
         }                 
         else if( recordType == END_OF_FILE_RECORD)
         {                        
              jumpTo_App();
         } 
...