日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WINBOND/华邦 W25Qxxx调试笔记

發布時間:2024/3/26 编程问答 81 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WINBOND/华邦 W25Qxxx调试笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目場景:

項目中原來使用華邦W25Q128芯片,后因為flash容量續替換為W25Q256芯片。Bootloader使用自己分裝的對W25Q128驅動程序,APP程序使用armink提供SFUD框架。項目程序放在stm32片內flash中,片外norflash中存放OTA的固件和更新標志位。Bootloader上電讀取flash中更新標志位位和校驗數據都正常,APP讀取flash中工作參數也都正常。


問題描述

執行完固件升級后,軟重啟mcu依然使用內部flash舊固件,但是斷電重啟后可正常加載升級后的程序。


原因分析:

先仿真APP程序,讀取download區代碼,發現固件升級標志位和固件描述頭部信息crc都正確。再仿真Bootloader程序,發現無法讀取flash中數據發現都是0xFF,片外flash未寫入狀態。初步懷疑是bootloader驅動問題,但是偶然發現斷電重啟后可以正常讀取片外flash的數據,且crc正確。排除下載固件時未正確寫入片外flash。
之前代碼可以正常升級固件這次只是換了個固件導致代碼異常。之前有個項目用到eeprom從24C32換到24C64也出現問題(可查看這篇筆記:讀24cxx EEPROM),eeprom的問題是尋址從1字節變成2字節導致無法讀出數據。可查看華邦W25Q256的datasheet。
W25Q256支持兩種尋址模式3字節尋址和4字節尋址。


其區別在Address位數不同,功能碼也不同3字節讀數據是0x03,4字節則是0x13。寫flash也是存在兩種尋址方式。

還有兩條命令控制控制進入4字節尋址和退出4字節尋址。


那么外部flash讀取失敗的問題也明朗了,程序在APP中進入了4字節尋址,Bootloader中國使用的是3字節尋址。APP程序在完成固件升級后軟重啟MCU并不會復位W25Q256,導致flash還在4字節尋址模式中,Bootloader去讀取數據只能讀到0xFF。若斷電后flash復位后,沒進入4字節尋址boot便可以讀出數據,這也就是為什么斷電重啟后會正常更新程序,不斷電則沒更新程序。
項目之前使用了SFUD框架快速開發flash,但是我們對正常運作的代碼關注不夠細致才導致這個bug的存在。回過去看一下SFUD是怎么實現對W25Q128和W25Q256關于尋址方面的配置。
SFUD框架中對4字節設置API函數源碼:

/*** enable or disable 4-Byte addressing for flash** @note The 4-Byte addressing just supported for the flash capacity which is large then 16MB (256Mb).** @param flash flash device* @param enabled true: enable false: disable** @return result*/ static sfud_err set_4_byte_address_mode(sfud_flash *flash, bool enabled) {sfud_err result = SFUD_SUCCESS;uint8_t cmd;SFUD_ASSERT(flash);/* set the flash write enable */result = set_write_enabled(flash, true);if (result != SFUD_SUCCESS) {return result;}if (enabled) {cmd = SFUD_CMD_ENTER_4B_ADDRESS_MODE;} else {cmd = SFUD_CMD_EXIT_4B_ADDRESS_MODE;}result = flash->spi.wr(&flash->spi, &cmd, 1, NULL, 0);if (result == SFUD_SUCCESS) {flash->addr_in_4_byte = enabled ? true : false;SFUD_DEBUG("%s 4-Byte addressing mode success.", enabled ? "Enter" : "Exit");} else {SFUD_INFO("Error: %s 4-Byte addressing mode failed.", enabled ? "Enter" : "Exit");}return result; }

其函數調用是根據flash芯片大小判斷的:(源碼中注釋寫的16MB應該是注釋標注錯誤,256Mb是32MB)

/* if the flash is large than 32MB (256Mb) then enter in 4-Byte addressing mode */ if (flash->chip.capacity > (1L << 24)) {result = set_4_byte_address_mode(flash, true); } else {flash->addr_in_4_byte = false; }

解決方案:

其實出現這個問題往往是因為更換硬件芯片,只對現有代碼運行一下發現能用就沒有繼續思考下去。加上boot程序往往代代相傳,當初沒有考慮到不同芯片的兼容問題,也可能是為了壓縮程序空間故意沒做兼容。
可以有兩種解決方案:
方案1:對于已經出貨的機器可以修改APP程序,在OTA下載完固件后,軟重啟前退出4字節模式,這樣Bootloader可以正常讀取更新標志位。個人覺得若出現這種出貨的情況數據項目過程中風險評估不到位加上測試不到位。
方案2:修改boot程序,增加對機型判斷若是256Mb的芯片使用4字節模式尋址讀寫數據。

總結

以上是生活随笔為你收集整理的WINBOND/华邦 W25Qxxx调试笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久免费观看 | 中文久久久 | 欧美在线va| 国产在线视频一区 | 国产99免费视频 | www.色黄 | 美国三级a三级18 | 日本黄网站色大片免费观看 | 亚洲嫩草影院 | 国产suv精品一区二区6 | 日批免费看 | 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 亚洲精品lv| 波多野结衣影片 | 亚洲男人在线天堂 | 国产一区二区三区在线播放无 | 麻豆av在线播放 | 狠狠爱视频 | 日韩在线精品 | 黄色三级免费 | av体验区 | 黄视频网站免费看 | 在线播放色 | 樱井莉亚av | 日韩不卡一二区 | 天天性综合 | 美女在线不卡 | 国产精品久久久久野外 | 不卡av中文字幕 | 久久久久久久久久久久久国产 | 国产精品久久久久av | 777中文字幕 | 一卡二卡国产 | 国产精品一级黄色片 | 视频一区在线播放 | 天天夜夜骑 | 在线无码va中文字幕无码 | 欧美a v在线 | 98精品视频 | 亚洲国产乱| 涩涩在线观看 | 777精品久无码人妻蜜桃 | 西西人体www大胆高清 | 亚洲高清在线观看 | 成人午夜在线视频 | 六月天综合网 | 亚洲av永久纯肉无码精品动漫 | 久久精品2019中文字幕 | 国产第一网站 | 日韩国产欧美在线观看 | 可以在线观看的黄色 | 黄色综合网 | 国产中文字幕三区 | 日韩一级片在线 | 欧美午夜精品久久久久久浪潮 | 日韩欧美在线一区二区三区 | 视频在线观看一区二区三区 | 久久久久婷 | 福利午夜视频 | www.com色| 制服丝袜一区在线 | 欧美人与禽猛交乱配视频 | 久久午夜夜伦鲁鲁一区二区 | 日韩成人在线网站 | 久久国产人妻一区二区免色戒电影 | 国产xxxx在线观看 | 精品国产1区 | 国产精品成人99一区无码 | 床戏高潮做进去大尺度视频网站 | 8mav在线| 少妇人妻偷人精品无码视频 | 久久伊 | 特大巨交吊性xxxx | 国产无套免费网站69 | 久久免费资源 | 91亚洲国产成人久久精品麻豆 | 国产免费又爽又色又粗视频 | 久久久综合色 | 国产精品久久久久影院老司 | 中国色老太hd | 寡妇高潮一级视频免费看 | 黄色不雅视频 | 日本少妇xxxx软件 | 高清一区二区三区四区五区 | 日日夜夜免费 | 久久精品无码一区二区三区 | 精品国产av色一区二区深夜久久 | 欧美色图日韩 | 日韩在线黄色 | 四虎最新域名 | 欧美另类精品xxxx孕妇 | 亚洲高清在线一区 | 丝袜综合网 | 亚洲天堂成人在线 | 少妇天堂网 | 91免费播放 | 91大神小宝寻花在线观看 | 精品热久久 | 国产精品腿扒开做爽爽爽挤奶网站 |