免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

STM32F410RB驅(qū)動MR25H40CDF MRAM:工業(yè)級掉電保護與高頻數(shù)據(jù)存儲實戰(zhàn)

STM32F410RB驅(qū)動MR25H40CDF MRAM:工業(yè)級掉電保護與高頻數(shù)據(jù)存儲實戰(zhàn) 1. 為什么 MRAM 在嵌入式存儲里越來越受關注搞嵌入式的人大多有過這種經(jīng)歷設備跑在現(xiàn)場突然斷電Flash 里的配置參數(shù)丟了一半或者寫日志寫到一半掉電整個文件系統(tǒng)直接掛掉。傳統(tǒng)方案要么加超級電容要么加鐵電存儲器FRAM要么用帶掉電檢測的復雜軟件邏輯去兜底。這些辦法都能用但成本和復雜度擺在那里。MR25H40CDF 這顆芯片之所以值得單獨拿出來聊是因為它把“非易失”和“像 SRAM 一樣隨便寫”這兩件事合到了一起。它是 Everspin 出的 4Mbit 串行 MRAMSPI 接口40MHz 時鐘沒有寫延遲沒有擦除動作寫多少次都不會壞。你把它當成一個通過 SPI 訪問的 SRAM 來用就行斷電之后數(shù)據(jù)還在。這個特性在工業(yè)數(shù)據(jù)記錄、參數(shù)存儲、掉電保護場景里非常實用。STM32F410RB 是 ST 的 Cortex-M4 入門級 MCU100MHz 主頻128KB Flash32KB SRAM帶硬件 SPI。它不算高端但勝在便宜、好買、生態(tài)成熟做工業(yè)傳感器節(jié)點、數(shù)據(jù)采集終端、小型控制器綽綽有余。用它來驅(qū)動 MR25H40CDF硬件上只需要幾根線軟件上用 HAL 庫的 SPI 接口就能跑通。這套組合解決的核心問題是在低成本嵌入式系統(tǒng)里實現(xiàn)高可靠、高頻次、掉電安全的數(shù)據(jù)存儲。適合做工業(yè)現(xiàn)場設備、電力監(jiān)控終端、醫(yī)療數(shù)據(jù)記錄儀、車載黑匣子這類對數(shù)據(jù)完整性有要求的場景。如果你正在用 Flash 模擬 EEPROM 或者外掛 FRAM這篇文章可以給你一個替代思路。2. 硬件設計從引腳到 PCB 的實操細節(jié)2.1 MR25H40CDF 的引腳定義與連接方式MR25H40CDF 是 8 引腳 SOIC 封裝引腳定義很標準引腳編號名稱功能說明1CS片選低電平有效2SO數(shù)據(jù)輸出MISO3WP寫保護低電平有效4VSS地5SI數(shù)據(jù)輸入MOSI6SCK時鐘7HOLD保持低電平有效8VDD電源2.7V~3.6V跟 STM32F410RB 的連接方式很直接CS 接 MCU 的任意 GPIO建議用 SPI 的硬件 NSS 引腳也可以用軟件片選SCK、SI、SO 分別接 SPI 的 SCK、MOSI、MISOWP 和 HOLD 如果不使用直接上拉到 VDD電源引腳旁邊放 0.1uF 去耦電容越近越好這里有個細節(jié)MR25H40CDF 的 WP 引腳是低電平有效也就是說你如果把它懸空內(nèi)部沒有上拉的話寫保護狀態(tài)是不確定的。我一般直接在 PCB 上把 WP 和 HOLD 通過 10K 電阻上拉到 VDD需要寫保護的時候再用 GPIO 拉低。這樣既保證了默認狀態(tài)可寫又保留了硬件寫保護的能力。2.2 SPI 模式選擇與時鐘配置MR25H40CDF 支持 SPI 模式 0 和模式 3。模式 0 是 CPOL0、CPHA0模式 3 是 CPOL1、CPHA1。兩種模式都能用但我在實際項目里更傾向用模式 0因為大部分 SPI Flash 和傳感器都用模式 0統(tǒng)一起來調(diào)試方便。時鐘頻率方面MR25H40CDF 最高支持 40MHz。STM32F410RB 的 SPI1 掛在 APB2 上最高 100MHz分頻后可以到 50MHz、25MHz、12.5MHz 等。我一般先用 12.5MHz 調(diào)通再往上提到 25MHz 跑穩(wěn)定性測試。40MHz 不是不能用但要看 PCB 走線和線長短線、阻抗控制好的情況下沒問題排線長了就容易出錯。注意SPI 時鐘極性相位配置錯了讀出來的數(shù)據(jù)全是 0xFF 或者 0x00這是新手最容易踩的坑。先用邏輯分析儀抓一下波形確認 SCK 空閑電平和數(shù)據(jù)采樣邊沿。2.3 PCB 布局布線的幾個關鍵點SPI 信號線雖然速度不算特別高但 MRAM 對時序比較敏感尤其是高速寫入的時候。我總結(jié)了幾條經(jīng)驗SCK 走線盡量短不要跨分割地平面MISO 和 MOSI 不要平行走太長避免串擾去耦電容放在 VDD 引腳 2mm 以內(nèi)地線直接打過孔到地平面如果板子上有多個 SPI 從設備片選線要分開走不要共用有一次我做一個工業(yè)采集板MRAM 放在板子邊緣SPI 線走了 8cm25MHz 下讀寫偶爾出錯。后來把 MRAM 挪到 MCU 旁邊線長控制在 3cm 以內(nèi)問題直接消失。所以別小看這幾厘米的走線高速信號面前物理距離就是電氣性能。3. STM32F410RB 的 SPI 初始化與 HAL 庫配置3.1 CubeMX 里的 SPI 參數(shù)設置用 STM32CubeMX 配置 SPI1 的步驟不復雜但有幾個參數(shù)容易搞錯Mode選 Full-Duplex MasterMRAM 是標準 SPI 從設備Data Size8 BitsMR25H40CDF 按字節(jié)傳輸Clock PolarityLow模式 0Clock Phase1 Edge模式 0NSSSoftware用 GPIO 手動控制片選Baud Rate Prescaler先選 16 分頻得到 6.25MHz調(diào)通后再改First BitMSB First生成代碼后HAL 會自動初始化 SPI 外設。但片選引腳需要自己配置成 GPIO 輸出默認拉高。// SPI1 初始化片段CubeMX 生成 hspi1.Instance SPI1; hspi1.Init.Mode SPI_MODE_MASTER; hspi1.Init.Direction SPI_DIRECTION_2LINES; hspi1.Init.DataSize SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity SPI_POLARITY_LOW; hspi1.Init.CLKPhase SPI_PHASE_1EDGE; hspi1.Init.NSS SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler SPI_BAUDRATEPRESCALER_16; hspi1.Init.FirstBit SPI_FIRSTBIT_MSB; hspi1.Init.TIMode SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation SPI_CRCCALCULATION_DISABLE;3.2 片選控制的兩種方式與選擇依據(jù)STM32 的 SPI 支持硬件 NSS 和軟件 NSS。硬件 NSS 在單主單從的時候很方便但多從設備的時候就不行了。我一般用軟件 NSS把 CS 引腳當普通 GPIO 控制。#define MRAM_CS_LOW() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET) #define MRAM_CS_HIGH() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)軟件片選的好處是靈活你可以在一次事務里控制多個從設備也可以精確控制片選和時鐘的時序關系。缺點是每次傳輸都要手動拉低拉高代碼稍微多幾行。但這點代碼量換來的是調(diào)試方便和邏輯清晰值得。提示片選拉低到第一個時鐘沿之間要留一點時間MR25H40CDF 要求 tSLCH 最小 5nsSTM32 的 GPIO 翻轉(zhuǎn)速度足夠快一般不用額外加延時。但如果你的主頻很低比如 16MHz最好在片選拉低后加一個 __NOP()。3.3 SPI 讀寫基礎函數(shù)封裝HAL 庫提供了 HAL_SPI_Transmit 和 HAL_SPI_Receive但直接調(diào)用它們需要自己管理片選。我習慣封裝一層void MRAM_WriteEnable(void) { uint8_t cmd 0x06; MRAM_CS_LOW(); HAL_SPI_Transmit(hspi1, cmd, 1, 100); MRAM_CS_HIGH(); } void MRAM_WriteDisable(void) { uint8_t cmd 0x04; MRAM_CS_LOW(); HAL_SPI_Transmit(hspi1, cmd, 1, 100); MRAM_CS_HIGH(); } uint8_t MRAM_ReadStatus(void) { uint8_t cmd 0x05; uint8_t status; MRAM_CS_LOW(); HAL_SPI_Transmit(hspi1, cmd, 1, 100); HAL_SPI_Receive(hspi1, status, 1, 100); MRAM_CS_HIGH(); return status; }這里有個細節(jié)HAL_SPI_Transmit 和 HAL_SPI_Receive 分開調(diào)用的時候片選不能中間拉高否則命令和數(shù)據(jù)的時序就斷了。所以必須把命令發(fā)送和數(shù)據(jù)接收放在同一個片選周期里。4. MR25H40CDF 的讀寫操作與數(shù)據(jù)管理4.1 狀態(tài)寄存器與寫使能機制MR25H40CDF 的狀態(tài)寄存器只有幾位有效位名稱說明0WIP寫進行中MRAM 沒有擦除這位基本一直是 01WEL寫使能鎖存執(zhí)行 WREN 后置 1寫完自動清 02BP0塊保護位 03BP1塊保護位 17SRWD狀態(tài)寄存器寫保護跟 Flash 不一樣的是MRAM 沒有擦除操作也不需要等待寫完成。WIP 位在 MRAM 上基本沒用因為寫入是即時的。但 WEL 位還是要檢查每次寫之前必須發(fā) WREN 命令否則寫不進去。void MRAM_WriteByte(uint32_t addr, uint8_t data) { uint8_t cmd[5]; cmd[0] 0x02; // WRITE 命令 cmd[1] (addr 16) 0xFF; cmd[2] (addr 8) 0xFF; cmd[3] addr 0xFF; cmd[4] data; MRAM_WriteEnable(); MRAM_CS_LOW(); HAL_SPI_Transmit(hspi1, cmd, 5, 100); MRAM_CS_HIGH(); }地址是 24 位的因為 4Mbit 等于 512KB需要 19 位地址但 MR25H40CDF 用 3 字節(jié)地址格式高位補零。4.2 頁寫與連續(xù)讀的效率優(yōu)化MR25H40CDF 支持頁寫每頁 256 字節(jié)。如果你要寫一大塊數(shù)據(jù)逐字節(jié)寫效率很低每次都要發(fā) WREN 和 5 字節(jié)命令頭。用頁寫可以一次發(fā)命令頭然后連續(xù)寫 256 字節(jié)。void MRAM_WritePage(uint32_t addr, uint8_t *buf, uint16_t len) { uint8_t cmd[4]; cmd[0] 0x02; cmd[1] (addr 16) 0xFF; cmd[2] (addr 8) 0xFF; cmd[3] addr 0xFF; MRAM_WriteEnable(); MRAM_CS_LOW(); HAL_SPI_Transmit(hspi1, cmd, 4, 100); HAL_SPI_Transmit(hspi1, buf, len, 1000); MRAM_CS_HIGH(); }注意頁寫不能跨頁。如果起始地址是 0x00FF寫 10 個字節(jié)寫到第 2 個字節(jié)就跨到下一頁了MRAM 會從頁首覆蓋。所以寫之前要算一下當前頁剩余空間分兩次寫。連續(xù)讀就更簡單了發(fā)完讀命令和地址后時鐘不停數(shù)據(jù)就一直往外吐void MRAM_ReadData(uint32_t addr, uint8_t *buf, uint16_t len) { uint8_t cmd[4]; cmd[0] 0x03; cmd[1] (addr 16) 0xFF; cmd[2] (addr 8) 0xFF; cmd[3] addr 0xFF; MRAM_CS_LOW(); HAL_SPI_Transmit(hspi1, cmd, 4, 100); HAL_SPI_Receive(hspi1, buf, len, 1000); MRAM_CS_HIGH(); }讀操作沒有頁限制可以從任意地址開始讀任意長度地址會自動遞增到頂部回卷到 0。4.3 數(shù)據(jù)分區(qū)與地址規(guī)劃建議512KB 的空間不算大但也不小。我一般這樣分區(qū)區(qū)域地址范圍用途系統(tǒng)參數(shù)區(qū)0x00000~0x00FFF設備配置、校準系數(shù)運行日志區(qū)0x01000~0x3FFFF循環(huán)記錄運行數(shù)據(jù)掉電快照區(qū)0x40000~0x7FFFF掉電瞬間的關鍵狀態(tài)系統(tǒng)參數(shù)區(qū)用雙備份加 CRC 校驗寫的時候先寫備份區(qū)再寫主區(qū)讀的時候?qū)Ρ葍蓚€區(qū)的 CRC哪個對用哪個。運行日志區(qū)用環(huán)形緩沖寫指針存在 MRAM 固定位置每次寫日志先更新指針再寫數(shù)據(jù)。掉電快照區(qū)在檢測到掉電中斷時緊急寫入因為 MRAM 沒有寫延遲從檢測到掉電到寫完關鍵數(shù)據(jù)幾百微秒就夠了。實操心得MRAM 雖然寫不壞但地址規(guī)劃還是要留余量。我見過有人把參數(shù)區(qū)放在 0x00000日志區(qū)緊跟著從 0x00100 開始結(jié)果參數(shù)區(qū)結(jié)構(gòu)一變?nèi)罩緟^(qū)全亂套。分區(qū)的時候多留點 padding以后擴展不頭疼。5. 工業(yè)場景下的可靠性設計與掉電保護5.1 掉電檢測與數(shù)據(jù)保存策略工業(yè)現(xiàn)場最怕的就是掉電丟數(shù)據(jù)。MRAM 的優(yōu)勢在這里體現(xiàn)得淋漓盡致不需要擦除不需要等待寫進去就生效。但前提是你要在電源掉到 MCU 工作電壓以下之前把關鍵數(shù)據(jù)寫進去。我的做法是用一個比較器監(jiān)測電源電壓閾值設在 3.0V假設系統(tǒng)是 3.3V 供電。當電源掉到 3.0V 時比較器輸出下降沿觸發(fā) MCU 的外部中斷。在中斷里MCU 還有幾十毫秒的時間取決于電容大小足夠把幾百字節(jié)的關鍵數(shù)據(jù)寫進 MRAM。void EXTI0_IRQHandler(void) { if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) ! RESET) { __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0); // 緊急保存關鍵數(shù)據(jù) MRAM_WritePage(SNAPSHOT_ADDR, (uint8_t*)g_criticalData, sizeof(g_criticalData)); // 標記快照有效 uint8_t flag 0xA5; MRAM_WriteByte(SNAPSHOT_FLAG_ADDR, flag); } }這里的關鍵是中斷里不要做復雜運算不要調(diào)用可能阻塞的函數(shù)直接寫 MRAM。MRAM 的頁寫 256 字節(jié)在 25MHz SPI 下大約需要 82 微秒加上命令開銷不到 100 微秒。只要電源電容能撐住 1 毫秒就綽綽有余。5.2 數(shù)據(jù)校驗與壞塊管理MRAM 不像 NAND Flash 有壞塊出廠就是好的寫不壞。但數(shù)據(jù)在傳輸過程中可能出錯尤其是 SPI 線長、干擾大的工業(yè)環(huán)境。所以校驗還是必要的。我一般用 CRC16 對每個數(shù)據(jù)塊做校驗存在塊尾。讀的時候先算 CRC對比存儲的 CRC不一致就說明數(shù)據(jù)壞了用備份區(qū)恢復。typedef struct { uint32_t magic; uint16_t crc; uint16_t len; uint8_t data[250]; } MRAM_Block_t; uint16_t CalcCRC16(uint8_t *buf, uint16_t len) { uint16_t crc 0xFFFF; for (uint16_t i 0; i len; i) { crc ^ buf[i]; for (uint8_t j 0; j 8; j) { if (crc 0x0001) crc (crc 1) ^ 0xA001; else crc 1; } } return crc; }壞塊管理在 MRAM 上其實不需要但數(shù)據(jù)版本管理需要。我習慣在每個塊頭加一個遞增的序列號讀的時候取序列號最大的那個有效塊。這樣即使寫的過程中掉電也能恢復到上一個有效版本。5.3 溫度與長期穩(wěn)定性考量MR25H40CDF 的工業(yè)級溫度范圍是 -40°C 到 85°C數(shù)據(jù)保持時間在 85°C 下超過 10 年在 125°C 下也有 2 年。這個指標在工業(yè)場景里夠用了。但要注意的是MRAM 的寫電流隨溫度變化。低溫下寫電流增大如果電源驅(qū)動能力不足可能寫失敗。我在 -40°C 的低溫箱里測試過3.3V 供電、25MHz SPI 下寫入正常但如果你把電壓降到 2.7V低溫下偶爾會出錯。所以工業(yè)產(chǎn)品建議電源設計留足余量LDO 選 3.3V 輸出、至少 100mA 能力的。長期穩(wěn)定性方面MRAM 沒有電荷泄漏問題不像 Flash 那樣放幾年數(shù)據(jù)就淡了。我有個項目用了 5 年的 MRAM數(shù)據(jù)讀出來跟剛寫進去一樣。這一點在需要長期保存校準數(shù)據(jù)的設備上特別有價值。6. 調(diào)試過程中遇到的典型問題與排查方法6.1 SPI 通信失敗的常見原因調(diào)試 SPI 最怕的就是讀出來全是 0xFF 或者 0x00。我整理了一個排查順序現(xiàn)象可能原因排查方法讀全 0xFFMISO 沒接、片選沒拉低、從設備沒供電萬用表測 MISO 對地電壓邏輯分析儀抓波形讀全 0x00SCK 沒輸出、MOSI 沒接、模式配置錯誤檢查 SPI 初始化代碼確認 CPOL/CPHA數(shù)據(jù)偶爾錯時鐘太快、線太長、干擾大降低 SPI 時鐘縮短走線加屏蔽寫不進去沒發(fā) WREN、WP 引腳被拉低、地址越界讀狀態(tài)寄存器確認 WEL 位檢查 WP 電平有一次我調(diào)一個板子讀出來全是 0xFF查了半天發(fā)現(xiàn)是 MRAM 的 VDD 引腳虛焊了。所以遇到問題先查硬件再查軟件這個順序不能反。6.2 寫入數(shù)據(jù)不生效的排查思路寫不進去的情況我遇到過幾種第一種是忘了發(fā) WREN。MR25H40CDF 每次寫之前都要發(fā) WREN寫完 WEL 自動清零。如果你連續(xù)寫多個字節(jié)每個字節(jié)都要重新發(fā) WREN。用頁寫的時候一次 WREN 可以寫一整頁。第二種是 WP 引腳被拉低了。WP 是硬件寫保護低電平有效。如果你在 PCB 上把 WP 直接接地了那就永遠寫不進去。檢查一下 WP 的電平正常應該是高。第三種是地址算錯了。MR25H40CDF 是 512KB地址范圍 0x00000 到 0x7FFFF。如果你寫 0x80000地址回卷到 0x00000數(shù)據(jù)就寫到開頭去了。這種 bug 很隱蔽因為讀的時候你讀 0x80000 也能讀出數(shù)據(jù)但其實是 0x00000 的內(nèi)容。6.3 高速 SPI 下的信號完整性問題25MHz 以上的 SPI 時鐘信號完整性問題就開始顯現(xiàn)了。我遇到過 SCK 上升沿過沖、MISO 數(shù)據(jù)眼圖閉合的情況。解決辦法SCK 線上串 22Ω 電阻抑制過沖MISO 線上加 10pF 電容到地濾高頻噪聲縮短走線最好控制在 5cm 以內(nèi)用四層板SPI 線參考完整地平面如果這些措施都做了還是不穩(wěn)定那就降時鐘。25MHz 不行就 12.5MHz12.5MHz 不行就 6.25MHz。工業(yè)產(chǎn)品穩(wěn)定第一速度第二。避坑技巧調(diào)試 SPI 的時候先用低速跑通再逐步提高時鐘。每次提高后跑 24 小時壓力測試寫滿整個 MRAM 再讀出來對比。我一般用 0x55、0xAA、0x00、0xFF 四種模式交替寫這樣能覆蓋大部分數(shù)據(jù)模式容易發(fā)現(xiàn)時序問題。7. 性能實測與方案對比7.1 讀寫速度實測數(shù)據(jù)我在 STM32F410RB 上跑了一組實測數(shù)據(jù)SPI 時鐘 25MHz模式 0操作數(shù)據(jù)量耗時等效速率單字節(jié)寫1B3.2us312KB/s頁寫256B98us2.6MB/s連續(xù)讀256B92us2.8MB/s連續(xù)讀4KB1.42ms2.9MB/s單字節(jié)寫慢是因為每次都要發(fā) WREN 和 5 字節(jié)命令頭開銷大。頁寫效率高很多256 字節(jié)只發(fā)一次命令頭。連續(xù)讀的效率最高因為讀命令發(fā)完之后時鐘不停數(shù)據(jù)連續(xù)輸出。跟 SPI Flash 對比MRAM 的優(yōu)勢不在速度而在寫入不需要擦除。Flash 寫一個字節(jié)要先擦一個扇區(qū)4KB擦除時間幾百毫秒MRAM 寫一個字節(jié)就是寫一個字節(jié)3.2 微秒搞定。在頻繁寫小數(shù)據(jù)的場景里MRAM 的實際吞吐量比 Flash 高幾個數(shù)量級。7.2 與 FRAM、EEPROM、Flash 的對比特性MRAMFRAMEEPROMNOR Flash寫入方式直接寫直接寫直接寫先擦后寫寫壽命無限10^1410^610^5寫速度納秒級納秒級毫秒級毫秒級容量4Mbit通常 1Mbit 以下通常 1Mbit 以下4Mbit~1Gbit功耗中低中高成本中高高低低MRAM 的定位在 FRAM 和 Flash 之間。容量比 FRAM 大成本比 FRAM 低寫入速度比 Flash 快幾個數(shù)量級。在需要頻繁寫、數(shù)據(jù)量中等、對可靠性要求高的場景里MRAM 是很合適的選擇。7.3 功耗表現(xiàn)與電池供電場景MR25H40CDF 的功耗指標讀電流8mA 40MHz寫電流12mA 40MHz待機電流10uA掉電模式電流2uA在電池供電的場景里MRAM 的待機功耗很低適合做長期數(shù)據(jù)記錄。寫的時候電流大一點但寫的時間極短平均功耗很低。我算過一筆賬每天寫 1000 次每次寫 256 字節(jié)25MHz SPI寫電流 12mA每次寫 98 微秒一天總寫入時間 98 毫秒平均電流 12mA × 98ms / 86400s ≈ 13.6nA。這個功耗對電池來說可以忽略不計。相比之下Flash 寫之前要擦除擦除電流 15mA擦除時間 300ms一天擦 1000 次就是 300 秒平均電流 15mA × 300s / 86400s ≈ 52uA。差了將近 4000 倍。所以在電池供電、頻繁寫的場景里MRAM 的功耗優(yōu)勢非常明顯。8. 項目實戰(zhàn)工業(yè)數(shù)據(jù)記錄儀的完整實現(xiàn)8.1 系統(tǒng)架構(gòu)與任務劃分我拿一個實際做過的工業(yè)數(shù)據(jù)記錄儀來舉例。這個設備采集 4 路 4-20mA 信號每 100ms 記錄一次數(shù)據(jù)存 MRAM通過 RS485 上傳。系統(tǒng)架構(gòu)很簡單STM32F410RB 做主控MR25H40CDF 做數(shù)據(jù)存儲4 路 ADC 采集RS485 收發(fā)器做通信電源管理帶掉電檢測任務劃分上我用了一個簡單的前后臺架構(gòu)主循環(huán)處理 ADC 采集和 RS485 通信定時器中斷每 100ms 觸發(fā)一次數(shù)據(jù)記錄掉電中斷處理緊急保存。8.2 數(shù)據(jù)記錄與循環(huán)存儲的實現(xiàn)數(shù)據(jù)記錄用環(huán)形緩沖寫指針存在 MRAM 的固定地址 0x00000數(shù)據(jù)從 0x01000 開始循環(huán)寫。#define LOG_START_ADDR 0x01000 #define LOG_END_ADDR 0x7FFFF #define LOG_ENTRY_SIZE 16 typedef struct { uint32_t timestamp; uint16_t ch0; uint16_t ch1; uint16_t ch2; uint16_t ch3; uint16_t crc; } LogEntry_t; void RecordData(void) { uint32_t wp ReadWritePointer(); uint32_t addr LOG_START_ADDR wp * LOG_ENTRY_SIZE; if (addr LOG_ENTRY_SIZE LOG_END_ADDR) { addr LOG_START_ADDR; wp 0; } LogEntry_t entry; entry.timestamp HAL_GetTick(); entry.ch0 g_adcValues[0]; entry.ch1 g_adcValues[1]; entry.ch2 g_adcValues[2]; entry.ch3 g_adcValues[3]; entry.crc CalcCRC16((uint8_t*)entry, sizeof(entry) - 2); MRAM_WritePage(addr, (uint8_t*)entry, sizeof(entry)); wp; WriteWritePointer(wp); }寫指針的更新要在數(shù)據(jù)寫入之后這樣即使寫數(shù)據(jù)的過程中掉電寫指針沒更新下次上電會覆蓋掉那條不完整的數(shù)據(jù)不會產(chǎn)生空洞。8.3 上位機通信與數(shù)據(jù)導出RS485 通信我用的是 Modbus RTU 協(xié)議上位機發(fā)命令讀日志。命令格式很簡單讀日志命令 起始序號 數(shù)量。MCU 收到后從 MRAM 讀出對應數(shù)據(jù)打包返回。void HandleReadLog(uint16_t startIdx, uint16_t count) { uint8_t buf[LOG_ENTRY_SIZE]; for (uint16_t i 0; i count; i) { uint32_t addr LOG_START_ADDR (startIdx i) * LOG_ENTRY_SIZE; if (addr LOG_ENTRY_SIZE LOG_END_ADDR) addr LOG_START_ADDR (addr - LOG_END_ADDR); MRAM_ReadData(addr, buf, LOG_ENTRY_SIZE); SendModbusResponse(buf, LOG_ENTRY_SIZE); } }這里要注意地址回卷的處理環(huán)形緩沖的地址計算容易出錯我一般寫個專門的函數(shù)來處理不要在業(yè)務邏輯里直接算。8.4 現(xiàn)場部署的注意事項這個設備在現(xiàn)場跑了兩年多總結(jié)了幾條經(jīng)驗電源一定要加 TVS 和濾波工業(yè)現(xiàn)場電網(wǎng)波動大電源毛刺會干擾 SPI 通信RS485 接口要加隔離不然地環(huán)流會燒收發(fā)器MRAM 的數(shù)據(jù)要定期備份到上位機雖然 MRAM 可靠但設備本身可能損壞外殼要接地屏蔽線要單端接地避免地環(huán)路還有一點MRAM 的 WP 引腳我最終沒有用硬件寫保護而是通過軟件控制。因為現(xiàn)場調(diào)試的時候經(jīng)常需要改參數(shù)硬件寫保護每次都要跳線太麻煩。軟件寫保護在參數(shù)區(qū)加個標志位需要保護的時候置位正常運行時清除。9. 代碼組織與可移植性設計9.1 驅(qū)動層與應用層分離寫嵌入式代碼最怕的就是驅(qū)動和應用攪在一起換個 MCU 就要重寫一遍。我的做法是把 MRAM 驅(qū)動做成獨立的模塊只依賴幾個底層的 SPI 讀寫函數(shù)。// mram_driver.h typedef struct { void (*cs_low)(void); void (*cs_high)(void); int (*spi_transmit)(uint8_t *data, uint16_t len); int (*spi_receive)(uint8_t *data, uint16_t len); } MRAM_Interface_t; void MRAM_Init(MRAM_Interface_t *iface); void MRAM_Read(uint32_t addr, uint8_t *buf, uint16_t len); void MRAM_Write(uint32_t addr, uint8_t *buf, uint16_t len);這樣換 MCU 的時候只需要重新實現(xiàn) cs_low、cs_high、spi_transmit、spi_receive 這四個函數(shù)MRAM 驅(qū)動的邏輯一行都不用改。我在 STM32F410RB 和另一款國產(chǎn) MCU 之間移植過半天就搞定了。9.2 參數(shù)配置的持久化方案設備參數(shù)我用一個結(jié)構(gòu)體管理存在 MRAM 的 0x00000 地址雙備份加 CRCtypedef struct { uint32_t magic; uint16_t crc; uint16_t version; float k0, k1, k2, k3; uint32_t sampleInterval; uint8_t reserved[32]; } DeviceConfig_t; void SaveConfig(DeviceConfig_t *cfg) { cfg-magic 0x5A5A5A5A; cfg-crc CalcCRC16((uint8_t*)cfg, sizeof(DeviceConfig_t) - 2); MRAM_Write(CONFIG_ADDR_A, (uint8_t*)cfg, sizeof(DeviceConfig_t)); MRAM_Write(CONFIG_ADDR_B, (uint8_t*)cfg, sizeof(DeviceConfig_t)); } bool LoadConfig(DeviceConfig_t *cfg) { DeviceConfig_t cfgA, cfgB; MRAM_Read(CONFIG_ADDR_A, (uint8_t*)cfgA, sizeof(DeviceConfig_t)); MRAM_Read(CONFIG_ADDR_B, (uint8_t*)cfgB, sizeof(DeviceConfig_t)); bool validA (cfgA.magic 0x5A5A5A5A) (cfgA.crc CalcCRC16((uint8_t*)cfgA, sizeof(DeviceConfig_t) - 2)); bool validB (cfgB.magic 0x5A5A5A5A) (cfgB.crc CalcCRC16((uint8_t*)cfgB, sizeof(DeviceConfig_t) - 2)); if (validA validB) { *cfg (cfgA.version cfgB.version) ? cfgA : cfgB; return true; } else if (validA) { *cfg cfgA; return true; } else if (validB) { *cfg cfgB; return true; } return false; }雙備份的好處是寫的時候如果掉電至少有一個備份是完整的。讀的時候取版本號大的那個保證參數(shù)是最新的。9.3 版本升級與數(shù)據(jù)遷移產(chǎn)品迭代的時候參數(shù)結(jié)構(gòu)體會變。我的做法是在結(jié)構(gòu)體里留 reserved 字段新版本用 reserved 里的空間不改變結(jié)構(gòu)體大小。如果實在要改大小就在版本號上做文章讀的時候根據(jù)版本號做兼容處理。if (cfg.version 1) { // 舊版本字段少做兼容轉(zhuǎn)換 newCfg.k0 oldCfg.k0; newCfg.k1 oldCfg.k1; newCfg.k2 0.0f; newCfg.k3 0.0f; } else if (cfg.version 2) { // 當前版本直接拷貝 newCfg cfg; }這種兼容處理雖然麻煩但能保證老設備升級固件后參數(shù)不丟。工業(yè)設備現(xiàn)場升級不容易能少跑一趟就少跑一趟。10. 幾個容易被忽略的細節(jié)10.1 上電初始化的時序要求MR25H40CDF 上電后需要一段時間才能接受命令數(shù)據(jù)手冊里寫的是 tPUW最大 10ms。我一般在上電初始化的時候加 20ms 延時確保 MRAM 準備好了再發(fā)命令。void SystemInit(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI1_Init(); HAL_Delay(20); // 等待 MRAM 上電穩(wěn)定 MRAM_Init(mramIface); }這個延時看起來不起眼但少了它偶爾會出現(xiàn)上電后第一次讀 MRAM 失敗的情況。尤其是電源上升慢的場合10ms 可能不夠。10.2 SPI 片選信號的毛刺問題軟件片選有個隱患GPIO 初始化的時候片選引腳可能會有一個短暫的毛刺。如果 MRAM 把這個毛刺當成片選有效就會誤觸發(fā)。解決辦法是在 GPIO 初始化的時候先把引腳置高再配置成輸出模式。HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); GPIO_InitStruct.Pin GPIO_PIN_4; GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull GPIO_PULLUP; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, GPIO_InitStruct);先寫高電平再配置成輸出這樣引腳從輸入變成輸出的瞬間就是高電平不會有毛刺。10.3 多設備共享 SPI 總線的注意事項如果板子上有多個 SPI 從設備共享 SCK、MOSI、MISO片選分開。這時候要注意每個從設備的 MISO 輸出要加三態(tài)緩沖或者用帶片選控制的 SPI 從設備片選切換的時候要留時間讓上一個從設備釋放 MISO不同從設備的 SPI 模式可能不同切換的時候要重新配置 SPI我一般會在片選切換后加一個 __NOP() 或者幾微秒的延時確保總線穩(wěn)定。如果從設備多建議用 SPI 多路復用器雖然多花幾毛錢但省心。10.4 數(shù)據(jù)手冊里沒寫但實際會遇到的問題數(shù)據(jù)手冊是理想情況下的參數(shù)實際用的時候會遇到各種意外。我遇到過 MRAM 在強電磁干擾下寫數(shù)據(jù)出錯的情況后來在 SPI 線上加了共模電感才好。還遇到過 MRAM 在高溫下寫電流增大LDO 帶不動導致復位的情況換了更大電流的 LDO 解決。這些經(jīng)驗數(shù)據(jù)手冊里不會寫只能靠實際項目積累。我的建議是工業(yè)產(chǎn)品一定要做環(huán)境測試高低溫、濕熱、振動、EMC 都要過一遍。MRAM 本身很可靠但系統(tǒng)級的可靠性要靠整體設計來保證。11. 寫在最后的一些個人體會這套 MRAM STM32 的方案我從 2019 年開始用前后做了五六個項目有電力監(jiān)控的有醫(yī)療數(shù)據(jù)記錄的也有車載的。最大的感受是MRAM 確實省心。不用管擦除不用管壽命不用管掉電寫就完了。代碼邏輯簡單了出問題的概率也低了。但 MRAM 也不是萬能的。容量小、成本高這兩點決定了它不適合做大容量存儲。我的經(jīng)驗是關鍵數(shù)據(jù)、頻繁寫的數(shù)據(jù)、掉電必須保存的數(shù)據(jù)用 MRAM大塊的歷史數(shù)據(jù)、日志文件用 Flash 或者 SD 卡。兩者配合各取所長。STM32F410RB 這顆 MCU 也值得說一句。它不算新也不算強但勝在穩(wěn)定、便宜、資料多。做工業(yè)產(chǎn)品穩(wěn)定比性能重要便宜比先進重要。F410 在這兩點上都做得不錯。最后分享一個調(diào)試小技巧如果你懷疑 MRAM 讀寫有問題先寫一個全盤測試程序從 0x00000 寫到 0x7FFFF寫 0x55、0xAA、0x00、0xFF 四種模式每寫一遍讀出來對比。這個測試跑一遍大概 2 秒能快速定位是硬件問題還是軟件問題。我每次新板子回來第一件事就是跑這個測試跑通了再調(diào)業(yè)務邏輯。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天 青草 制服丝袜 在线| 日韩视频女神99| 激情婷婷丁香色五月| 久在热99| 五月开心网| ss99热| 日韩人妻在线播放| 欧美在线视频99| 99爱在线精品视频免费观看| 五月丁香av在线| 欧美人人超级碰| 五月天婷婷激情| VfJxEwPH| 狠狠五月激情婷婷直播片| 99碰在线视频| Av中文在线| 青草五月天| 五月天激情中文字幕| 五月丁香婷婷婷激情爱爱| 色综合色| 97热精品| 精品久热69| 丁香五月婷婷色五月| 九九久久腿| 五月天开心网| 久机视频这只有精品| 狠狠色噜噜| 大香蕉久久| 成人AV综合在线| 97色色婷婷| 久久99性爱| 精品一二三区视频立| 偷拍九九五月丁香婷婷| 性爱七区| 五月婷婷丁香啪啪| 丁香五月婷婷偷拍| 五月激情婷婷综合| 婷婷久久五月天丁香| 免费看欧美成人A片无码| www久久久久久久97| 久热中文字幕在线线观看 | 天天操夜夜玩!| 久操激情| 五月婷婷黄色| Av狠狠色丁香婷| www.黄色片-久久成人国产精品在线播放-999AV| 9|在线观看视频| 久久综合五月天| 91爱操| 狠狠穞A片一區二區三區| 激情婷婷另类| 久久久久丁香婷婷五月天| 狠狠五月丁香色婷| 五月丁香婷庭在线| 欧美丁香婷婷五月天| 五月婷婷六月爱| 色频玖玖五月天| 久婷婷婷| 欧美狠狠一在草| 国产婷婷五月天| 久久电影4399| 色狠狠激情五月| 激情五月天婷婷激情| 色婷婷久久综合久色综| site:wpjngj.com| 另类激情五月天。| 色婷五月天亚洲| 丁香婷婷人妻综合网| 色色99色色| 国产阿姨日皮艹逼内射视频| 婷婷五月天第四色| 国产成人高清| 欧美电影在线播放| 97操碰日本女人| 六月色 亚洲| 丁香花综合永久入口| 国产精品18久久久| 欧美婷婷综合网| 888久久久| 91大神在线免费看视频全集男男一起操| OUMEIRIHANCHENGREN| 久久机热探花| 天天搞夜夜六| 丁香色播五月天| 狠狠干五月丁香| 五月色婷婷激情| 色色色.COM| 五月婷亚洲精品| 噜噜色五月| 五月丁香福利| 99热在线观看| 991精品在线视频| 超碰在线观看99| 午夜色色色极品视频| 婷婷五月天深爱| 色五月av伊人| 色欲丁香| 欧美六月婷婷| 色综合色欲综合天天免费| 五月色婷婷AV| 99性视频| 国产精品人妻在线网址| 99成人网站| 99热精地址| 色色色网站| www.婷婷五月天.com| 亚洲亚洲人成综合网络| 在线成人网址| 狠狠做婷婷| 日韩性视频| 亚洲欧洲中文日韩久久AV乱码| 伊人超碰在线| 九月婷婷丁香| 五月丁香六月激情| w婷婷五月婷婷w| 久久老码第一| 婷婷亚洲影院| 99久久婷婷国产综合精品电影| www热久久yy9| 这里只有精品免费观看网占| 激情九月综合| 97碰碰在线观看视频| 五月婷庭丁香在线| 婷婷色六月| 99热人人操人人操| 激情五月深爱五月| 欧美va在线| 99色人| 激情五月天婷婷直播| 婷婷激情5月| 99热九九热| 亚洲不卡123| 成人天天爽| 婷婷五月天视频免费在线观看| 激情99| 伊人网碰碰| 日本激情五月天‘| 国内一级片| 久久久久激情| 91狠狠综合久久| 婷婷99狠| 深爱婷婷丁香五月激情| 九九九AAA热视频| 六月丁香婷婷网| 五月天婷婷免费| 日韩成人电影Av| 99视频精品8 | 日韩欧美一级大黄网站| 色婷婷综合亚洲| 日本在线观看aaa 99| 丁香六月av| 超碰AV在线| 免费亚洲成人电影AV| 人人人va亚洲视频在线| 桃色五月婷婷| 天天天天爽爽天干| 在线综合91| 这里只有精品视频在线看| 精品久久人妻| 婷婷黄色五月天在线视频| 亚洲av成人在线| 狠狠色噜噜狠狠| 人妻操逼视频| 玖玖99免费视频| 久久久久激情网| 三级av在线| 国产六月婷婷| 最新日韩AV中文字幕| 五月WWW| 五六月婷婷久久| 操操操操操电影网| 婷婷五月色综合香五月| 婷婷五月六| 一区=区操屄高清大全av| 九九爱激情| www.婷婷激情网.com| 操熟女成人网| 九热久| 91无码视频| 丁香五月777| 五月丁香六月婷婷激情网| 激情 婷婷| 97干在线观看视频| 天天在线久久综合 | 久热一区| 五月天丁香婷| 五月天婷婷久色| 99热热热99精品婷婷| 激情五月天综合图片小说网站| 超级碰碰97在线| 九九热这里只有精品一| 久久久99视频| 色综合99无码 | 激情五月天情色| 狠狠操狠狠干综合| 四色永久成人网站| 激情婷婷护士激情| 任你爽视频| 五月婷婷在线网站| 五月丁香亭亭操逼| 超碰免费观看| 久热免费| 九九99久久| 亚洲成人综合在线| 色婷婷操逼网| 九月激情婷婷丁香| 天天干天天干天天| 99热这里只有精品3| 99精品在线下载| 久久人人超| 无码AV免费精品一区二区三区 | 狠狠久久婷五月综合色| 99热新网址| 丁香五月天啪啪| 五月天婷婷丁香社区| 91色噜噜狠狠狠狠色综合| 来吧亚洲综合网| 99热在线观看这里只有精品| 99免费视频久久| 91大屁股在线| 99ER热精品视频| 五月婷婷综合精品| 可以直接看的av网站| 99九九玖玖| 高潮毛片又色又爽免费| 色婷婷婷婷| 综合久久人妻| 精品一区二区三区木瓜| 开心激情色婷婷五月天| 97超碰人人操| 91视频免费后入强操| 最近中文字幕大全免费版在线| 亚美欧色影院| 婷婷五月天亚洲激情戏精品| 色婷婷六月激情| 99玖玖免费视频| 国产丁香五月天婷婷| 超碰成人电影| 婷婷六月色| 91九色欧美| 激情婷婷黄色五月| 亚洲AV无码影院| 中文字幕不卡网站| 懂色av粉嫩AV蜜臀AV| 欧美内射AAAAAAXXXXX| 九九热最新视频| 五月婷婷啪啪啪| 99精品视频在线观看| 五月天激情网开心网| 天天干天天日日| 日日日日做夜夜夜夜无码| 国产 亚洲 在线| 天堂在线9| 99精品人人| 婷婷射图| 五月激情婷婷图片基地| 九九综合精品| 永久AⅤ1| 五月丁香久人妻中文| 色五月综合资源推荐| 五月丁香色| 婷婷五月六月丁香| www.日日夜夜.com| 91男同视频| 午夜伊人大香蕉| 欧美激情凹凸丁香网| 开心五月婷婷在线视频免费观看| 成人性爱无码| 婷婷五月天久久| 狠狠做深爱婷婷久久综合一区| 开心五月深爱五月| 色综合综合综合| 日本久久色| 秋霞网在线免费基地五月婷婷丁香| 激情婷婷在线| 丁香激情久久| 五月天中文网| 久月婷婷| 婷婷五月天 丁香五月天 裸体 | 国内久久亭亭| 六月丁香婷婷综合色播| 天天爽综合网| 99re这里| 99精品九九| 六月激情丁香一道本7777| WWW·色色色·COM| 日本无va视频| 噜啊噜在线| 91超级碰| 99精品综合| 五月婷婷日本| 操逼在线视频| 97超碰综合| 99色色网| 97碰| 色深爱五月| www.久久久.com| 激情深爱五月天| 日本nghangse中文字幕| 99丁香五月婷| 九九综合九九| 婷婷丁香黄色| 欧美婷婷色| 欧美婷婷精品激| 久碰视频| 婷婷丁香人妻天天爽| 九九成人视频| 99狠狠| 色情丁香五月天| 中文字幕 中文字幕明步| 色五月婷婷丁香五月| 2050人人操免费工开爱| 99精品这里只有免费视频| 青青福利网| 五月丁香综合啪啪| 亚洲色图81p| 人妻系列久久久久久久久久久| 五月天色婷婷综合| 91狼友视频在线观看| 色五月丁香五月| 97婷婷五月天| 99婷五月| 99爱免费在线视频| 国产做A爰片毛片A片美国| 激情人妻综合| 色五月五月天色婷婷色五月| 亚洲 成人 电影av在线观看| 久久网思思| 丁香花成人区| 综合久久六月| 五月精品99综合| 五月丁香六月在线欧美| 激情久久久| 色婷婷小说网| www久久久久久久| 午夜 外网 精品 在线| 丁香五月天堂网| 夜夜操加勒比| 婷婷五月天99| 国产精品久久久爽爽爽麻豆色哟哟| 天天射综合网站| 激情综合网激情五月天| 99精品97| 国产精品久久..4399| 日本情色一区二区| 五月天综合在线观看视频| 97色一二三| 噜噜噜噜在线| 久久婷婷超碰| 六月婷婷开心| 97碰碰在线观看视频| 丁香婷婷视频| 色婷婷久久综| 色婷婷狠狠爱| 综合激情网五月激情| 激情六月综合| 天天粽合合合合| 午夜丁香| 天天操天天操天天操| 99操| 久99久热只有精品国产99| 五月激情啪啪| 婷婷激情五月综合丁| 噼里啪啦完整版中文在线观看| 九九热这里都是精品6| 五月婷婷av| 丁香婷婷人妻| 五月天sesese| 五月婷婷婷丁香播| 国产片天天爽夜夜爽| 日本一级一级一级一级| 欧美精品狠狠色丁香婷婷| 伊人国产婷婷五月天| 操逼五月婷婷| 丁香久月| 美女va| 日产精品一线二线三线芒果| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪 | 91精品无码| 久久HD| tingtingjiqingwuyue| 国产乱子轮XXX农村| 人妻videos人妻高清| 九月激情婷婷丁香| 97在线刺激| 开心五月婷婷五月| 4399精品一区二区| 丁香五月电影| 久久这里有精品在线观看| 丁香色五月AV在线| www九九热| 国产在线另类五月婷婷| 91人人澡人人爽人人看| 青草青草视频2免费观看| 色五月综合婷婷| 久久人操-久草婷婷-成人AV| 婷婷五月综合在线| 天天影视天天爽天天草| 《战争与艾拉》完整版| 丁香花成人区| 中字幕视频在线永久在线观看免费 | 婷婷久久五月| 五月四色激情| 99热激情| 成人在线视频一区| 操逼在线视频| 91人人操人人| 伊人大蕉香| 婷婷久久色| 色婷婷丁香五月色综合网| 精品99在线| 无码少妇高潮喷水A片免费| 野战毛片三一3| 婷婷五月天伊人在线| 丁香五月婷婷少妇| 99热在线观看| 91丨九色丨国产打屁股| 26uuu欧美日本| 婷婷六月丁香在线| 黄色激情久久| 综合www色| 久久精品99国产精品日本| 天天干天天插| 五月天综合婷婷| 无码一区二区日韩| 色丁香五月婷婷| 一区二区传媒视频| 开心色色五月天综合| 久久99久久99久久99人受| 色五月综合激情| 五月丁香综合激情在线观看| 亚洲欧美综合7777色婷婷| 激情国产五月| 色青青电影色五月| 97夫妻超碰| 九九亚洲视频| 五月丁香无码| 五月天天天天天天天天天天天天天天天婷婷婷 | 天天肏在线| 五月天婷婷基地| 婷婷五月综合体验看| 人妻尝试久久久久久久久久久久| 五月激情视频网| 久久久97| 久久视网36| 综合色影| www.99热视频| 91九色在线| 久9免费视频| 天啪天啪天啪天啪| 十二区无码| 超碰在线免费观看日韩| 91肏肏肏| 天天肏视奸| 狠狠精品干练久久久无码中文字幕| 色婷婷综合网| 这里只有精品视频在线| 午夜不卡久久精品无码免费 | 97狠狠色| 99热免| 99操视频| 国产精品第一国产精品| 日本一级黄色片。| 五月天色色色网| 国产av天天插天天操天天爽| AⅤ在线播放网| 丁香五月熟女| 丁香狠狠色婷婷| 丁香婷婷九月| 涩涩五月天综合| 777久久综合视频| 色狠狠综合网| 亚洲精品午夜国产va久久成人| 婷婷五月婷| 婷婷久久色| 亚洲婷婷五月天| 亚洲综合草草| 狠狠干综合| 精品国产一区二区三区四区阿崩 | 蜜臀av 粉嫩av 懂色av | 99免费热视频在线| 亚洲五月丁香综合网| 丁香女人五月天| 国产在线6| 五月天色婷婷小说| 天天干狠狠| av在线免费网站| 伊人久久婷婷| 色婷婷丁香女女| 99啪啪骑| 99精品热视频只有精品10| 五月天六月天| 婷婷五月天激情开心网| 可以看的AV| 日本人妻伦在线中文字幕| 8050一级网| 91九色精品| 袁子仪视频观看| 天天激情站| 亚洲欧洲另类| 婷综合六月| 狠狠干婷婷| 亚洲色综合性| 五月婷婷丁香六月| 99啪啪骑| 五月婷婷亚洲综合网| 情趣视频66| 色色色网站| www。五月,com| 激情五月综合网最新| xx色综合| 色五月琪琪| 精品香蕉99久久久久网站| 亚洲av网址| 激情五月丁香综合蜜桃| 五月丁香大相交| 亚洲字幕AV一区二区三区四区 | 9.1综合网| 一级二级香港秋霞欧美欧美秋霞| 九九AV| 亚洲正能量欧美| 第四色婷婷日本| 色狠久| 9l视频自拍9l九色成人| 99热精品观看| 99无吗| 人妻体体内射精一区二区| 色婷婷A| 五月成人综合| av亚洲国产小电影| 色5在线| 日本久久精品18| 播丁香五月婷婷欧美| 9999久久久久| 大香蕉五月婷婷| www.韩日视频| 五月丁香久久久| 97人人干| 91色综合| 99精品国产热久久91色欲| 91狼友视频在线观看| 精品无码av丁香五月激情| 色碰碰| 综合在线色婷婷| 婷婷综合中文字幕| 天天干肏夜夜| 亚洲乱码日产精品BD| sesesesezonghe| 综合久久综合| 99热综合网| 天天综合色| 九九Y精品热播| 久久人人人人妻| 欧美搡BBBBB摔BBBBB| 1024日韩| 色播五月网| 乱码操操| 激情五月天婷婷| 97香蕉碰碰人妻国产欧美| 思思热在线观看| AV在线收看| 天天色,天天日,天天做| 久久日本wwww色| 五月天色婷婷基地| 国产精品 的国产| 亚洲热热视频| 人人插9| 五月丁香综合中文| 五月天丁香婷| 综合色五月| 九九热精品| 色播五月网| 六月丁香成人| 91紱請| 婷婷五月天成人基地| 色www99| 色综合激情| 色色色婷婷| 五月丁香成人| 一区二区中文字幕| 极品人妻VIDEOSSS人妻| 精品无码99| 91操在线观看| 色色五月丁香| 思思久ren热| 久爱综合| 亚洲无码99| 日本啪啪网| 九九在线精点品| 色婷婷成人影片| 久久综合五月天激情小说网站 | 人妻熟女一区二区AV| 婷婷免费无视频| 综合激情九月婷婷,激情综合婷婷中文字| 五月激情六月综合| 大香蕉av在线| 潘金莲AAAAAAAAAA| 日本婷久久| 五月丁香网av| 一区二区乱视频码| 婷婷五月激情小说| 99er热精品视频| www.91九色| 强壮的公次次弄得我高潮A片日本 | 色情一区二区播放| 久操综合| 91九色超碰| 97五月久久丁香婷婷| 五月噜噜噜色综合| 国产婷婷久久| 99色在线| 欧美色色色色色色| 久久这里都是精品视频| 性天堂久久| 日日做A爰片久久毛片A片英语| 久久久久久人妻久久久久久久久久人妻久久久| 色欲久久综合| 91啪级电影| 久久精品系列| 久久黄色片| 丁香五月欧美激情| 久久久精品人妻录| 久热久色| 激情综合99| 丁香五月综合网| 婷婷激情综合网| 看国产探花操逼三级片| 婷婷六月丁香开心深深爱| 色综合久久无码| 91精品91久久久中77777| 欧美婷婷五月天| 亚洲丁香五月天在线视频| 久久艹99| 中文字幕在线不卡视频| 成人精品视频99在线观看免费| 碰97久久| 色无码| 婷婷日日天天| 久久成人性爱| 婷婷色综合| 天天综合网~91| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 青青草性爱视频| 国产色视频网站2| 伊人久久大香线蕉精品| 噜噜噜久久| 婷婷丁香九月| 五月天播播中文字幕| 99热这里只有精品33| 五月开心婷婷网| 五月丁香花激情综合网| 久xxxx| 婷婷五月天偷拍| 丁香五月天色综合| 啪啪色激情五月天| 亚洲av网站| 成人午夜免费电影| 婷婷色五月天色| 狠狠色中色| 97成人操| 婷婷久久爱| 久久桃花网色婷婷| 久久5 9视频免费观看| 精品一二三区久久AAA片| 天天综合在线网| 91无码视频| 自拍偷窥99热| 黄网在线播放| 香蕉综合网| 色人久久| 丁香婷婷影院| 国产成人网址| 亚洲日韩乱码一区二区三区四区| 精品无码久久久久久久久| 在线日韩视频| 国产精品色情AAAAA片软件| 无码人妻少妇色欲AV一区二区| 人妻少妇色综合| 婷婷五月花| AAA级久久久精品| 久久人人添人人爽添人人片αV| 婷婷久久色五月婷婷久久久| 99热草草| www,超碰| 粉嫩av懂色av蜜臀av熟妇| av网址在线| 婷婷激情五月吧| 玖玖在线资源视频| 丁香五月天视频在线播放| 99热6精品| 五月丁香影院| 色日本五月天| 婷婷综合仓库中文| 色婷亚洲| 丁香五月婷婷狠狠色| 国产婷婷综合| 日本在线视频看se99| 免费人人操| 五月婷婷综合激情网| 伍月婷婷免费视频| 人人人人人人人草| 久久婷婷五月综合伊人| 久久婷婷五月综合| 区啪精品| 丁香五月激情婷婷视频| 久久96热| 99精品久久久久久久婷婷| 99热免费| 久久青草国| 欧美性二区| 婷婷激情网五月天| 97人人操在线| 久久久天堂国产精品女人| 大香蕉娱乐| 五月天婷婷色五月天| site:publishdd.com| 色色色五月婷| 欧美槡BBBB槡BBB少妇| 91久久免费| 丁香色六月婷婷| 综合色色色| 91九色在线| 91刘玥视频在线观看| 黄色aaaaa| 丁香五月亚综合图片| 久热免费| 婷婷五月丁香色综合| 99热久久这里只有精品| 五月天丁香| 疯狂做受XXXX高潮A片| 久久九九中文字幕| 就爱射中文字幕资源网| 日日综合网| 无码九九九九| 婷婷天天综合| 色综合伊人网| 亚洲成人在线综合| 色综合色综合网| 大香蕉久| 婷婷伊人网| 直接看的AV| 亚洲最大成人综合网720P| 亚洲一级色电影| 丁香花操逼| 婷婷丁香五月天色区| 色婷婷影院| 久热精品在看| 久久er99| 色啦啦视频| 777久久综合视频| 激情综合婷婷| 五月停停色| 亚洲色情网站| 五月天丁香色色| 成人精品一区二区三区四区五区 | 伊人丁香五月天丁香在线婷| 这里只有精品免费在线视频| 人妻AV在线观看| 超碰成人AV| 女人天堂 AV| 亚洲综合网在线| 99人这里只有精品| 天天色播| 99热这里只有精品亚洲| 久久久人妻| 思思热这里只有精品视频666| 激情久久丁香| 九九综合网色全集| 久色| av激情在线| 99久在线精品99re5热视频| 91窝窝| 色亚洲欧洲| 9热久久在线| 久久五月天色| 久久精品日| 五月综合婷婷五月| 玖玖综合玖玖| 九九青草热| 日本一级特黄大片AAAAA级| 天天日天天插| 五月婷婷色影院| 九九综合九九| 99热这里在线精品| 五月综合激情婷婷六月色窝| 啪啪婷婷五月天激情| 538在线精品| www.夜夜騎夜夜狠| 我想看国产大学生口爆吞精的视频| www.色五月.com| 五月天综合在线观看视频| 五月情涩综合婷婷| 色天堂在线| 玖玖色综合| 少妇做爰免费视看片| 草AV9999| 涩 五月 婷婷 狠狠| 久久99热这里只频精品6学生| 丁香五月手机在线| 婷婷五月激情中文字幕| 五月天开心色情网| 91人人人人人人人| 日本天堂免费99| 五月天激情黄色小说在线观看| 亚洲人妻av| m色激情网| 久久99看免费| 欧美激情综合色综合啪啪五月| 五月天婷婷丁香蜜桃91| 人妻Av在线| aa久久| 天天日P天天射P| 色八月婷婷| 爱久久小说下载网| 欧美成人精品A片免费一区99| 亚洲激情网| 国产精品第一国产精品| 色五月亚洲| 婷婷激情丁香五月天综合| 五月婷婷啪啪啪啪| 夜夜大香蕉婷婷丁香| 丁香婷婷精品视频| 免费观看日韩成人av| 中文字幕在线免费观看视频| 色婷婷六月综合| 婷婷五月天毛片| 九九aV| 婷婷色五月天在线观看| 久热超碰| 精品视频网| 99色综合| 天天插天天日| 婷婷五月天日逼| 久久婷婷五月天激情| 五月婷婷六月激情| 97操碰在线视频| 99成人精品| 五月丁香久久综合| 久久99网| 欧美槡BBBB槡BBB少妇| 俺去也综合| 插插干干干色| 99九九在线| 免费日本aⅴ中文字幕 | 五月婷婷中文字幕AV| 99热精品10| 久久综合婷婷五月| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | www.日日日.com| 日本婷久久| 亚州欧美黄色电影| 五月丁香六月婷综合成人综合| 欧美精品18| 六月五月婷婷| 激情影院内射| 超碰成人免费| 综合色吧| 丁香五月成人自拍| 亚洲综合网在线| 9色在线| 91se在线视频| 色五月婷婷老师| 99成人免费视频| 色综合色欲综合天天免费| 国产精品久久..4399| 色婷婷在线影院| 99ri精品在线观看| αv中文字幕在线观| 色综合久久888| 日韩成人av在线| 色五月激情五月开心五月| 成人精品99| 色五月婷婷开心| 婷婷五月天AV激情| 夜夜躁狠狠 | 狠狠色综合无线观看| 五月Huangsewang| 免费观看18视频网站| 激情五月天综合网| 久久九九热视频| 99久久综合网| 九月丁香| 色婷婷影院| 我爱大香蕉| 久久久久9| 久久五月视频| 99这里都是精品6| 97人人干| 色婷婷网| 五月天开心网| 大地9中文在线观看免费高清| 久久精彩免费视频| 99在线精品免费视频| 一本道在线电影| 99久久国产宗和精品1上映| 色亭亭五月天网扯| 五月天三级| 婷婷激情六月综合| 日逼免费视频| 99re这里只有精品视频了| 丁香网五月天激情| 婷婷狠狠色| 另类小说色婷婷| 91无码视频| 亚洲综合激情五月久久| 亚洲欧美成人在线| 成熟妇人A片免费看网站| 成人国产欧美大片一区| 婷婷丁香91综合| 97操碰日本女人| 综合久久久婷| 五月丁香婷婷色色| 婷婷色五月婷婷姐妹| 6080av| 色在线视频网2025| 五月天婷综合| www.夜夜操.com| 亚洲愉拍99热成人精品| 亚洲av成人一区二区电影在线| 97碰成超视频免费视频| www.色99| 精品综合五月| 人人播| 免费视频99| 不卡在线视频| 亚洲av网址| 66精品国产成人| 高清无码中文字幕aVDV| 精品久久人妻| 丁香五月综合| 无语停婷丁香网| www.久久久.com| 五月天婷婷色播| 九九热精品| 色婷婷香蕉| 91主播在线| 亚洲成人综合在线| 亚洲婷婷成人五月天| 99九九在线精品热动漫| 免费视频WWW在线观看网站| 国内在线99视频| 天天艹天天综合网| 五月激情偷拍| 九九热在线精品视频| 激情综合文学| 欧美黑人大吊| 六月婷婷久久| 在线只有精品| 五月天大香蕉AV| 五月天激情偷拍| 538在线精品| 婷婷性爱| 国产操B视频| 精品综合五月| 亚洲中文字幕av| 色婷婷在线视频观看| 欧美日本VA| 亚洲色视频| 极品人妻VIDEOSSS人妻| 婷婷成人AV| 婷婷激情啪啪| tingting五月天亚洲| 丁香五月六月综合欧美| 国产精品久久久久久久久久| 中文字幕,综合,91| 97好吊操| www.婷婷| 99超级碰碰| 婷婷噜噜| 欧美成人精品A片免费一区99| 亚洲AV网站在线观看| 激情性五月天免费小说视频| 91超碰人人操| 99热碰碰热| 久久这里有精品| 色婷婷丁香花五月天| 五月丁香美女| 久/久精品99看9| 91在线视频综合| 久久免费视频62| 黑人巨粗进入警花疼哭A片| 九九热av| 色天堂A| 91人人爽人人操| 丁香婷婷六月在线资源观看| 丁香五月成人| 婷激情五月天视频导航| 天天搡日日搡aaaaⅩ| 狠狠色丁香婷婷五月| 五月丁香基地| 色99综合色88| 婷婷丁香亚洲五月天| 激情开心五月天| 好好干Av| 婷婷五月婷婷| 丁香五月综合高清在线| 久久女婷| 97精品欧美91久久久久久久| 激情久久久久久久久久久| 激情综合婷婷久久| AV人人操| 久久综合五月婷婷| 久久视频在线| 激情婷婷五月综合| 婷婷五月天在线观看免费| 婷婷丁香无码专区| 噜噜噜精品欧美成人在线观看| 成人免费120分钟啪啪| 婷婷激情综合无月| 日本天天操| 亚洲综合丁香婷婷六月天| 国产午夜精品AV一区二区麻豆| 人妻久久做| 九九激情网| 日韩成人五月天| 性av| 亚州AV超碰人人操| WWW、日本色丁香、co m| 99热这里只有精彩| 超碰国产在线观看| 五月婷中文字幕| 91超级碰碰| 五月激情综合网| 春色激情第四色| 99欧美精品99日本精品| 色综合激情| 综合色影院| 五月丁香成人网| 在线,国产,色,热视频| 午夜精品久久久久久久爽| 99热在线观看这里只有精品| 91高潮喷水久久久久久久久| 色色a| 色色吧综合| 欧美槡BBBB槡BBB少妇| 五月丁香婷婷综合网色欲| 大香蕉丁香| 久久99婷婷| 777.色色| 久久婷婷艹| 日韩高清成人| 婷婷色五月激情| 大香焦A∨| 色在线99| 月婷婷亚洲| 超碰人人操人人9| 色三级色三级| 天天草天天爱| 久热伊人在91| 思思re99视频在线观看| 很很干在线视频| 久色88| 九九色色| 久久人妻伦理| 国产日产成人亚洲欧美国产VA| 亚洲精品一区无码A片| 天干夜夜操| 亚洲色综合| 182无码| 久久久97| 欧美婷婷五月| 很很干天天干| 俺去也在线www色官网| 婷婷97碰碰| 婷婷五月激情基地| 久草A片| 亚洲、热| 成人精品在线| 香蕉99网| 婷婷色婷婷| 久久久久久久人妻| 久久婷婷五月综合激情国产| 偷拍91九色| 日本一级黄色片。| 色射影院| 成年人看Va免费视频| 激情视频婷婷五月花| 色天使色综合| 九九热精品视频在线观看| 激情六月综合| 久久久久亚洲A∨成人乱码电影| 久草九九| 日本黄 色 片| 六月丁香五月天| 五月丁香六月欧美综合网站| 丁香六月婷婷高清| 伊人激情啪啪| 五月婷综合| 成人综合网站| 日韩欧美一级大黄网站| 丁香五月婷婷激情蜜桃| 婷婷五月天在线综合导航| 国产ava| 天天肏天天肏| 久cao香蕉影院| 激情五月婷婷综合| 97热视频| 五月色综合| 五月婷婷在线综合| 五月丁香婷中文字幕| 久久久思思热| www.婷婷六月天| 99re青青草| 亚洲欧洲美女在线观| 99热精品在线观看| 日本色色色| 99热这里都是精品| 超碰爱爱爱| www.日日夜夜.com| 婷婷六月天亚州| 777丁香六月青青草婷婷综合久月 五月丁香综合伦理片 | 亚洲色欲AAAAAA| 丁香五月天天日| 伊人五月天综合网| 色播丁香| 精品久久久999| 亚洲碰碰碰| 超碰网站在线观看| 激情五月天婷婷丁香| 色天使久久综合| 色婷婷丁香女女| 国产精产国品一二三在观看| 99噜噜噜在线播放| 久久XX| 超碰av在线| 亚洲色频| 五月在线| 超碰99在线观看| 一级黄色影片| 乱岳熟女50岁| 国产精品扒开腿做爽爽爽A片唱戏| 9久久精品| 99在线免费视频| 伊人久久婷婷| 99性爱| 国产毛片精品一区二区色欲黄A片 国产人妻777人伦精品HD | 天天色天天干天天插| 六月丁香激情最新更新| 五月花成人网| 深爱激情网噜噜色| 一本综合丁香日日狠狠色| 五月丁香六月情亚洲| 久久免费视频62| 丰满熟女人妻一区二区三 | 婷婷色综合| 99re久热只有精品6在线直播| 情欲综合网| 麻豆123区| 伊人久久五月天| 五月激情六月综合| 日本天堂免费99| 99精品视频网站| 久久久久人妻| 伊人久久婷婷五月综合97色| 五月天大香焦| 亚洲色色五月| 91黄址| 9999热精品在线免费播放| 亚洲精品久久久久久久久久吃药| 丁香五月区| 激情爱爱网站超大免费| 99色亚洲| 婷婷五月激情黄色| 五月婷婷丁香网| 无码激情| 亚洲女婷婷五月基地综合久久久| 六月 丁香 视频| 色噜噜在线| 婷婷操无码| www.五月婷| 婷婷中文在线| 激情五月亚洲综合网| 五月婷婷我| 九热...av| 国产人妻人伦精品一区二区| 日韩不卡123| 超碰九九热| 巴基斯坦粉嫰无码视频| 深爱激情综合| 丁香六月综合激情| 色婷婷人人| 久热91| 另类小说五月天激情| 人人播| 丰满老熟妇BBBBB搡BBB| 婷婷五月娱乐在线| 秋霞免费三级片| 婷婷综合网站| 婷婷五月综合激情| av在线免费播放观看| 99狠狠色| 狠狠狠狠狠操| 91婷婷| 国内9l视频自拍老熟女九色| 久99热| 真实亲子乱子伦高清在线观看| 婷婷综合| 五月丁香婷婷老司机| 婷婷五月丁香综合亚洲| 开心激情播播五月天| 亚洲精品成人| 色噜久| 五月丁香六月婷婷亚洲激情综合| 香蕉人在线香蕉人在线 | AA片在线观看视频在线播放| 任你搞网站| 亚洲va在线| 久久性视频| 伊人久久大香蕉网| 天天操天天爱天天玩| 婷婷中文字幕| 久热99热| 色欲AV导航| 五月天激情婷婷| 婷婷综合五月天| 狠狠高潮精品亚洲1| 97超碰婷婷五月天| 超碰在线91| 色五月偷偷| 男人的天堂在线婷婷| 日本五月丁香| 九九这里有精品| 激情久久久久久久久久久| 色丁香影院| 久久AAAA片一区二区| 亚洲激情网| 99色干| 久久狠婷婷| 婷婷丁香在线播放| 激情五月婷婷| 丁香六月婷婷综合激情欧美| 色六月婷婷| 99久久精彩视频| VfJxEwPH| 九九99精品视品| 思思热思在线精品视频| 这里只有精品视频99| 99干日本| 91丁香五月| www.无码com| 开心激情五月天网| 久久丁香网| www.夜夜.com| 超碰在线caop| 五月丁香综合啪啪対白| 丁香五月成人| 99视频久久免费视频| 噜噜噜久久| 狠狠艹狠狠艹| 天天做天天爽| 激情 五月 婷婷 丁香| 涩五月婷婷| 九九热这里只有精品556| 99碰碰| 思思热这里只有精品视频666| 99热人人| 婷婷99狠狠躁天天躁| 色五月婷婷五月| 熟女色专区| 天天草天天爽| 色色色精品无码区| 八戒青柠影视剧在线观看| 99热99热在线观看| 男同91| 五月天婷婷无码视频| 一级性感毛片|