會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





PIC24FJ256GB110 USB bootloader 怎麼設定保護? 可以用內建RC震盪嗎?
初級會員
註冊日期:
2015/05/27 22:04
所屬群組:
註冊會員
文章: 21
等級: 3; EXP: 31
HP : 0 / 57
MP : 7 / 279
離線
google Microchip USB bootloader protect
找不到有效的資料,所以上來問看看。

device: PIC24FJ256GB110. (APP1632-3 on APP1632.)
compiler: XC16 v1.26
IDE v8.92
programmer: pickit3

問題一: PIC24FJ256GB110 使用USB host bootloader,
而且使用尾端flash(不包括config的flash)模擬EEPROM.
有可能設定保護,避免bootloader 和 app 被燒錄工具讀出程式嗎?
如果可以設定保護,那麼config1, config3 該如何設定?以便達到保護,
又可以使用flash模擬EEPROM。


問題二: 使用USB host bootloader,是否一定要使用石英振盪器(模仿APP1632電路的8MHz)?
如果可以用內建RC震盪達成USB更新(基於USB host bootloader),那麼config2應該怎樣設定?


備註:
下載 microchip_solutions_v2013-06-15 安裝後,有遺漏一個檔案
c:\microchip_solutions_v2013-06-15\Microchip\USB\USB PIC24.h(這一點我測過三台電腦,都是少掉同一個檔)
可以從 c:\microchip_solutions_v2013-06-15\USB\Precompiled Demos\Factory HEX Files for Microchip USB Demo Boards\PIC18F46J50 FS USB Demo Board Factory Hex 22 July 2009 Source.zip 解壓縮,找到 USB PIC24.h 複製到上列位置,也要修改linker script為PIC24FJ256GB110 Family\boot_msd_boot_p24FJ256GB110.gld 才能夠成功使用USB更新。
如果bootloader要做解密(PIC24如果無法保護,其實加密解密幾乎是做白工,因為若無法保護,直接read就可以copy了,不需要破解,我不知道PIC24使用USB host bootloader時,是否可以保護。),可以在BLMedia_LoadFile 函數BLMedia_LoadFile 裡面,讀出檔案時,呼叫自己加入的解密函數
類似
case RECORD_BYTE_COUNT_NIBBLE_1: //byte count byte 1
encodeChar = *p_file_data++;
byteCountASCII.v[1] = decode_read_char(encodeChar, record_state, byteEvenVsOdd);
if ( byteCountASCII.v[1]==0 )
{
BLIO_ReportBootStatus(LOADER_MISSING_START, "BL: Start code expected but not found.\r\n" );
FSfclose( fp );
return FALSE;
}
//byteCountASCII.v[1] = *p_file_data++;

2016/12/26 21:32
轉換PDF檔 列印


Re: PIC24FJ256GB110 USB bootloader 怎麼設定保護? 可以用內建RC震盪嗎?
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1483
等級: 32; EXP: 88
HP : 159 / 797
MP : 494 / 15294
離線
PIC24FJ256GB110這系列是可以設定程式碼保護的,
詳細的設定可以參考Datasheet
http://ww1.microchip.com/downloads/en/DeviceDoc/39897b.pdf
25.4 以及 Table 25-2

USB不論Host或Device都對於頻率的誤差要求很高,
所以強烈建議使用震盪晶體, 才能確保頻率的誤差.

Configuration Bit 的設定, 可以參考XC16所提供的文件,
裡面有詳細的說明
C:\Program Files (x86)\Microchip\xc16\vx.xx\docs\config_docs\

2016/12/27 10:04
轉換PDF檔 列印


Re: PIC24FJ256GB110 USB bootloader 怎麼設定保護? 可以用內建RC震盪嗎?
初級會員
註冊日期:
2015/05/27 22:04
所屬群組:
註冊會員
文章: 21
等級: 3; EXP: 31
HP : 0 / 57
MP : 7 / 279
離線
引用:

AdamSyu 寫道:

USB不論Host或Device都對於頻率的誤差要求很高,
所以強烈建議使用震盪晶體, 才能確保頻率的誤差.



謝謝。已經成功設定GCP=ON,其他保護的設定維持原有的值,就可以防讀。
也保有USB更新功能。
另外,查看規格書page129, 看來只好乖乖用石英震盪器了。(resonator誤差小可以用在USB的很貴,替代不了;-()
8.5.1 CONSIDERATIONS FOR USB OPERATION
When using the USB On-The-Go module in PIC24FJ256GB110 family devices, users must always observe these rules in configuring the system clock:
• For USB operation, the selected clock source
(EC, HS or XT) must meet the USB clock tolerance requirements.
• The Primary Oscillator/PLL modes are the only
oscillator configurations that permit USB operation
.
There is no provision to provide a separate
external clock source to the USB module.
• While the FRCPLL Oscillator mode is available in
these devices, it should never be used for USB
applications.
FRCPLL mode is still available when
the application is not using the USB module. However,
the user must always ensure that the FRC
source is configured to provide a frequency of
4 MHz or 8 MHz (RCDIV<2:0> = 001 or 000) and
that the USB PLL prescaler is configured
appropriately.
All other oscillator modes are available; however,
USB operation is not possible when these modes are selected
.

2016/12/27 19:10
轉換PDF檔 列印


Re: PIC24FJ256GB110 USB bootloader 怎麼設定保護? 可以用內建RC震盪嗎?
中級會員
註冊日期:
2013/12/06 08:12
所屬群組:
註冊會員
文章: 63
等級: 6; EXP: 82
HP : 0 / 145
MP : 21 / 1331
離線
A~亂回一下,當作Bookmark。

2016/12/28 09:56
轉換PDF檔 列印


Re: PIC24FJ256GB110 USB bootloader 怎麼設定保護? 可以用內建RC震盪嗎?
初級會員
註冊日期:
2015/05/27 22:04
所屬群組:
註冊會員
文章: 21
等級: 3; EXP: 31
HP : 0 / 57
MP : 7 / 279
離線
解碼的部分流程

case RECORD_BYTE_COUNT_NIBBLE_1: //byte count byte 1
#if (__USE_DECODE__)
    encodeChar = *p_file_data++;
    byteCountASCII.v[1] = decode_read_char(encodeChar, record_state, byteEvenVsOdd, rowNo);
    if ( byteCountASCII.v[1]==0 )
    {
        BLIO_ReportBootStatus(LOADER_MISSING_START, "BL: Start code expected but not found.\r\n" );
        FSfclose( fp );
        return FALSE;
    }
#else
    byteCountASCII.v[1] = *p_file_data++;
#endif //#if (__USE_DECODE__)

    //move to the next state of the byte count
    record_state = RECORD_BYTE_COUNT_NIBBLE_0;
    break;

case RECORD_BYTE_COUNT_NIBBLE_0: //byte count byte 2
#if (__USE_DECODE__)
    encodeChar = *p_file_data++;
    byteCountASCII.v[0] = decode_read_char(encodeChar, record_state, byteEvenVsOdd, rowNo);
    if ( byteCountASCII.v[0]==0 )
    {
        BLIO_ReportBootStatus(LOADER_MISSING_START, "BL: Start code expected but not found.\r\n" );
        FSfclose( fp );
        return FALSE;
    }
#else
    byteCountASCII.v[0] = *p_file_data++;
#endif //#if (__USE_DECODE__)
    current_record.RecordLength = AsciiToHexByte(byteCountASCII.v[1],byteCountASCII.v[0]);
    byteEvenVsOdd = 0;
    recordDataCounter = 0;

    //move to the first state of the address
    record_state = RECORD_ADDRESS_NIBBLE_3;
    break;

case RECORD_ADDRESS_NIBBLE_3: //address byte 1
#if (__USE_DECODE__)
    encodeChar = *p_file_data++;
    addressASCII.v[3] = decode_read_char(encodeChar, record_state, byteEvenVsOdd, rowNo);
    if ( addressASCII.v[3]==0 )
    {
        BLIO_ReportBootStatus(LOADER_MISSING_START, "BL: Start code expected but not found.\r\n" );
        FSfclose( fp );
        return FALSE;
    }
#else
    addressASCII.v[3] = *p_file_data++;
#endif //#if (__USE_DECODE__)

    //move to the next state of the address
    record_state = RECORD_ADDRESS_NIBBLE_2;
    break;

2016/12/28 23:04
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088221 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project