欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

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
返回資訊列表
另类五月婷婷| 久久视频在线| 成人无码中文| 五月天婷婷社区| 狠狠搞综合色| 亚洲精品亚洲人成人网| 91日综合欧美| 少妇AB又爽又紧无码网站| 久久er99| 五月婷婷丁香伦理网| 狠狠色婷婷丁香五月| 色色色色色色色色色999| 91av色色乱视频| 天天干天天干天天干天天干天| 情情五月天色| 人人色人人摸人人看| 操逼电影免费看| 九九Av| 丁香五月成人论坛| 97色色色色| 亚洲午夜成人av电影网| 五月婷视频| 婷婷五月色播放| 91操网| 免费无码毛片一区二区A片| 色播播五月天| 激情综合五| 99热 在线观看| 婷婷丁香婷婷97| 99色性爰网络| 欧美久久婷婷| 色偷偷色婷婷| 久热免费| 日日日日日| 久久五月婷综合网| 色色精品色| 久久丁香九| 96精品成人无码A片观看金桔| 亚州AV超碰人人操| 亚洲人人操BD| 五月天激情亚洲| WWW久久久| 操逼五月天| av九九| 99久久久久| AAAA网站| 大香蕉婷婷五月| www.99热视频| 91久久久久久久久18| 色婷婷五月中文字幕在线dvd| 69堂午夜视频最新地址| 天天做天天爱天天爽在| er99免费视频在线| 战争与艾拉电影免费观看| 色欲婷婷夜夜| 思思精品久久艹| 好好日激情五月天| 丁香六月伊人| 激情五月天啪啪| 色婷婷婷婷| 99热a片免| 99久久免费精品| 五月婷婷六月奇米网丁香| 色婷婷婷av| 婷婷五月成人色综合| 日本熟妇精品99| 久久免费操| 丁香久久九九99| 特黄三级又爽又粗又大| 色综合久久综合中文综合网| 综合五月天亚洲婷婷| 五月丁香综合网色欲| 一起草无码视频| 亚洲 25P| 综合色激情| 久久五月天婷婷视频| 婷婷色播色五月五色五月天色妇| 色婷婷五月天综合网| 亚洲色模骚货| 影视av久久久噜噜噜噜噜三级| 五月丁香啪啪啪综合网| 五月激情天| 成人综合网站| www.99热这里精品| 99热久久这里只有精品| 婷婷成人五月天成人文学| 五月激情丁香| 超碰久热| 色爱综合五月| 婷婷色播色五月五色五月天色妇| 97 A I色色| 丁香九月综合激情| 久9热视频在线| 殴美97色| 97视频.干com| site:publishdd.com| 丁香婷婷六月天| 国产精品A片| 激情综合一| 九九热只有精品| www.色五月| 91av成人| 五月色婷婷综合色| 色你久久| 久久久久人妻| 婷婷九九| 婷婷五月天天天| 五月天婷婷在线视频| 六月丁香网| 99久久国产综合精品五月天喷水\| aaaa.黄| 97人妻碰碰中文无码久热丝袜| 五月婷婷播| 五月婷婷丁香婷婷| 99视频热99| 精品网站:999WWW| 五月激情视频网| 婷婷五月天激情五月天深爱五月天| 久久ww| 丁香花大香蕉婷婷综合| 五月婷婷色综图片| 可以看的AV| 亚洲精品国产A久久久久久| 久久五月天色婷婷| 一起草性爱不卡视频| 久久人人看| 色婷婷丁香女女| 99热最新网址| 99精品在线| 美女被肏网站在线看| 狠狠舔| 日本VA视频| 少妇高潮呻吟A片免费看软件| 国产色香蕉精品五夜婷| 99热中国| 婷婷狠狠青青| 亚洲激情免费视频| av操B网站| 久久99网站| 亚洲色色香蕉| BlACKEDRAW视频一区二区| 天天日天天添| 91丨九色丨大屁股| 性韩日色婷婷五月天激情啪啪XXX| 丁香色五月婷婷| 99无码| 婷婷丁香97| 久久久久99精品成人片| 国产精产国品一二三在观看| 五月情综合| 夜夜干 夜夜操| 97超级碰碰碰| 婷婷五月天免费视频在线观看| 激情五月天婷婷| 色色色婷婷五月| 亚洲成人人人操| 婷婷丁香熟女| 人人草人人视| 亚洲黄3级片网站欧美| 久久久久人无码人妻| 99这里有精品| 9999热这里只有精品| 天堂成人A片永久免费网站| 五月丁香另类网| 五月婷在线视频免费播放| 年轻的妺妺伦理HD中文| 日韩乱玛久久| 欧美乱码国产一级A片| 丁香综合网| 成人 在线观看国产| 亚洲激情图文小说| 五月婷婷性爱网| 激情五月婷婷欧美极品| 91狼友视频在线观看| 色欲五月婷婷| 人人操女人| 久色激情| 99热精品10| 丁香五月av| 插插插丁香五月婷婷| 思思热在线观看| 色八月婷婷| 超碰在线国产| 伊人五月天婷婷| 亚洲电影中文字幕| 丁香五月手机在线| 婷婷五月中文在线| 久草婷| 先锋资源 996| 涩涩婷婷五月| 色九区| 丁香五月婷婷六月婷婷| 婷婷碰碰| 99黄色性生活| 天天日天天日天天搞| 91在线资源| 亚洲99在线| 大香蕉五月天| 啪啪啪丁香五月| 婷婷五月激情中文字幕| 欧洲亚洲最新精品| 99视频91| 色综合综合综合| 丁香五月天激情视频| 亚洲无码yw| 激情五月丁香婷婷| 天天干,夜夜爽| 婷婷五月天色| 色五月婷婷伊人| 亚洲免费婷婷| 久久综合五月天| 色情综合| 91性人人| 丁香五月狠狠在线观看| 激情视频网址| 丁香六月啪啪啪| 五月丁香六月婷婷中文版| 亚洲图色五月天| 五月婷婷性爱| site:pnnrt.com| 丁香午月AV中文字幕| 东北熟女视频99| 男女99免费视频| 激情美女五月天激情在线| 26.uuu丁香五月婷婷| 激情五月婷婷综合| 国产成人+综合亚洲+天堂| 色播五月婷婷综合| www.色99| 97久久草草超级碰碰碰| 久久99免费视屏| 亚洲综合另类| 三级黄网站| 五月激激激情综合网| 91综合在线| 五月婷九九草| 婷婷欧美色| 好大好粗嗯啊-一级黄色大片免费观看-成人AV| 狠狠狠狠狠干| 人妻啪啪啪| 丁香色五月婷婷| 五月婷高清视频| 五月丁香花视频| 超级碰碰一区| 97ai婷婷| 激情色情五月天| 极品人妻VIDEOSSS人妻| 九九热最新| 97操操操| 婷婷金品综合视频| 激情亚洲网| 激情五月婷婷| www.婷婷| 六月婷婷视频| 亚洲午夜一区二区| 久久色天堂| 好色婷婷| 香蕉婷婷色五月| 九九美女视频| 久久精品五月| 久久五月天视频| 亚洲AV成人无码电影| 丁香婷婷老熟女综合网| 超碰妻人人| 婷婷五月天桃花网| 国产又爽又猛又粗的视频A片| 久9热在线视频| 99久久er| 亚洲综合五月天婷婷| 久草xx性爱视频| 69婷婷丁香午夜| 色色色综合视频| 六月激情久久婷婷| 久久这里只有精品视频26| 天天爽夜夜爽夜夜爽精品| 人妻AV在线观看| 夜夜躁婷婷AV| 日韩成人精品中文字幕| 色天天久婷婷| 天天爽—爽| 色婷婷丁香六月| 欧美成人无码一区二区三区| 色婷婷aV四虎| 激情五月天色婷婷综合| 色五月琪琪| 青草青草久热这里只有精品| 亚洲第一色网站| 国产热精品| 色青青视频| 婷婷伊人久久综合| 国产精品日日躁夜夜躁| 五月花免费视频| 亚洲妇女熟BBW| 777精品久无码人妻蜜桃| 国产精品激情AV久久久青桔| 婷婷色五月天色| 六月丁香久久| 久狠狠| 丁香五月天激情综合| 96精品久久久久久久久| 香蕉久久av一区二区三区| 免费视频在线观看的网站| 久久日婷婷| 哇嘎成人久久| 中文aV网| 99爱爱| 久久99综合| 色色色五月天婷婷| 五月天大香蕉| 嫩草乱码一区三区四区| 91啪啪视频| 亚洲网在线观看| 久热re在线视频| 秋霞A V毛片| 99热九九这里只有精品10| 五月丁香六月婷婷啪啪综合| 五月丁香亚洲婷婷| 五月天久久婷婷| 久久狠狠欧美| 日日夜夜噜噜爽爽| 五月丁香亚洲综合| 天堂五月婷婷| 婷婷五月AV| 天天肏高清在线| 色噜噜狠狠色综合网| 天天日夜夜爽| 91婷色| 九九热区一区二区三区| 99热这里只有精品2| 成人AV在线中文版| 激情桃色网| 婷婷五月天在线一区| 五夜婷婷| 五月天激情四射网站| 777精品成人a v久久| 天天日天天色| 久久色吧| 色亚洲激情| 无码少妇高潮喷水A片免费| 婷婷五月天首页激情| 五月色视频| 激情五月婷婷六月丁香| 综合色色五月| 97婷婷丁香五月天激情图片| 99色在线视频| 无码色色色色色| 丁香五月婷婷视频| 色播色丁香五月| 怡红院院久久| 欧洲MV日韩MV国产| 色婷婷丁香五月在线| 久久9久| 99偷拍视频在线日本| 99热精国产这里只有精品| 亚洲综合在线视频| 99热99色| 操逼毛片国语对白| 日本综合色色| 色色五月丁香| 丁香六月综合激情| 97资源碰碰| 五月天丁香久久| 五月婷色丁香| 五月婷婷天天| 天堂色色色| 日韩无码色色| 婷婷六月综合| 日本久久人人| 99久re热视频精品98| 超碰色综合| 色五月婷婷激情基地| 色XX综合网| 天天色凹凸| 三区激情四射av| 丁香五月久久| 天天狠狠色噜噜| 国外亚洲成AV人片在线观看| 激情五月天伊人av| 夜色综合网| 婷婷在线视频| 中文字幕黄色片| 噜噜干日本| 99热第一页| 天天爱天天做天天操| 亚洲视频无| 欧美色性色好| 婷婷丁香久久| 久/久精品99看9| 九九性视频| 开心激情婷婷| 狠狠色婷婷777| 色婷婷操逼网| 久久婷婷五月天| 久久九九99| 久久久久9999| 第四色首页| 中文字幕av亚洲| 51XX午夜影福利| www.婷婷| 婷婷5月久久综合网站| 俺也去在线视频| 婷婷九月狠狠色| av色婷婷| 精品99这里有| 97人人妻人人艹| 成 人 色 色| 特级操b片| 97精品综合| 激情的五月| 色九九九综合| 狠狠综合网| 五月婷婷精品视频| 九色PORNY自拍成人精彩视频| 99色热| 欧美亚洲操逼| 色一情一乱一乱91Av| 久久五月天综合| 婷婷网五月| 在线中文亚洲| 色婷插| 久久久久久久久99精品| 亚洲小说欧美激情| 97资源碰碰| 操操操B| 丁香五月婷婷av| 色婷婷在线视频久| 91九色丨国产丨爆乳| 国外亚洲成AV人片在线观看| 久久婷婷色| 丁香色五月婷婷91桃色| 婷婷欧美偷拍综合| 精品女人九九九| 91人在线观看| 婷婷五月激情丁香| 婷婷五月丁香超碰| 2025天天操| 五月欧美色播| 99日本精品视频热| 久久九九精彩| 五月丁香亚州综合网| 亚洲五月婷婷| 99热99在线| 超碰熟女拍拍| 丁香五月六月激情| 五月丁香久久久日婷婷久久婷婷日| 亚洲Av成人在线观看| 97碰精品| 色噜噜狠狠狠狠色综合久欧美| 色婷婷成人做爰A片免费看网站| 五月婷婷影院| 色吧五月| 丁香六月啪| 在线播放成人网站| 亭亭五月色男人| 色播播五月天| 天天插天天日| 99色热视频在线| 五月婷婷久草在线视频综合| 国产色色在线| 激情婷婷五月久久| 伊人婷婷青青cao| 99人人操人人爱久久久| 71在线精品视频一区| 99热国产在线| 国产97在线日韩亚洲女人被黑人巨大| 99热99艹在线观看| 精品国产AV色一区二区深夜久久| 婷婷六月天| 中文字幕在线不卡| 五月激情偷拍| 激情综合婷婷| 日韩黄在免| 亚洲操女| 9久国产| 人妻久久婷婷| 五月丁了香蕉综合| 精品久久久久久久人妻| 久久ab| 五月亭亭开心网| www.婷婷,com| 九九这里只有精品| 一级操逼大片| 性爱人人网| 99ri久久| 色综合五月在线| 停停五月天激情网| 日本视频99| 婷婷五月激情中文字幕| 激情综合网激情五月俺也去| 欧美日韩成人在线免费| 国产精品久久99| 五月丁香直播| 五月天淫乱视频| 国产一级片| 99久久国产宗和精品1上映| 曰韩五月丁香色婷婷无码| 色99xx| 国产精品日日躁夜夜躁| 性小说五月天| 五月婷婷六月色| 激情小说婷婷| 国产亚洲av片| 月月AV| 成人电影丁香六月天| 激情 婷婷| 激情小说婷婷| 九九精品re免费视频| 六月婷婷激情图片| 色欲久久久久| 天天爽天天干| 九热久| 深爱网深爱综合网| 碰超99| 国产精品天天狠天天看| 色99日韩| 久久精品亚洲一级牲爱综合| 激情五月婷婷丁香| 91丨九色丨老农村| 五月天婷婷乱| 91狠狠色丁香婷婷综合久久| 免费操超碰| 日本激情ⅩXX免费视频| 激情五月综合网| 成人美女网| 亚洲小电影在线观看黄999| 天天拍天天做视频| 激情文学久久| 日亚二欧美| 九九热思思热| 婷婷五月天丁香| 性高潮久久久久久-九九九九九九九九九九热-成人AV | 久久婷网| 五月天精品视频| A久久| 久久新| 激情综合色播| 九久久九精品视频| 婷婷综合五月激情| 99热激情| 日韩成人综合网| 婷婷六月丁香欧美视频在线| 色狠狠婷婷| 99国产小视频免费观看| 色色激情| 日本啪啪天堂| 精品久久久999| 婷婷丁香黄色| 婷婷五月天在线综合| 图片区 小说区 区 亚洲五月| 五月丁香色婷婷色| 丁香五月影院| 亚洲婷婷激情综合激情999精品| 婷婷五月色亚洲| 国色天香成人网| site:hcxsz888.com| 久久总和99| 色婷婷情片| 五月丁香另类图片| 国精产品一区二区三区| 中文av网| 亚洲成人中心| 92久久| 色五月婷婷在线| 久久精彩视频| 91九色小视频| 激情久久久| 91一起操| 五月婷中文字幕| 超碰9| 99九九在线精品热动漫| 99久久99久久综合| 亭亭丁香aV| 亚洲欧美成人在线| 狠狠色丁香婷婷基地| 日本人妻伦在线中文字幕| 天天色爽| 大香蕉在线99热| 天天天天爽爽天干| AVV黄| 99人妻碰碰碰久久久久视| 大伊香蕉玖玖爱| 爽极品色| se色99| 亚洲第一成人无码A片| 九九久久综合网站| 91丨九色丨老农村| 日本久久99| 激情五月开心五月在线视频| 中字幕视频在线永久在线观看免费 | 五月丁香亭亭操逼| 久久久久婷婷五月热综合| 天天日天天插| 五月丁香婷婷三级| 夜夜爱影院| 六月婷婷色综合| 五月丁香激情综合啪| 免费无码毛片一区二区A片| 日本成人小说婷婷六月| 色综合久久88色综合天天看| 综合婷婷| 六月丁香VA| 91色综合| 久久婷综| 色色综合网站| 欧美成人精品一区二区| 26UUU欧美激情一区二区| 大香蕉520| 夜丁香五月婷婷| 五月婷婷激情久久| 亚洲六月色| 69久久99精品久久久久婷婷| 丁香五月大片| 五月天婷婷伊人| 天天爽天天| 婷婷亚洲欧美丁香五月| 激情宗合哪里能看| 一起肏在线视频| 丁香五月天社区| 青草五月天| 婷婷五月天视| 九热免费视频| 久久综合55| 日本色色色| 2025天天操| 99久久免费性爱视频`| 久久精99| 日日影院 | 91色操| 丁香五月综合在线播放| 中文无码婷婷| 六月丁香婷婷综合影院| 99热热热99精品丁香| AV在线免费播放| 激情五月婷婷综合色播小说| 色黑鬼导航| 99色在线观看视频| 五月天丁香久久综合 | 激情五月黄色小说| 狠狠爱激情网| 丁香五月婷婷亚洲激情四射| 久久久GOGO无码啪啪艺术 | 亚洲一区二区 成人网站戴套| 婷婷精品| 丁香五月情色| 国产av影片| 99五丁香月| 国外亚洲成AV人片在线观看| 丁香五月天堂网| 日本成人噜噜噜| 久久久久人无码人妻| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 久久性操| 成人精品人妻| 五月丁香婷婷啪啪综合| 五月天丁香花婷婷| 20253AV| 男同91| 国产又爽又猛又粗的视频A片| 99色热| 大香蕉婷婷五月| 天天爱综合网| 五月婷婷激情五月| 婷婷色色婷婷| 狠狠狠狠狠狠| 五月天伊人久久久久| 婷婷六月丁香五月| 五月婷婷之综合激情| 五月丁香狠狠| 婷婷五月综合激情免费视频| 色在线视频网2025| 色情婷婷五月天| 婷婷天天日婷婷| 婷婷五月天无码| 天天日夜夜拍| 丁香五月色网| 五月丁香六月婷| 久9热| 久久这里有精品| 九九这里只有精品| 国产精品涩涩涩视频网站| 激情六月婷婷| 4438亚洲欧美| 天天综合网色欲香| 大香蕉中文| 六月婷婷综合| 开心五月丁香综合久久| 色欲资源网| 无人精品在线视频| 91男同| 婷婷久久五月| 琪琪色五月婷婷老师| 丁香影院五月综合| 99亚洲视频| 、激情六月天| 婷婷丁香五月天亚洲| 欧洲亚洲精品| 能直接看的av网站| 裸体做A爰片毛片A片免费| 日韩专区五月天婷婷丁香| AV在线不卡网站| 五月丁香婷草| 噜噜综合网| 婷婷五月天激情基地| 五月天天综合| 亚洲视频一区| 午夜日韩久久久网站| 婷婷久久五月| 伊人狼人干| 色蜜婷婷| 欧美va国产va| 免费观看大片视频 丁香婷婷 六月欧美| 久久久久激情| 爆乳熟妇一区二区三区四区| 91精品综合久久婷婷九色| 色婷丁香五月| 日日夜夜狠狠| www99精品| 亚洲中文乱字字幕在线永久| 色播播五月天| 69精品人妻不卡视频| 性色欲情 网站| 思思国产99| www.五月丁香| 国产小网站| 日日干综合| 欧美性爱一区| 九九热9| a在线观看| 亚艹艹| 99操99| 色婷婷AV在线| 婷婷香五月| 九九碰九九爱97| 亚洲电影中文字幕| 亚洲AV激情五月综合网| 亚洲操精品| 久草x色在线观看99| 成人看片网站| 99热精品在线观看| 午夜AV网| 激情小说五月天中文字幕| 操逼视频一区| 操婷婷久久| 色视五月天婷婷| 国产成人99久久亚洲综合精品| 色播色丁香五月| 激情网第四色| 九月丁香| 久久免费精品小视频| 思思热视频在线| 香蕉网婷婷| ,99视频久久| 久99热| 色五月婷婷操逼| 九九热99热| 久9热视频在线| 丁香八月综合激情| 丁香六月综合激情| 五月天亚洲图片婷婷| 五月天综合激情网| 久久一级片| 天天日天天干天天天| 在线观看免费观看在线9久| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 天天色视频| 五月丁香啪啪啪综合网| 婷婷97碰碰| 成人网站av免费网站推荐| 五月天婷婷视频| 国内精品免费一区二区2009| 日韩人妻操逼视频| 色综啪啪网| 激情五月婷婷综合网| 成人综合网站| 丁香婷婷久久老熟女综合网| 激情都市另类| 久久成人天| 久久婷婷青青| 婷婷五月天黄色小说| 九九色插| 91精品久久久久、久五月天| 久久综合五月| 日韩操逼大片| 欧美天天草人人草| 婷婷激情五月综合| sewuyuejiqingwang| 黄色视频网站在线播放| 操熟女成人网| 五月天丁香欧美激情| 婷婷六月色开| 久久大香蕉同僚| 91久久久久久| 丁香五月婷婷动漫视频| 色婷青青| 婷婷色六月| 成人欧美日韩| 婷婷六月色| 思思精品久久艹| 久久婷婷电影| 久久久久久久97| 天天玩天天摸| 九九热123| 亚洲久久激情| 色综合九九| 噜噜在线| se影音资源在线观看| 六月婷婷七月丁香| 9l视频自拍9l九色成人| wwwC0maV五月花| 97干在线看| 99热在线精品观看| 亚洲十月婷婷综合| 97超级碰碰碰| 中文字幕在线日亚洲9| 色了色综合| 狼人婷婷综合| 老师的粉嫩小又紧水又多A片视频| 极品五月天| 国产av基地| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 六月色播| 丁香五月综合久久八| 亚洲va久久久噜噜噜久久天堂| 99热成人精品网站| 亚洲色激婷| 日韩美女在线视频19| 九月婷婷| 色婷婷社区| 婷婷丁香射射| 五月天久草| 狠狠穞A片一區二區三區| 久久这里只有欧美| 久久婷婷五月天激情新地址| 婷婷五月丁香国产| 天天日,天天插| 婷婷五月天综合中文| 激情综合区| 国产乱轮一区二区三区| 天天干天天日天天操| 丁香五月天在线| 凹凸7777操操操| 免费成人网在线观看| 粉嫩AV久久一区二区三区| 婷婷色综合| 另类激情五月| 色五月天堂| 美女被肏网站在线看| 99性视频| 久久精品4| 天天爽日日爽夜夜爽| 五月天综合缴情网网站0| 碰人人操| 操逼电影免费看| 99在线精品视频| AV在线中文| 色五月在线观看| 激情五月婷婷伊人| 99热最新地址在线| 啪啪婷婷五月天激情| 久久33视频| 亚洲在线免费成人| 久热9| 色婷婷9| 噜噜狠狠色| 成人九九视频| 日韩六十路91性交电影| 综合狠狠伊人| 九九RE视频在线精品| 天天干天天操天天射| 日韩aⅴ视频| 久久艹 五月天| 激情六月天| 看片视频在线免费日产在线看| 原琪琪色影院| 99色在线观看视频| 月婷婷婷婷五月| 亚洲欧美国产高清vA在线播放| 午夜九九电影| 婷婷大美在线| 亚洲激情五月婷婷日日| 激情五婷精品网在线观看网址| 变态另类9| 色综合久久天天综合网| 色婷婷激情| 香蕉视频91| 超碰猛烈的性猛交| 黑人熟妇一区二区三区| 91人碰| 日韩精品一品二区三区的使用体验 | 婷婷五月久久| 热99玖玖99玖玖99九九| 万月丁香狠狠爱| 五月丁小婷婷激情四射| 色色色com| 五月天婷婷狂暴白浆| 日韩AV中文在线观看| 色和综合网| 色八戒操婷婷| 久草丁香婷婷五月天婷| 九九人人自拍| 4399成人黄A片| 99色6爱9热| yazhou seshipin| www.思思99热| 丁香六月在线| 色哟哟www| 久久五月婷| 99视频只有精品| 国产美女无遮挡裸体毛片A片| 丰满人妻妇伦又伦精品国产| 九九XX视频| 久久 中文 日本| 欧日韩成人| 欧美日韩成人在线| 夜夜爽日日躁| 开心五月婷婷婷美女| 久久艹99| 欧美日韩91| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 淫视馆aV二区一区| 最近韩国日本免费高清观看| 九色视频九色九色91jiuseshipin| 性爱五月婷| 欧美在线97| 丁香婷婷综合五月天| 五月丁香做爱视频| 一级精品999WWW| 五月天偷拍| 天天久久婷婷| 91狠狠色| 米奇影视资源婷婷狠狠色激情欧美五月丁香| 丁香五月开心婷婷| 大香蕉精品视频| 2018国产大陆天天弄| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 99爱这里只有精品免费视频| 伊人激情啪啪| 国产,欧美,学生妹,视频| 99久久精彩视频| 综合激情开心五月| 99免费热视频在线| 婷婷五月成人| 国产探花一片区| 成人色五月天婷婷| 思思热久久久在线| 亚洲综合激情五月久久| a免费在线| 99re在线观看| 思思热高清在线观看| 99热66| www,超碰| 丁香五月激情六月综合| 爆乳熟妇一区二区三区爆乳| 成人 在线观看国产| 色呦呦美女| 婷婷色情小说| 另类激情综合| 国产九九一区二区三区| 激情五月综合ì香亚洲| 天天操加勒比| 国产精品A片在线| 精品久久人妻热| 色综合九九| 国产亚洲在线观看| 日本视频99| 五月天久久综合婷婷丁香| 丁香激情五月天| 丁香五月婷婷Av| 国产日日操夜夜操的肉棒视频| 精品人妻一区二区三区四区不卡在| 96精品国产综合久久久久久| 丁香五月 综合| 日日噜噜夜夜狠狠久久丁香六月| 玖玖91| 99热精品10| 色五月丁香五月| se色综合网| 婷婷五月天成人影片| www.五月天| 婷婷综合色图| 能看的av| 狠狠插狠狠操| 无码人妻少妇色欲AV一区二区| 久久综合干| 婷婷在线视频| 成人午夜在线视频| 色99欧洲色19| A短视频免费在线观看| 天天综合久久| 亚洲人妻AV| 日本色99| 在线网黄| enecarbon-materials.com污K127封锁请涟系@wip1688 | 五月婷婷69| 9|人妻人人操| 五月婷婷黄色视频| 国产真人做爰视频免费| 琪琪理论片| 丁香五月天堂| 精品婷婷五| 日本色婷婷| 婷婷丁香69精华| 婷婷丁香五月亚洲17cao| 免费观看亚洲AV片| 97操在线视频| 丁香五月婷婷AV| 精品在线网站| 婷婷激情九月| 激情六月综合| 99在线er热| 婷婷激情五月综合| 五月天另类综合网| 激情内射人妻1区2区3区| 狠狠擼综合| 青青草伊人婷婷| 激情五月丁香激情综合网| 艳妇野外情欲放荡HD| 2023天天日夜夜爽| 婷婷狠狠综合网入口| 丁香五月激情鲁| 亚洲天堂碰碰婷婷| 久久思思热| 无码人妻激情| 九九热在线视频| 千人斩操逼| 久久免费少妇高潮99精品| 激情五月天激情综合网| 77777亚洲午夜久久| 91九色欧美| 99色在线观看| 欧美大肥婆大肥BBBBB| 99精品视频免费观看,| 五月天天综合网色婷婷| 五月天色区| 丁香六月婷婷综合激情欧美| 五月婷婷激情网| w婷婷五月婷婷w| 性色综合网| 亚洲在线操| 日本本土色网第一区| 成人αV视频免费观看| 激情五婷网| 色99自拍| 极品少妇高潮啪啪AV无码| 成人电影丁香六月天| 99热久久日本| 97色婷| 九九免费在线视频| www.久久久久久久久久久| 色五月琪琪| 亚洲爱爱无码婷婷色五月| 亚洲久艹| 天天插天天射| 婷婷情色激情| 超碰人人射| 国产在线网| 91丨九色丨熟女丰满| 丁香五月AV在线| 丁香五月婷婷综合激情啪啪啪| 久9精品视频| 精品99爱免费视频在线观看| 大香蕉久久婷婷| 婷婷五月花免费视频在线| 91人人妻人人操人人爽| 五月天啪啪| 婷婷5月九九| 欧美日韩成人| 丁香六月激情国产| 天天干电影| 激情五月丁香亭亭| 天干干夜夜操| 色情五月天丁香社区| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 婷婷五月天狠狠| 大香蕉啪啪啪| 综合日本婷婷| 亚洲操操| 九艹在线| 99热99热| 天天日天天狠狠操| 9999热在线观看| 无码免费人妻A片AAA毛片西瓜| 五月丁香色婷婷久久| 五月天激情日色在线| 久久婷婷成人| 亚洲成人av中文| 久久久久9| 欧美性爱五月天| 99精品无码网站| 97色色-99久久| 伊人玖玖网| 刘玥精品一区| 欧美人与性动交CCOO| 99九九热在线观看| 五月婷婷婷婷网| 五月天性色| 婷婷亚洲日本| 婷婷五月激情的图片| 9久9久9久女女女九九九一九| 日本久久99| 五月天激情影院| 热久久这里只有精品| 中文字幕乱轮| 天天综合永久| 五月色婷婷综合色| 久久综合激情| 五月丁香久人妻中文| 91精品国产综合久久蜜芽解析速度| 成人做爰黄A片免费看直播室男男| 五月丁香天堂网| 人人操插| 97九色视频| 丁香六月婷婷| 婷婷五月天堂| 开心激情网在线| 丁香五月激情综合啪啪| 色综合性视频| www好屌操| 五月色丁香婷婷中文字幕| 丁香五月婷婷综合视频| 欧美日韩99| 中文字幕在线日亚州9| 久久激情五月天| 亚欧州精品视频| 桃色激情五月天| 99热综合色图| 伊人久久大香线蕉av一区| 五月天另类图片区99| 色婷婷色| 91综合在线视频| 亚洲色色五月天| 2017人人操| 丁香五月婷婷AV| 婷婷五月AV| 中文字幕在线播放视频| 九久9精品| 可以免费观看的av网址| 天天爽在线视频| 五月丁香啪啪啪免费看| 国产99精品免费视频| 国产六月婷婷| 欧美Va在线| 色情五月停停丁香| 国产va视频| 热99精品视频五月| 综合色图区| 天天爽人人综合免费7799| 国产99热| aV欲望人妻中文字幕| 色九月国产| 在线播放中文字幕| 久久五月天色婷婷| 婷婷综合五月天激情| 久久机只有这里精品| A久网| www五月| 一起草av| 青草青草视频2免费观看| 五月丁香久久综合91| .comwww在线观看免费操| 9精品视频在线| 成人噜噜网| 天天插轮理| 色婷婷婷婷五月天| 91在线日| 欧美电影在线播放| 丁香av网| 欧美丁香五月97色| 婷婷久久视频| 《蜘蛛女》梁铮1995| 久久综合五月天| BBWCUCKOLD精品熟妇| 超爽内射| 久热9| 韩国久久少妇视屏| 久久 婷婷 五月天| 久久精品99国产精品日本| 婷色综合| 婷婷激情五月综合| 国产片色| 色婷天天| 中文字幕无码AV| 欧美性爱中文字幕| 亚洲激情淫网| 日日操日日撸| 久久性爱视频| 91干99| 俺来也综合网精品一区| 五月激情五月婷婷五月天在线| 8区视频在线| 日本色色色色色色色色一色二色| 亚洲成人网站在线| 五月丁香久久综合精品| 欧美Va婷色| 中文成人在线| 97精品自拍| 人人视频色| 天天日综合| 91精品综合久久久久久五月天| aaa丁香五月天| 婷婷丁香十月| 亚洲国产精品VA在线看黑人| 九九99热| 五月婷在线视频免费播放| 亚洲色综合| 久久久九九九 99| 另类综合激情| 九九五月天| 亚洲韩国日产综合AV| 丁香五月天天| 丁香五月激情啪| 婷婷丁香五月社区亚洲| 一区二区中文字幕| 外国碰视频网站97| 亚洲成人精品三区| 密臀久久| 久久综合九九| 最新日韩久热免费视频看看| 先锋资源 996| AA丁香综合激情| 精品牛仔裤超碰| 五月丁香婷婷激情视频| 国产精品久久久久久亚洲毛片| 色丁香五月天| 天天拍天天操| 艹色18p| 婷婷五月天熟妇| 欧美综合五月丁香六月婷| 五月天激情视频网站| 久久精品99国产精品日本| 色婷婷久久综合| 六月丁香色色| 亚洲无码你懂的| 五月婷婷在线观看| 99精品偷自拍| 婷婷成人综合免费视频| 五月天婷婷在线视频| 综合久久综合久久| 五夜丁香| 久久一级片| 五月丁香六月婷婷操操操| 综合久久激情久久| 日在线V视频在线播放| 97人人操人人干| 99热九九这里只有精品| 超碰在线人人| 天天综合网91| 色综合久久44| 亚洲午夜电影| 中文字幕人妻在线| AV色婷婷| 亚洲综合视频在线| 超碰免费大香蕉| 中文色婷婷| 亚洲无线视频| 五月色网| 97人人草| 五月天开心网| www.99热国产| 乱精品一区字幕二区| 五月丁香网站在线播放| 日本不卡高字幕在线2019| 99热精国产这里只有精品| 婷婷中文综合网| 泰州成人视频| 色欲九区|