色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于SWD離線燒寫OTP

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2022-12-22 14:10 ? 次閱讀

嵌入式開發(fā)的最后階段是要將成果產(chǎn)品化,要交付工廠量產(chǎn)。對(duì)于NXP i.MXRT系列的芯片來說,除了要交付給工廠項(xiàng)目固件外,還需要工廠寫OTP區(qū)域來配置芯片啟動(dòng)方式或者開啟芯片的安全功能。離線編程器燒寫固件和OTP的方法有多種,如ISP,SWD或者Jtag等。

今天就為大家介紹下,如何讓離線編程器利用SWD接口燒寫OTP。

編寫OTP燒寫算法

直接操作寄存器來寫OTP的過程很繁瑣。很多編程器借助Flash燒寫算法來燒寫Flash,我們也可以借助燒寫Flash的方法來燒寫OTP。 本加油站曾經(jīng)有一篇《編寫Keil的自定義Flash燒寫算法FLM》,在這篇文章中,作者介紹了如何利用Keil來編寫Flash燒寫算法。 編寫OTP燒寫算法的方法和編寫Flash燒寫算法的方法一樣,只需要復(fù)用接口函數(shù)Init和UnInit,新增接口OTPWrite。和Flash相關(guān)的操作函數(shù)可以直接刪掉。OTP的燒寫算法接口聲明如下:

int Init (unsigned long adr, unsigned long clk, unsigned long fnc);

int UnInit (unsigned long fnc);

int OTPWrite (unsigned long idx, unsigned long value);
每個(gè)燒寫算法接口函數(shù)都是對(duì)應(yīng)OTP驅(qū)動(dòng)函數(shù)的封裝。下面是這3個(gè)接口函數(shù)的參考實(shí)現(xiàn):
int Init (unsigned long adr, unsigned long clk, unsigned long fnc) {
    BOARD_BootClockRUN();
#if (defined(FSL_FEATURE_OCOTP_HAS_TIMING_CTRL) && FSL_FEATURE_OCOTP_HAS_TIMING_CTRL)
    OCOTP_Init(OCOTP, CLOCK_GetFreq(kCLOCK_IpgClk));
#else
    OCOTP_Init(OCOTP, 0U);
#endif
    return (0);              
}

int OTPWrite (unsigned long idx, unsigned long value) {
    status_t status = kStatus_Success;
    status = OCOTP_WriteFuseShadowRegister(OCOTP, idx, value);
    return (kStatus_Success == status) ? (0) : (1);
}

int UnInit (unsigned long fnc) {
    OCOTP_Deinit(OCOTP);
    return (0);
}

以O(shè)COTP_開頭的函數(shù)是OTP driver接口。函數(shù)BOARD_BootClockRUN的具體實(shí)現(xiàn)請(qǐng)查看SDK內(nèi)OTP driver的示例。

提取算法代碼

Keil MDK生成的后綴為FLM的算法文件實(shí)質(zhì)上是一段與地址無關(guān)的代碼。對(duì)于下載器來說,一種簡(jiǎn)單的使用方法是把文件內(nèi)的相關(guān)函數(shù)指令提取出來。這里需要用到開源項(xiàng)目pyocd里的python腳本FlashAlgo。該項(xiàng)目github地址為:

https://github.com/pyocd/FlashAlgo

FlashAlgo默認(rèn)會(huì)從符號(hào)表里查找EraseSector等函數(shù)名。所以我們需要做一點(diǎn)改動(dòng),把flash相關(guān)操作的函數(shù)名換成OTP相關(guān)操作的函數(shù)名。

文件flash_algo.py中集合REQUIRED_SYMBOLS改動(dòng)如下:

    REQUIRED_SYMBOLS = set([
        "Init",
        "UnInit",
        "OTPWrite", # EraseSector
    ])

文件generate_blobs.py中列表TEMPLATES改動(dòng)如下:

TEMPLATES = [
    ("c_blob.tmpl", "c_blob.c"),
]

c_blob.tmpl在文件夾templates中,將program_target_t改名為program_ocotp_t,并將其中和flash相關(guān)的Erase、Program等項(xiàng)刪掉,新增OTPWrite,新增項(xiàng)如下:

static const program_ocotp_t ocotp = {

[...]

{{'0x%08x' % (algo.symbols['OTPWrite'] + header_size + entry)}}, // OTPWrite

[...]

}

在執(zhí)行腳本之前,先安裝python依賴的第三方庫,命令行如下:

pip install requirements.txt

執(zhí)行腳本的命令行如下:

python generate_blobs.py --blob_start 0x20000000otp_prog.FLM

這里的0x20000000是將要運(yùn)行算法的目標(biāo)RAM地址,讀者可以根據(jù)芯片RAM位置配置。otp_prog.FLM為上一小節(jié)Keil MDK編譯出來的FLM文件。c_blob.c是生成的包含燒寫算法及相關(guān)信息的文件。

燒寫OTP

要通過SWD燒寫OTP,就需要實(shí)現(xiàn)一個(gè)SWD時(shí)序協(xié)議。ARM公司的開源項(xiàng)目DAPLINK實(shí)現(xiàn)了支持arm cortex系列MCU的SWD時(shí)序協(xié)議。具體的實(shí)現(xiàn)在文件swd_host.c內(nèi)。

該項(xiàng)目地址是https://github.com/armmbed/daplink

這里我們使用swd_host.c中的接口來演示如何燒寫OTP。和OTP相關(guān)的操作接口函數(shù)主要有兩個(gè):

uint8_t swd_write_memory(uint32_t address, uint8_t *data, uint32_t size);

uint32_t swd_flash_syscall_exec(const program_syscall_t *sysCallParam, uint32_t entry, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4, flash_algo_return_t return_type);

調(diào)用OTP算法需要的主要參數(shù)在文件c_blob.c中的結(jié)構(gòu)體program_ocotp_t。我們仿照DAPLINK中program_target_t給出program_ocotp_t的聲明:

typedef struct {

    const uint32_t  init;

    const uint32_t  uninit;

    const uint32_t  OCOTPWrite;

    const program_syscall_t sys_call_s;

    const uint32_t  program_buffer;

    const uint32_t  algo_start;

    const uint32_t  algo_size;

    const uint32_t *algo_blob;

    const uint32_t  program_buffer_size;

} program_ocotp_t;

調(diào)用swd_write_memory來下載燒寫算法到目標(biāo)地址的示例代碼如下:

swd_write_memory(ocotp.algo_start, (uint8_t *)ocotp.algo_blob, ocotp.algo_size);

調(diào)用OTP模塊初始化函數(shù)的示例代碼如下:

swd_flash_syscall_exec(&ocotp.sys_call_s, ocotp.init, 0, 0, 0, 0, FLASHALGO_RETURN_BOOL) ;

調(diào)用OTP模塊寫fuse函數(shù)的示例代碼如下:

swd_flash_syscall_exec(&ocotp.sys_call_s, ocotp.OTPWrite, fuse_idx, fuse_value, 0, 0, FLASHALGO_RETURN_BOOL);

到此,利用SWD燒寫OTP就介紹完了。

如果讀者熟悉燒寫flash的流程,會(huì)發(fā)現(xiàn)燒寫OTP和燒寫flash沒有差別。

OTP的值可以放在編程器的配置文件中,和固件存儲(chǔ)在一起。要想保護(hù)OTP的值,可以將它們存儲(chǔ)在硬件安全模塊(HSM)中。筆者參與的基于RT1020的離線編程器采用了文章中描述的方法燒寫OTP。該項(xiàng)目預(yù)計(jì)明年初會(huì)以應(yīng)用筆記的方式發(fā)布在恩智浦官網(wǎng)。

限于篇幅,腳本中有些和flash相關(guān)的域我沒有刪掉,相信聰明的讀者可以自行完成。

審核編輯:湯梓紅出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NXP
    NXP
    +關(guān)注

    關(guān)注

    60

    文章

    1289

    瀏覽量

    185069
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1642

    瀏覽量

    148426
  • OTP
    OTP
    +關(guān)注

    關(guān)注

    4

    文章

    218

    瀏覽量

    47257
  • 燒寫
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    14331
  • SWD
    SWD
    +關(guān)注

    關(guān)注

    1

    文章

    57

    瀏覽量

    11875

原文標(biāo)題:基于SWD離線燒寫OTP

文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    KEIL+SWD+JLINK仿真不能

    剛接觸STM32F407, 在下載和在線調(diào)試階段碰到了問題,請(qǐng)求幫助,具體如下:1、第一次很順利,程序寫進(jìn)去,好像也可以進(jìn)行在線調(diào)試;2、第二次
    發(fā)表于 01-02 10:01

    swd方法

    1.JTAG的(開發(fā)板為例子)、2.swd方法
    發(fā)表于 08-05 07:07

    SWD離線

    SWD離線器本項(xiàng)目使用STM32F103RBT6作為主控,基于ST官方CMSIS-DAP項(xiàng)目進(jìn)行修改,實(shí)現(xiàn)可脫機(jī)、可去讀保護(hù)
    發(fā)表于 08-06 09:50

    怎樣去使用一種SWD離線器呢

    SWD離線器有哪些功能?怎樣去使用一種SWD離線
    發(fā)表于 11-10 06:07

    CH573量產(chǎn)是留串口呢還是SWC、SWD呢?

    準(zhǔn)備用573做一批東西,計(jì)劃畫板了,也買了官方離線器,脫機(jī)看說明,脫機(jī)
    發(fā)表于 09-05 07:02

    Jlink轉(zhuǎn)SWD頂針

    Jlink轉(zhuǎn)成SWD接口,底下是頂針接口,方便小批量程序
    發(fā)表于 06-03 16:57 ?0次下載

    NXP PMIC芯片步驟

      如果用戶打算查看芯片是否已經(jīng)programed,可以通過Blankcheck進(jìn)行空片檢查。需要特別提醒的是,因?yàn)?b class='flag-5'>OTP是只能一次的,所以建議先
    發(fā)表于 09-18 09:50 ?21次下載
    NXP PMIC芯片<b class='flag-5'>燒</b><b class='flag-5'>寫</b>步驟

    什么是單片機(jī)軟件?如何

    什么是單片機(jī)軟件? 什么是單片機(jī)軟件? 簡(jiǎn)單點(diǎn)說,就是把你寫好代碼(C或者是匯編)專程的機(jī)器語言通過一定的方式下載到單片機(jī)中。稱為
    發(fā)表于 04-14 11:04 ?3.5w次閱讀

    升壓型STC離線程序器設(shè)計(jì)方案

    本電路是借鑒stc官方離線器原理圖增加了升壓電路,輸出36v電壓 ,可為需要高壓供電的板子程序。其中單片機(jī)程序只需要在stc
    的頭像 發(fā)表于 01-12 11:41 ?2700次閱讀

    STM32 MCU 的軟件方法探討

    . 通過STlink來進(jìn)行軟件的。對(duì)于廣大的開發(fā) 者來說,用STlink來進(jìn)行是最簡(jiǎn)單和常用的方法。一般來說STLink 可以支持JATG模式和
    發(fā)表于 10-25 20:51 ?18次下載
    STM32 MCU 的軟件<b class='flag-5'>燒</b><b class='flag-5'>寫</b>方法探討

    ALTERA CPLD離線方案設(shè)計(jì)(MCU模擬JTAG)

    在含有CPLD芯片的電子產(chǎn)品中,由于代碼中的BUG需要升級(jí)固件,如果以前的固件內(nèi)沒有離線系統(tǒng),那么必須要通過專門的工具把固件下載到C
    發(fā)表于 11-05 16:21 ?15次下載
    ALTERA CPLD<b class='flag-5'>離線</b><b class='flag-5'>燒</b><b class='flag-5'>寫</b>方案設(shè)計(jì)(MCU模擬JTAG)

    PIC OTP 單片機(jī)程序方法

    作者最近需要對(duì)PIC品牌的8位OPT 單片機(jī)進(jìn)行程序;作者第一次使用這種OTP單片機(jī),按照慣性遇到的問題一一記錄一下;MCU最小系統(tǒng)與
    發(fā)表于 11-16 12:51 ?12次下載
    PIC <b class='flag-5'>OTP</b> 單片機(jī)程序<b class='flag-5'>燒</b><b class='flag-5'>寫</b>方法

    JTAG/SWD/ISP/SWIM詳解單片機(jī)的四種方式

    JTAG/SWD/ISP/SWIM詳解單片機(jī)的四種方式單片機(jī)是一種可編程控制器,搭好硬件電路后,可以利用程序?qū)崿F(xiàn)很多非常復(fù)雜的邏輯功能,與純硬件電路相比,簡(jiǎn)化了硬件外圍的設(shè)計(jì)、方便了邏輯
    發(fā)表于 12-03 18:36 ?20次下載
    JTAG/<b class='flag-5'>SWD</b>/ISP/SWIM詳解單片機(jī)的四種<b class='flag-5'>燒</b><b class='flag-5'>寫</b>方式

    STM32:程序方式

    ST-link下載器程序使用專門的編程器/調(diào)試器,具有下載功能和調(diào)試功能,還可以和IDE結(jié)合,實(shí)現(xiàn)一鍵下載和調(diào)試。這種接口是通過引腳直連ARM內(nèi)核的,擁有較高的權(quán)限。實(shí)物圖:引腳圖:1. SWD
    發(fā)表于 12-07 10:51 ?15次下載
    STM32:程序<b class='flag-5'>燒</b><b class='flag-5'>寫</b>方式

    如何使用串口來給GD32程序

    話說本人使用的是GD32F103VCT6(或GD32F103VET6),采用SWD的方式,確實(shí)一直用的好好的。但是,量產(chǎn)的多少,總會(huì)出現(xiàn)一些意想不到的情況,比如引出SWD
    的頭像 發(fā)表于 12-14 17:03 ?1.5w次閱讀
    主站蜘蛛池模板: 18禁国产精品久久久久久麻豆 | 国产69精品久久久熟女 | 羞羞答答的免费视频在线观看 | 欧美在线亚洲综合国产人 | 小小水蜜桃3视频在线观看 小向美奈子厨房magnet | 国产精品黄色大片 | 久久久久999 | 末成年美女黄网站色大片连接 | 亚洲 欧美 中文 日韩 视频 | 国产亚洲日韩另类在线播放 | 国产精品久AAAAA片 | 玖玖爱这里只有精品视频 | 国产精品久久久久久免费字体 | 久久综合色一综合色88 | 99久久免费国产精精品 | 姐姐不~不可以动漫在线观看 | 九九热在线视频精品店 | 91精品婷婷国产综合久久8 | 日本久久精品免视看国产成人 | 嫩草AV久久伊人妇女 | 精品视频久久久久 | 任你躁精品一区二区三区 | 国产亚洲精品久久综合阿香蕉 | 女人夜夜春 | 国产AV天堂亚洲AV麻豆 | 老师真棒无遮瑕版漫画免费 | 恋老视频 国产国佬 | 国产精品亚洲国产三区 | 欲乱艳荡少寡妇全文免费 | 国产午夜精品一区二区三区 | 入禽太深免费高清在线观看5 | 16女下面流水不遮图免费观看 | 免费人妻AV无码专区五月 | 18动漫在线观看 | 国产跪地吃黄金喝圣水合集 | 精品久久久久中文字幕 | 国产在线精品视亚洲不卡 | av老司机色爱区综合 | 甜性涩爱免费下载 | 香蕉动漫库| 一个人看的WWW高清电影 |