• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > ATMEGE32在bootloader區對Flash進行讀寫操作

    ATMEGE32在bootloader區對Flash進行讀寫操作

    作者: 時間:2016-11-27 來源:網絡 收藏
    注明:本程序采用官方的boot庫函數進行實驗,開發環境是 atmelstudio6( avrstudio6 )。
    官方提供了bootloader相關的寫入擦除函數。
    主函數如下:
    int main(void)
    {
    USARTInit(115200);
    for (int i=0;i<256;i++)
    {//此處數據均為00010203形式
    if ((i&3)==0)
    {
    databuff.databuff8[i]=0;
    }
    else if ((i&3)==1)
    {
    databuff.databuff8[i]=1;
    }
    else if ((i&3)==2)
    {
    databuff.databuff8[i]=2;
    }
    else if ((i&3)==3)
    {
    databuff.databuff8[i]=3;
    }
    }
    address = 0;
    boot_write_one_page();
    for (int i=0;i<256;i++)
    {//此處數據均為00ff00ff形式
    if (i&1)
    {
    databuff.databuff8[i]=0XFF;
    }
    else
    {
    databuff.databuff8[i]=0;
    }
    }
    address += 256;
    boot_write_one_page();
    address = 0;
    boot_check_flash();
    address += 256;
    boot_check_flash();
    while(1);
    }
    下面是寫入一頁的程序:
    void boot_write_one_page(void)
    {
    int i;
    DataUnionByte TempData;
    boot_page_erase(address);// 擦除一頁
    boot_spm_busy_wait();// 等待擦除完成
    for (i=0;i
    {
    TempData.databuff8[0]=databuff.databuff8[i];
    TempData.databuff8[1]=databuff.databuff8[i+1];
    boot_page_fill_safe(i,TempData.databuff16);
    }
    boot_page_write_safe(address);
    boot_rww_enable_safe();
    }
    unsigned int read_program_memory (unsigned int adr ,unsigned char cmd)
    {
    asm("movw r30, r24");//復制地址到z寄存器
    asm("SBRC r22, 0");
    asm("STS 0x37, r22");//r22->0x37(SPMCR)
    asm("LPM r24, Z+");
    asm("LPM r25, Z");//獲取返回數據
    asm("ret");
    }
    下面是對flash數據進行讀取并串口打印的函數
    void boot_check_flash(void)
    {
    DataUnionByte TempData;
    for (int i=0;i<128;i+=2)
    {
    TempData.databuff16 = read_program_memory(address+i,0x00);
    USARTTransmit(TempData.databuff8[0]);
    USARTTransmit(TempData.databuff8[1]);
    }
    }
    運行結果如下:



    評論


    技術專區

    關閉
    主站蜘蛛池模板: 东兴市| 赤城县| 吴江市| 介休市| 年辖:市辖区| 巩留县| 聊城市| 泽普县| 沁阳市| 阿尔山市| 甘肃省| 定远县| 东丽区| 吴旗县| 尚义县| 灵山县| 慈利县| 大同市| 师宗县| 交城县| 勃利县| 左贡县| 舞钢市| 贵德县| 苍山县| 通化县| 宁化县| 名山县| 沂水县| 衡东县| 襄城县| 钟祥市| 仙游县| 会理县| 德州市| 饶阳县| 汨罗市| 龙南县| 剑河县| 聂拉木县| 浮山县|