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

ARTICLE DETAIL

資訊詳情

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

MRAM工業(yè)嵌入式存儲實戰(zhàn):MR25H40CDF與STM32F031C6驅動開發(fā)

MRAM工業(yè)嵌入式存儲實戰(zhàn):MR25H40CDF與STM32F031C6驅動開發(fā) 1. 為什么 MRAM 在工業(yè)嵌入式場景里越來越受關注1.1 從 EEPROM 和 Flash 的痛點說起做過工業(yè)設備的人大概都有過這樣的經(jīng)歷設備在現(xiàn)場跑了幾個月突然某天斷電重啟后參數(shù)全丟了或者日志文件寫壞導致整個文件系統(tǒng)掛掉。追根溯源問題往往出在存儲介質上。傳統(tǒng)方案里小容量參數(shù)存儲用 EEPROM大容量數(shù)據(jù)和代碼存儲用 NOR Flash 或 NAND Flash這套組合用了十幾年穩(wěn)定是穩(wěn)定但有幾個繞不開的硬傷。EEPROM 的寫入速度慢得讓人著急字節(jié)寫入典型值在 5ms 到 10ms 量級如果設備需要在掉電瞬間保存一批關鍵數(shù)據(jù)這個速度根本來不及。而且 EEPROM 的擦寫壽命雖然標稱 100 萬次但實際在高溫環(huán)境下會大幅縮水工業(yè)級 85℃ 場景下能到 10 萬次就算不錯了。NOR Flash 呢擦除必須按扇區(qū)來寫入前要先擦除擦除時間長而且擦寫壽命通常只有 10 萬次左右頻繁寫日志的場景下很快就到壽命上限。MRAMMagnetoresistive Random Access Memory磁性隨機存儲器的出現(xiàn)恰好把這些痛點一次性解決了。它的寫入速度是納秒級的和 SRAM 一個量級擦寫壽命理論上無限實測可以輕松做到 10^14 次以上非易失特性讓它斷電后數(shù)據(jù)不丟而且不需要擦除操作可以直接覆蓋寫。這幾個特性疊加在一起對于工業(yè)數(shù)據(jù)采集、參數(shù)存儲、掉電保護、日志記錄這些場景來說簡直是量身定做的。1.2 MR25H40CDF 這顆芯片到底強在哪MR25H40CDF 是 Everspin 出品的一款 4Mbit512KB容量的 SPI MRAM。我第一次拿到這顆芯片的規(guī)格書時最直觀的感受是它的接口設計非??酥啤獦藴?SPI 接口支持 Mode 0 和 Mode 3最高時鐘頻率 40MHz指令集和普通 SPI Flash 高度兼容基本上你原來怎么操作 W25Q 系列換成它只需要改幾個指令碼。但它的內在和 Flash 完全不同。MR25H40CDF 的存儲單元是磁性隧道結MTJ通過電子自旋方向來存儲數(shù)據(jù)而不是電荷。這意味著它沒有電荷泄漏問題不需要刷新寫入前不需要擦除寫入延遲極低。規(guī)格書上標稱的寫入周期時間是 35ns這個數(shù)字在 SPI 接口下會被總線速度限制但即便如此40MHz 時鐘下連續(xù)寫入的吞吐率也能達到 5MB/s 左右比 EEPROM 快了三個數(shù)量級。工作電壓范圍 2.7V 到 3.6V工業(yè)級溫度范圍 -40℃ 到 85℃部分批次可以做到 105℃。封裝是 8 引腳 SOIC 或者 DFN引腳定義和標準 SPI Flash 完全一致CS、SO、SI、SCK、VDD、VSS、WP、HOLD。WP 和 HOLD 引腳在 MRAM 里功能有所簡化但引腳位置兼容PCB 設計時可以直接替換 Flash 的焊盤。1.3 STM32F031C6 作為主控的適配性分析STM32F031C6 是 ST 的入門級 Cortex-M0 芯片48MHz 主頻32KB Flash4KB SRAM封裝是 LQFP48。選它來搭配 MR25H40CDF乍一看有點小馬拉大車的意思——4KB SRAM 的芯片去驅動 512KB 的存儲能行嗎實際用下來這個組合在工業(yè)場景里非常合理。STM32F031C6 自帶一個硬件 SPI 接口最高時鐘可以配置到 24MHzPCLK 48MHz 二分頻雖然跑不滿 MR25H40CDF 的 40MHz 上限但 24MHz 下連續(xù)讀寫的吞吐率也有 3MB/s對于參數(shù)存儲、日志緩沖、配置管理這些場景完全夠用。而且 F031C6 的功耗極低運行模式下約 100μA/MHz配合 MRAM 的微安級待機電流整個存儲子系統(tǒng)在電池供電的工業(yè)傳感器節(jié)點里可以做到很長的續(xù)航。更重要的是STM32F031C6 的 SPI 外設支持 DMA 請求雖然 M0 的 DMA 通道有限配合 MRAM 的連續(xù)讀寫特性可以實現(xiàn)零拷貝的數(shù)據(jù)流。我在一個振動采集項目里用 SPIDMA 把 MRAM 當作環(huán)形緩沖區(qū)ADC 采樣數(shù)據(jù)直接通過 DMA 寫入 MRAMCPU 幾乎不參與實測下來非常穩(wěn)。注意STM32F031C6 的 SPI1 默認引腳是 PA5(SCK)、PA6(MISO)、PA7(MOSI)片選需要自己用 GPIO 控制。硬件 NSS 在 M0 系列上有些坑建議直接用軟件片選后面會詳細說。2. 硬件設計從原理圖到 PCB 的實操細節(jié)2.1 引腳連接與電平匹配MR25H40CDF 和 STM32F031C6 都是 3.3V 供電電平直接匹配不需要電平轉換芯片。這一點比某些 1.8V 的 MRAM 型號省事很多。具體的引腳連接關系如下表MR25H40CDF 引腳功能STM32F031C6 引腳備注CS片選PA4 (GPIO)軟件控制低有效SCK時鐘PA5 (SPI1_SCK)24MHz 以內SO數(shù)據(jù)輸出PA6 (SPI1_MISO)推挽復用SI數(shù)據(jù)輸入PA7 (SPI1_MOSI)推挽復用WP寫保護接 VDD 或 GPIO不用時上拉HOLD保持接 VDD 或 GPIO不用時上拉VDD電源3.3V加 0.1μF 去耦VSS地GND單點接地這里有個細節(jié)值得展開說。WP 和 HOLD 引腳在 MR25H40CDF 上的行為和 Flash 不完全一樣。Flash 的 WP 引腳在特定指令下會鎖死狀態(tài)寄存器而 MRAM 的 WP 引腳功能更簡單主要是硬件級別的寫保護。如果你不需要硬件寫保護直接上拉到 VDD 就行。HOLD 引腳用于暫停 SPI 通信在多從機共享總線的場景下有用單從機場景直接上拉。我踩過的一個坑有一次為了省事把 WP 和 HOLD 懸空了結果在電機干擾比較大的環(huán)境里偶爾出現(xiàn)寫入數(shù)據(jù)錯亂。后來查了半天發(fā)現(xiàn)是懸空引腳拾取了噪聲導致芯片內部狀態(tài)機誤動作。所以這兩個引腳一定要處理要么上拉要么接 GPIO 控制千萬別懸空。2.2 PCB 布局布線的關鍵要點SPI 總線在 24MHz 下雖然不算高速信號但在工業(yè)環(huán)境里電磁干擾復雜PCB 布局還是不能太隨意。我總結了幾條實操經(jīng)驗第一MRAM 芯片盡量靠近 MCU 放置走線長度控制在 5cm 以內。SPI 的四根信號線SCK、MOSI、MISO、CS盡量等長尤其是 SCK 和 MOSI長度差不要超過 5mm。如果實在做不到等長優(yōu)先保證 SCK 走線短而直。第二SCK 走線要遠離模擬信號和電源開關節(jié)點。我在一個項目里把 SCK 走線從 DC-DC 電感旁邊穿過結果 SPI 通信誤碼率飆升。后來把 SCK 改道問題立刻消失。如果 PCB 空間受限可以在 SCK 和 GND 之間加一個 22Ω 的串聯(lián)電阻減緩邊沿速率降低輻射。第三去耦電容必須加而且要靠近芯片的 VDD 引腳。0.1μF 的陶瓷電容是標配如果電源紋波比較大再并聯(lián)一個 1μF 的。我習慣在 MRAM 的 VDD 和 GND 之間放一個 0.1μF 的 0402 電容距離引腳不超過 2mm。第四CS 信號線不要和其他信號線平行走太長距離。CS 是控制信號如果受到干擾產(chǎn)生毛刺會導致 SPI 狀態(tài)機誤判。可以在 CS 上拉一個 10kΩ 的電阻到 VDD保證空閑時電平穩(wěn)定。實操心得如果你用的是雙層板建議在 MRAM 芯片下方鋪一塊完整的地平面SPI 信號線走在頂層地平面在底層作為參考。這樣可以讓信號回流路徑最短減少電磁輻射。四層板的話把 SPI 信號走在內層上下都有地平面參考效果更好。2.3 電源設計與掉電保護工業(yè)場景里電源質量往往不太理想浪涌、跌落、紋波都是家常便飯。MRAM 雖然寫入速度快但如果電源在寫入過程中跌落數(shù)據(jù)仍然可能出錯。所以電源設計要留足余量。MR25H40CDF 的工作電壓范圍是 2.7V 到 3.6V典型值 3.3V。我一般會用一顆 LDO 單獨給 MRAM 供電比如 TPS7A4901 或者類似的低噪聲 LDO輸出 3.3V輸入從系統(tǒng)的 5V 或者 12V 降壓過來。LDO 的輸入端加一個 10μF 的鉭電容輸出端加 1μF 陶瓷電容加 0.1μF 高頻電容。如果系統(tǒng)有掉電保存的需求可以在 LDO 輸入端加一個大容量電容比如 1000μF配合一個電壓檢測電路。當檢測到輸入電壓跌落時MCU 立即觸發(fā) MRAM 寫入把關鍵數(shù)據(jù)保存下來。由于 MRAM 寫入速度極快1000μF 電容儲存的能量足夠完成幾百次寫入操作。我實測過一組數(shù)據(jù)在 3.3V 供電、1000μF 電容的條件下從檢測到掉電到電容電壓跌落到 2.7VMRAM 最低工作電壓大約有 15ms 的窗口時間。在這 15ms 內以 24MHz SPI 時鐘計算可以寫入大約 45KB 的數(shù)據(jù)。對于大多數(shù)參數(shù)保存場景這個窗口綽綽有余。3. 軟件驅動從寄存器操作到 HAL 庫封裝3.1 SPI 外設初始化與時鐘配置STM32F031C6 的 SPI1 掛在 APB2 總線上PCLK 默認 48MHz。要配置 SPI 時鐘為 24MHz需要設置分頻系數(shù)為 2。用 STM32CubeMX 配置的話步驟很直觀在 SPI1 的配置界面里Mode 選 Full-Duplex MasterHardware NSS Signal 選 DisablePrescaler 選 2 分頻Data Size 選 8bitCLK Polarity 選 LowCLK Phase 選 1 Edge也就是 SPI Mode 0。這里解釋一下為什么選 Mode 0。MR25H40CDF 支持 Mode 0 和 Mode 3兩者的區(qū)別在于時鐘空閑電平和采樣邊沿。Mode 0 是時鐘空閑低電平第一個邊沿上升沿采樣Mode 3 是時鐘空閑高電平第二個邊沿下降沿采樣。Mode 0 在大多數(shù) SPI Flash 和 MRAM 上是默認模式兼容性最好所以我一般優(yōu)先選 Mode 0。用 HAL 庫初始化的代碼大概長這樣SPI_HandleTypeDef hspi1; void SPI1_Init(void) { 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_2; hspi1.Init.FirstBit SPI_FIRSTBIT_MSB; hspi1.Init.TIMode SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial 7; if (HAL_SPI_Init(hspi1) ! HAL_OK) { Error_Handler(); } }片選引腳 PA4 配置為推挽輸出初始電平拉高void CS_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin GPIO_PIN_4; GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull GPIO_NOPULL; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, GPIO_InitStruct); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); }注意STM32F031C6 的 SPI1 在 HAL 庫里有幾個版本存在已知問題主要是 HAL_SPI_TransmitReceive 在高速下偶發(fā)超時。如果你遇到這個問題可以改用 LL 庫直接操作寄存器或者升級到最新的 HAL 版本。我實測 STM32CubeF0 的 1.11.0 版本 HAL 庫比較穩(wěn)定。3.2 MRAM 指令集解析與讀寫時序MR25H40CDF 的指令集和標準 SPI Flash 高度相似但簡化了不少。常用的指令碼如下表指令名稱指令碼功能說明WREN0x06寫使能寫入前必須發(fā)送WRDI0x04寫禁止RDSR0x05讀狀態(tài)寄存器WRSR0x01寫狀態(tài)寄存器READ0x03讀數(shù)據(jù)任意地址WRITE0x02寫數(shù)據(jù)任意地址RDID0x9F讀設備 ID和 Flash 最大的區(qū)別在于MRAM 沒有扇區(qū)擦除指令也沒有頁編程的概念。寫入操作就是直接發(fā) WRITE 指令然后跟 3 字節(jié)地址再跟數(shù)據(jù)數(shù)據(jù)可以連續(xù)寫地址自動遞增直到 CS 拉高。整個寫入過程不需要等待因為 MRAM 的寫入是即時的。讀操作的時序也很簡單CS 拉低發(fā)送 READ 指令0x03發(fā)送 3 字節(jié)地址然后時鐘繼續(xù)輸出MISO 上就會依次返回數(shù)據(jù)。地址自動遞增可以一直讀到 CS 拉高。寫操作的時序稍微復雜一點CS 拉低發(fā)送 WREN 指令0x06CS 拉高然后 CS 再拉低發(fā)送 WRITE 指令0x02發(fā)送 3 字節(jié)地址發(fā)送數(shù)據(jù)CS 拉高。注意 WREN 和 WRITE 之間必須拉高 CS這是 SPI Flash 和 MRAM 的通用規(guī)則目的是讓芯片內部狀態(tài)機識別到指令邊界。3.3 底層讀寫函數(shù)實現(xiàn)基于 HAL 庫我封裝了幾個底層函數(shù)。先看寫使能函數(shù)void MRAM_WriteEnable(void) { uint8_t cmd 0x06; MRAM_CS_LOW(); HAL_SPI_Transmit(hspi1, cmd, 1, 100); MRAM_CS_HIGH(); }讀狀態(tài)寄存器函數(shù)uint8_t MRAM_ReadStatus(void) { uint8_t cmd 0x05; uint8_t status 0; MRAM_CS_LOW(); HAL_SPI_Transmit(hspi1, cmd, 1, 100); HAL_SPI_Receive(hspi1, status, 1, 100); MRAM_CS_HIGH(); return status; }寫數(shù)據(jù)函數(shù)void MRAM_Write(uint32_t addr, uint8_t *data, 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, data, len, 1000); MRAM_CS_HIGH(); }讀數(shù)據(jù)函數(shù)void MRAM_Read(uint32_t addr, uint8_t *data, 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, data, len, 1000); MRAM_CS_HIGH(); }這幾個函數(shù)是驅動的基礎實際項目里我會再加一層封裝比如按結構體讀寫、帶 CRC 校驗的讀寫、環(huán)形緩沖區(qū)管理等。但底層這幾個函數(shù)必須保證穩(wěn)定可靠因為所有上層操作都依賴它們。實操心得HAL_SPI_Transmit 和 HAL_SPI_Receive 的超時參數(shù)不要設太小。我一開始設了 10ms結果在 24MHz 下連續(xù)寫 256 字節(jié)時偶爾超時。后來改成 1000ms問題消失。原因是 HAL 庫在傳輸過程中有循環(huán)等待如果中斷頻繁打斷實際耗時可能比理論值長很多。4. 數(shù)據(jù)管理策略讓 MRAM 發(fā)揮最大價值4.1 參數(shù)存儲的分區(qū)設計512KB 的 MRAM 看起來不大但在參數(shù)存儲場景里綽綽有余。我一般會把 MRAM 分成幾個區(qū)域來管理區(qū)域名稱起始地址大小用途系統(tǒng)參數(shù)區(qū)0x000004KB設備配置、校準參數(shù)用戶參數(shù)區(qū)0x010004KB用戶設置、偏好日志區(qū)0x02000256KB運行日志、事件記錄數(shù)據(jù)緩沖區(qū)0x42000252KB采集數(shù)據(jù)、掉電保護系統(tǒng)參數(shù)區(qū)和用戶參數(shù)區(qū)各留 4KB足夠存儲幾百個參數(shù)。日志區(qū)用環(huán)形緩沖區(qū)的方式管理寫滿后從頭覆蓋。數(shù)據(jù)緩沖區(qū)用于掉電保護平時可以當作普通 RAM 使用掉電時把關鍵數(shù)據(jù)寫進去。分區(qū)設計的好處是隔離性好日志寫壞了不會影響參數(shù)區(qū)參數(shù)區(qū)更新也不會干擾日志記錄。而且每個區(qū)域可以獨立做 CRC 校驗出問題時容易定位。4.2 掉電保護的數(shù)據(jù)完整性保障掉電保護是 MRAM 最核心的應用場景之一。我設計過一個方案實測在工業(yè)現(xiàn)場跑了兩年多沒有丟過一次數(shù)據(jù)。核心思路是雙備份CRC寫入確認。具體做法是每個參數(shù)塊存儲兩份地址 A 和地址 B。寫入時先寫 A讀回校驗 CRC確認無誤后再寫 B。讀取時先讀 ACRC 校驗通過就用 A否則讀 B。如果 A 和 B 都壞了才使用默認值。這個方案的關鍵在于寫入順序。必須先寫 A 再寫 B而且兩次寫入之間要有一個提交標志。我在每個參數(shù)塊前面加一個 4 字節(jié)的頭部包含一個序列號和一個狀態(tài)標志。寫入流程是讀取當前序列號加 1構造新數(shù)據(jù)塊頭部狀態(tài)標志設為寫入中寫入 A 區(qū)讀回 A 區(qū)校驗 CRC如果校驗通過把 A 區(qū)頭部狀態(tài)改為有效寫入 B 區(qū)重復步驟 3-5這樣即使在第 3 步到第 5 步之間掉電A 區(qū)的狀態(tài)標志還是寫入中讀取時會跳過 A 區(qū)使用 B 區(qū)的舊數(shù)據(jù)。數(shù)據(jù)完整性得到了保障。注意MRAM 的寫入雖然是即時的但 SPI 傳輸需要時間。在掉電窗口內要確保 SPI 傳輸能完成。我的做法是在檢測到掉電后立即把 SPI 時鐘降到最低比如 1MHz犧牲速度換穩(wěn)定性。1MHz 下寫 256 字節(jié)需要約 2ms1000μF 電容的 15ms 窗口完全夠用。4.3 日志系統(tǒng)的環(huán)形緩沖區(qū)實現(xiàn)日志區(qū)用環(huán)形緩沖區(qū)管理每個日志條目包含時間戳、事件類型、數(shù)據(jù)長度和 CRC。寫入時從當前寫指針位置開始寫滿后回到開頭覆蓋最舊的日志。環(huán)形緩沖區(qū)的關鍵參數(shù)是寫指針和讀指針。寫指針指向下一個可寫位置讀指針指向最舊的未讀日志。為了避免讀寫沖突我用了寫指針原子更新的策略每次寫入完成后才更新寫指針。這樣即使寫入過程中掉電寫指針仍然指向舊位置不會產(chǎn)生半截日志。日志條目的結構定義如下typedef struct { uint32_t timestamp; uint16_t event_type; uint8_t data_len; uint8_t reserved; uint8_t data[32]; uint16_t crc; } LogEntry_t;每個條目 44 字節(jié)256KB 的日志區(qū)可以存約 5800 條日志。對于大多數(shù)工業(yè)設備這個容量可以記錄幾個月的運行日志。讀取日志時從讀指針開始逐條讀取并校驗 CRC。如果 CRC 不通過說明這條日志寫壞了跳過繼續(xù)讀下一條。這樣可以保證即使有個別日志損壞也不會影響整體日志的讀取。5. 性能實測與優(yōu)化技巧5.1 讀寫速度實測數(shù)據(jù)我在 STM32F031C6 MR25H40CDF 的平臺上做了一組性能測試SPI 時鐘 24MHz測試結果如下操作類型數(shù)據(jù)量耗時吞吐率單字節(jié)寫1B2.1μs0.48MB/s連續(xù)寫256B92μs2.78MB/s連續(xù)寫4KB1.42ms2.88MB/s單字節(jié)讀1B1.8μs0.56MB/s連續(xù)讀256B88μs2.91MB/s連續(xù)讀4KB1.38ms2.97MB/s從數(shù)據(jù)可以看出連續(xù)讀寫的吞吐率接近 3MB/s已經(jīng)接近 24MHz SPI 的理論上限3MB/s。單字節(jié)操作的效率較低因為指令和地址開銷占了很大比例。所以實際使用中盡量批量讀寫減少單字節(jié)操作。5.2 DMA 加速與 CPU 占用率優(yōu)化在數(shù)據(jù)采集場景里CPU 需要同時處理 ADC 采樣、算法運算和存儲寫入。如果 SPI 寫入占用太多 CPU 時間會影響實時性。用 DMA 可以大幅降低 CPU 占用率。STM32F031C6 的 DMA 控制器有 5 個通道SPI1 的 TX 和 RX 各占一個。配置 DMA 后SPI 傳輸由 DMA 控制器接管CPU 只需要在傳輸完成后處理中斷即可。我實測過一組對比數(shù)據(jù)在 24MHz SPI 時鐘下連續(xù)寫入 4KB 數(shù)據(jù)輪詢方式 CPU 占用率約 85%DMA 方式 CPU 占用率約 12%。差距非常明顯。對于需要同時跑控制算法的場景DMA 幾乎是必選項。DMA 配置的代碼大概長這樣void SPI1_DMA_Init(void) { __HAL_RCC_DMA1_CLK_ENABLE(); hdma_spi1_tx.Instance DMA1_Channel3; hdma_spi1_tx.Init.Direction DMA_MEMORY_TO_PERIPH; hdma_spi1_tx.Init.PeriphInc DMA_PINC_DISABLE; hdma_spi1_tx.Init.MemInc DMA_MINC_ENABLE; hdma_spi1_tx.Init.PeriphDataAlignment DMA_PDATAALIGN_BYTE; hdma_spi1_tx.Init.MemDataAlignment DMA_MDATAALIGN_BYTE; hdma_spi1_tx.Init.Mode DMA_NORMAL; hdma_spi1_tx.Init.Priority DMA_PRIORITY_HIGH; HAL_DMA_Init(hdma_spi1_tx); __HAL_LINKDMA(hspi1, hdmatx, hdma_spi1_tx); }實操心得DMA 傳輸時CS 信號的控制要特別注意。HAL 庫的 HAL_SPI_Transmit_DMA 函數(shù)在傳輸完成后會觸發(fā)回調但 CS 的拉高時機需要自己控制。我一般會在 DMA 傳輸完成回調里拉高 CS確保數(shù)據(jù)全部發(fā)完。如果提前拉高 CS最后幾個字節(jié)可能丟失。5.3 低功耗場景下的存儲策略工業(yè)傳感器節(jié)點往往用電池供電功耗是核心指標。STM32F031C6 和 MR25H40CDF 都支持低功耗模式配合使用可以做到很低的平均功耗。STM32F031C6 的 Stop 模式電流約 1μAStandby 模式約 0.5μA。MR25H40CDF 的待機電流約 10μA讀寫電流約 5mA。所以策略是平時 MCU 進 Stop 模式MRAM 保持待機需要存儲時喚醒 MCU完成寫入后立即回到低功耗模式。我實測過一個數(shù)據(jù)采集節(jié)點的功耗每 10 秒采集一次數(shù)據(jù)寫入 MRAM然后休眠。平均電流約 15μA用 2000mAh 的鋰電池可以跑 15 年以上。當然實際中還有傳感器和其他外設的功耗但存儲子系統(tǒng)的功耗已經(jīng)可以忽略不計了。低功耗場景下有個細節(jié)要注意MRAM 的 CS 引腳在 MCU 休眠時要保持高電平否則 MRAM 可能進入異常狀態(tài)。我一般會在 CS 上加一個 100kΩ 的上拉電阻確保 MCU 引腳高阻時 CS 仍然為高。6. 常見問題排查與避坑指南6.1 SPI 通信失敗的問題定位SPI 通信失敗是最常見的問題表現(xiàn)是讀不到數(shù)據(jù)、讀到的數(shù)據(jù)全是 0xFF 或 0x00、寫入后讀回不一致等。排查思路可以按以下順序進行第一步檢查硬件連接。用萬用表量一下 CS、SCK、MOSI、MISO 四根線的通斷確認沒有虛焊。然后量一下 MRAM 的 VDD 引腳確認供電正常。這一步看似簡單但我遇到過好幾次問題都是因為 VDD 虛焊。第二步用示波器看波形。CS 拉低時SCK 應該有 8 個或更多時鐘脈沖。如果 SCK 沒有波形說明 SPI 外設沒配置好。如果 SCK 有波形但 MISO 一直是高電平說明 MRAM 沒有響應可能是 CS 沒拉低或者 MRAM 損壞。第三步讀設備 ID。MR25H40CDF 的 RDID 指令0x9F會返回一個 3 字節(jié)的 ID正常應該是 0xE5 0x40 0x13 之類的值。如果讀不到正確的 ID說明底層通信有問題先別急著調上層邏輯。第四步檢查 SPI 模式。MRAM 支持 Mode 0 和 Mode 3如果 MCU 配置成 Mode 1 或 Mode 2通信會失敗。這個坑我踩過當時調了半天最后發(fā)現(xiàn)是 CubeMX 里 CLK Phase 選錯了。6.2 數(shù)據(jù)寫入后讀回不一致的排查寫入后讀回不一致可能的原因有幾個一是寫使能沒有正確發(fā)送。MRAM 每次寫入前必須發(fā) WREN 指令如果 WREN 發(fā)送失敗或者被中斷打斷寫入操作會被忽略。排查方法是寫完后讀狀態(tài)寄存器看 WEL 位是否被清零。二是 CS 時序不對。WREN 和 WRITE 之間必須拉高 CS如果 CS 一直保持低電平MRAM 會把 WREN 和 WRITE 當作一個連續(xù)指令導致寫入失敗。這個細節(jié)在規(guī)格書里有明確說明但很容易被忽略。三是電源干擾。在電機、繼電器等大功率設備附近電源紋波可能導致 MRAM 寫入出錯。解決方法是在 MRAM 的 VDD 和 GND 之間加一個 0.1μF 加 1μF 的電容組合必要時再加一個磁珠隔離。四是 SPI 時鐘太快。雖然 MR25H40CDF 標稱支持 40MHz但在實際 PCB 上走線長度、負載電容等因素會影響信號完整性。如果 24MHz 下不穩(wěn)定可以降到 12MHz 試試。我有個項目因為 PCB 走線太長最后降到 8MHz 才穩(wěn)定。6.3 常見問題速查表現(xiàn)象可能原因排查方法解決方案讀不到設備 IDSPI 模式錯誤檢查 CLK Polarity/Phase改為 Mode 0讀到的數(shù)據(jù)全 0xFFMISO 未連接量 MISO 通斷重新焊接寫入后讀回不一致WREN 未發(fā)送讀狀態(tài)寄存器 WEL 位確保 WREN 后 CS 拉高偶發(fā)數(shù)據(jù)錯亂電源干擾示波器看 VDD 紋波加去耦電容高速下通信失敗信號完整性差降低 SPI 時鐘測試降頻或改 PCBCS 拉低無響應CS 引腳配置錯誤量 CS 電平改為推挽輸出寫入超時HAL 庫超時設置太短增大超時參數(shù)改為 1000ms避坑技巧如果你在調試時實在找不到問題可以先用一個簡單的 GPIO 模擬 SPI 時序逐位發(fā)送指令用示波器觀察每一位的波形。這樣可以排除 SPI 外設配置的問題快速定位是硬件還是軟件的問題。我每次遇到疑難雜癥最后都是用這招解決的。7. 項目實戰(zhàn)工業(yè)數(shù)據(jù)采集器的存儲方案7.1 需求分析與方案設計我接手過一個工業(yè)振動采集器的項目需求是每 1ms 采集一次三軸加速度數(shù)據(jù)每次 6 字節(jié)連續(xù)采集 10 分鐘數(shù)據(jù)不能丟。算一下數(shù)據(jù)量1ms 一次10 分鐘是 600 秒總共 60 萬次采樣每次 6 字節(jié)總共 3.6MB。MRAM 只有 512KB存不下全部數(shù)據(jù)。所以方案要分兩級MRAM 作為一級緩沖存最近的數(shù)據(jù)外部 SD 卡或者大容量 Flash 作為二級存儲定期把 MRAM 里的數(shù)據(jù)轉存過去。MRAM 的作用是削峰填谷在 SD 卡寫入的間隙緩存數(shù)據(jù)保證不丟采樣點。具體設計是MRAM 分成兩個 256KB 的緩沖區(qū)交替使用。當緩沖區(qū) A 寫滿時切換 to 緩沖區(qū) B同時把 A 的數(shù)據(jù)通過 DMA 轉存到 SD 卡。SD 卡寫入速度約 2MB/s256KB 需要 128ms。在這 128ms 內緩沖區(qū) B 可以繼續(xù)接收數(shù)據(jù)不會丟點。7.2 關鍵代碼實現(xiàn)與調試過程數(shù)據(jù)采集用 ADC DMA 定時器觸發(fā)采樣數(shù)據(jù)直接通過 DMA 寫入 MRAM 的緩沖區(qū)。核心代碼是 MRAM 的 DMA 寫入函數(shù)void MRAM_Write_DMA(uint32_t addr, uint8_t *data, uint16_t len, void (*callback)(void)) { 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_DMA(hspi1, data, len); // 在 DMA 完成回調里拉高 CS 并調用 callback }調試過程中遇到的最大問題是 DMA 傳輸和 CS 控制的時序配合。HAL 庫的 DMA 完成回調是在傳輸結束后觸發(fā)的但 SPI 的最后一個字節(jié)可能還在移位寄存器里。如果立即拉高 CS最后一個字節(jié)會丟失。解決方法是在 DMA 完成回調里先等 1μs再拉高 CS。這個 1μs 的延時看起來不起眼但少了它數(shù)據(jù)就是錯的。另一個問題是緩沖區(qū)切換的原子性。如果切換過程中來了中斷可能導致數(shù)據(jù)寫到錯誤的緩沖區(qū)。我的做法是在切換時關中斷切換完成后立即開中斷。關中斷的時間只有幾個時鐘周期不會影響其他中斷的響應。7.3 實測結果與長期運行穩(wěn)定性這個方案在實際現(xiàn)場跑了半年多采集了上千組數(shù)據(jù)沒有丟過一個采樣點。MRAM 的寫入速度完全跟得上 1ms 的采樣周期SD 卡轉存也沒有成為瓶頸。長期運行下來MRAM 的穩(wěn)定性非常好。我特意做了個測試連續(xù)寫入 100 萬次讀回校驗全部通過。規(guī)格書標稱的 10^14 次擦寫壽命在實際使用中根本用不完。按每天寫入 100 萬次計算可以用 270 年。溫度方面設備工作在 -20℃ 到 60℃ 的環(huán)境里MRAM 的數(shù)據(jù)保持能力沒有出現(xiàn)任何問題。我做過高低溫循環(huán)測試-40℃ 到 85℃ 循環(huán) 100 次數(shù)據(jù)依然完好。8. 選型對比與方案擴展8.1 MRAM vs FRAM vs EEPROM vs Flash在工業(yè)存儲方案里MRAM 不是唯一的選擇。FRAM鐵電存儲器也是非易失、高速、高壽命的存儲介質。我把幾種方案放在一起對比特性MRAMFRAMEEPROMNOR Flash寫入速度納秒級納秒級毫秒級毫秒級擦寫壽命10^1410^1410^610^5寫入前擦除不需要不需要不需要需要容量最大 16Mb最大 4Mb最大 2Mb最大 1Gb功耗中低中高成本高中低低溫度范圍-40~105℃-40~85℃-40~85℃-40~85℃從對比可以看出MRAM 的優(yōu)勢在于容量比 FRAM 大、溫度范圍更寬劣勢是成本較高。FRAM 在低功耗場景下更有優(yōu)勢但容量受限。EEPROM 和 Flash 適合對成本敏感、寫入頻率不高的場景。選型的核心邏輯是如果寫入頻繁、要求高可靠性、容量需求在 512KB 以內MRAM 是最優(yōu)解。如果功耗極其敏感、容量需求小FRAM 更合適。如果只是存?zhèn)€配置參數(shù)、寫入次數(shù)不多EEPROM 就夠了。8.2 從單機存儲到分布式存儲的擴展思路單個 MRAM 的容量有限如果項目需要更大的存儲空間可以考慮多片 MRAM 級聯(lián)。MR25H40CDF 支持 SPI 總線共享用不同的 CS 引腳選擇不同的芯片。STM32F031C6 的 GPIO 足夠驅動 4 到 8 片 MRAM總容量可以擴展到 2MB 到 4MB。多片級聯(lián)的軟件設計需要一個地址映射層。上層應用調用統(tǒng)一的讀寫接口底層根據(jù)地址范圍選擇對應的 CS 和芯片。這樣上層代碼不需要關心具體有幾片 MRAM擴展起來很方便。如果還需要更大容量可以考慮 MRAM SD 卡的混合方案。MRAM 作為高速緩存SD 卡作為大容量存儲。數(shù)據(jù)先寫入 MRAM再批量轉存到 SD 卡。這樣既保證了寫入速度又滿足了容量需求。擴展思路MRAM 的另一個有趣應用是做內存鏡像。在系統(tǒng)運行時把關鍵變量同時存在 SRAM 和 MRAM 里。掉電后重啟從 MRAM 恢復變量值實現(xiàn)斷電續(xù)跑。這個方案在工業(yè)控制器的狀態(tài)保持場景里非常有用我后續(xù)會單獨寫一篇來展開。9. 寫在最后的一些實操體會這個組合我用了兩年多從最初的評估板到量產(chǎn)產(chǎn)品踩過的坑不算少但整體來說 MR25H40CDF STM32F031C6 是一套非??煽康拇鎯Ψ桨浮H绻阏谶x型工業(yè)嵌入式項目的存儲介質我建議先拿幾片樣品在真實環(huán)境里跑一跑特別是高低溫循環(huán)和電源波動測試這兩項最能暴露問題。有個細節(jié)我一開始沒注意MRAM 的 CS 引腳在 PCB 上最好串聯(lián)一個 22Ω 的電阻。這個電阻可以抑制信號反射在長走線或者多從機場景下特別有用。我有個項目因為 CS 走線太長加了電阻之后通信穩(wěn)定性明顯提升。另外MRAM 的寫入雖然不需要擦除但并不意味著可以無限制地隨意寫。雖然壽命是 10^14 次但如果你的應用每秒寫幾萬次幾年下來也會接近上限。所以日志系統(tǒng)還是建議用環(huán)形緩沖區(qū)避免對同一地址反復寫入。最后說個成本相關的事。MR25H40CDF 的價格比同容量的 SPI Flash 貴不少批量采購的話大概是 Flash 的 5 到 8 倍。所以選型時要算清楚賬如果只是存配置參數(shù)一年寫不了幾次用 Flash 就夠了如果是高頻寫入、掉電保護、高可靠性場景MRAM 多出來的成本是值得的。我一般會建議客戶在關鍵數(shù)據(jù)存儲上用 MRAM非關鍵數(shù)據(jù)用 Flash混合方案性價比最高。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
激情五月婷婷| 色5月婷婷| 亚洲丁香五月美女| 99玖玖人人| 99热资源在线| 狠狠操狠狠爱| 伊人久久婷婷五月天激情四射| 欧美日韩中文国产一区发布| WWW.婷婷| 91狠狠综合久久久| 五月婷色丁香| 丁香五月婷婷网| 激情小说五月丁香在线视频观看视频| 国产亚洲成人综合| 激情第四色| 有哪些A片网站| 亚洲免费观看高清完整版AV线| 9热视频在线观看| 五月丁香婷色| 五月婷在线影院| 九九伊人网| 人人人va亚洲视频在线| 婷婷综合欧美| 久久婷婷丁香| 国产亚洲成人综合| 国产视频色色色色色色色| 很很干夜夜干| 日韩按摩二区| 天天草天天舔| 玖玖在线视频| 操日本三片99| 九九99精品免费播放| 成人AV中文字幕| 七七九九色色| 97干视频| 久久久jd| 人妻中文字幕网| 99精品热| A久久| 能直接看的AV网站| 狠狠狠激情网| 六月伊人婷婷| 国产精品色情AAAAA片软件| 亚洲激情五月| 思思re99视频在线观看| 欧美婷婷五月天综合| 另类视频一区| 婷婷五月丁香六月| 伊人色综合影院视频| 免费色婷婷| 九九热免费视频| 五月丁香六月婷婷激情网| 亚州激情网站无码| 五月丁香直播| 激情五月婷婷啪啪| 亚洲综合丁香五月| 人人干AV| 五月婷婷精品无在线| 亚洲精品久久久久AV无码| 亚洲综合99| 亚洲六月色| 九九热在线观看6| 亚洲另类AV| 国产精品色情AAAAA片软件| 九九99精品| 亚洲国产99| 翔田千里无码| 五月丁香无码| 中文在线视频久1| 26UUU亚洲欧美| 热99精品视频在线观看| 欧类av怡春院| 丁香五月亚洲综合丝袜| 久草 tingting| 国产成人精品亚洲线观看| 日本五月婷| 色五月婷婷基地| 综合噜噜| 99精品热视频| 久久ab| www热久久yy9| 日韩操啪| 丁香五月婷婷av| 日都一级A片| 久久综合九色综合88i| 任你弄在线视频免费| 刘玥av在线| 99在线视频。| 九九热自拍| 9 1超碰九色| 婷婷大香蕉| 婷婷五月天AV网| 九九色综合| 色色婷| 亚洲性受XXXX五月丁香| 亚洲国产精品成人va在线观看| 色国产五月| 欧洲综合色| 色婷婷小说| 天天肏高清在线| 五月天婷婷爱| WWW.国产| 97色女人在线| 人人操Av| 噜噜国产| 99综合| 五月丁香婷婷久久| www.99热| 欧美亚洲色色色色| av一区二区电影免费在线观看| 爱iii做iiii日| 午夜福利8055| 精品婷婷五月天| 国产日日操夜夜操的肉棒视频| 色五月婷婷在线观看| 99超级碰碰| 九九热这里| 国产古装妇女野外A片| 色九九中文字幕| 色欧美一级| 五月天婷婷狂暴白浆| 九九热婷婷| 婷婷五月丁香综合亚洲| 激情五月综合亚洲另类| 久婷婷视平| 久七香蕉| 色五月丁香五月婷婷五月成人网| 丁香桃色网| 大香蕉久久综合网| 色婷婷丁香六月| 亚洲VA口| 九九热精品99| 五月婷性爱| 亚洲av综合网| 亚洲激情婷婷| 九九99九九精品免费| 九月婷婷综合在线| 久久与婷婷| 色色射| 少妇综合网| 亚洲激情四射色| 99er热精品视频| 国产亚洲精品人人| 婷婷丁香六月| 91大操| 激情久久久久久| 无码天天操| 五月丁香六月婷| 日本va欧美va国产激情| 《久久综合九色综合97婷婷| 激情婷婷五月丁香啪啪啪| 性爱人人网| 六月婷婷激情| 99热碰碰| 婷久久综合| 亚洲五月天,激情视频| 丁香五月婷婷综合网| 婷婷五月天AV| 69人人操人人爽| 欧洲MV日韩MV国产| 成人片在线播放| 人人爱国产| 狠狠婷婷色| 亚州欧美国产久精国产99综合视频| 五月婷婷av| 综合色在线| 天天肏屄夜夜爽| 激情五月天啪啪| 东京热人妻一区二区三区在线| 五月情四婷婷| 开心色色五月天综合| 色五月丁香五月五月婷婷| 婷婷中文在线| 99热99热在线观看| 97久久人人人干| 亚洲精品操一操、噜一噜、摸一摸、爽 | 成人婷婷色五月天| 婷婷五月色| 好好干Av| 99久在线精品99re8| 丁香五月婷婷亚洲色图| 综合久久97| 2016日日夜夜操| 五月天啪啪啪| 丁香大香蕉| 9久热在线视频精品| 日韩在线视频9色| 涩涩网五月天| 婷婷丁香视频| 欧美激情综合| 六月伊人婷婷| 综合久久8| 五月天综合视频| 激情五月天。| 99熟女啪啪视频| 大香蕉七区| 激情综合网激情五月天| 啪啪综合| 激情综合五月| 激情婷婷狠狠干| 在线五月婷| 天天综合中文| 香蕉综合网| 少妇性BBB搡BBB爽爽爽电影| 夜夜做天天爽| 丁香五月天激情四射网| 久久五月天色婷婷| 婷婷激情五月综合基地| 色五月自偷自拍婷婷婷婷| 天天婷婷综合亚洲亚洲| 丁香五月天信号| 桃色五月婷婷| 超碰人人艹| 亚洲xx网| 538在线精品| 激情综合六月| 99国产99| 亚洲网站999| 色九月婷婷综合| 九月激情网| 超碰免费在线| www.金莲av| www.亭亭五月天| 色伦专区97中文字幕| 精品一区二区三区四区五区六区介绍 | 9999热在线观看| 五月婷婷丁香俺日污视频| 激情AV中文| 久久久人妻| 91丨九色丨熟女|新版| 九月丁香婷婷| 五月婷婷视频28| 2021日韩无码| 五月婷婷激情综合| 久久久这里有精品| 丁香六月在线综合| 五月婷婷无码专区| 综合久久高清| 另类激情综合| 激情网开心网| 六月婷婷久久| 超碰成人黄色网| 99久久玖玖| 五月婷啪| 九九色插| 婷婷在线视频| 亚洲欧美999| 天天激情综合| 亚洲综合网区| 天天爽爽日日做做| 中文字幕在线日亚州9| 久久综合66| 97福利视频| 五月天最新网| 丁香五月婷婷在线观看| 色色网五月激情| 性色播| 123草逼网| 97色综合视频| ww超碰在线| 亚洲午夜国产成人电影VA国产欧…| 欧美槡BBBB槡BBB少妇| 日日爽日日| 丁香五月电影| 搡BBBB搡BBB搡五十| 在线播放成人网站| 夜夜操天天干| 六月色婷婷| 精品激情| 开心五月网| 99自拍网| 色色色色色网| 九九无码| 波多野结衣不卡AV| 丁香激情五月天| 97超级碰| 色五月婷婷天堂| 91久久婷婷| 五月停停色色丁香| 久大香蕉| www.激情| WW婷婷五月天com| 99精品国产在热久久| 依人大香蕉| 久热九九| 日本视频久久| 综合久久五| 内射 无码 伊人| 国产在线激情视频| 五月丁香最新| 婷婷亚洲影院| 丁香五月激情澎湃一区| 婷婷五月天综合中文| 伊人网色婷婷五月天| 99色爱| 婷婷五月六月激情| 9久久久久| 欧美丁香婷婷五月| 99视频啪啪| 婷婷国产欧美97| 色噜噜狠狠色综合无码久久欧美| 五月天俺去也| 久久激情视频| AAA久久久AAA久久久AAA| 五月丁香啪啪网| 先锋资源 996| 激情九月婷婷| 超碰A V在线| 91久久久久久| 高清无码网址| 999热视频精品99免费在线| 天堂综合久久| 激情丁香五月婷婷啪啪| 婷婷五月天色色| 亚洲一二三网| 五月天成人在线视频丁香| 天天天天天天操| 色99色| 久久婷婷五月综合色丁香| 性爱先锋AV| 六月合五月婷| 青青草大香| 9999久久久久| 五月婷婷啪啪啪| 国产成人综合电影| 99热在这里只有免费精品| 狠狠操天天干| 97超碰在线观看免费| www.天天干.com| 日日夜夜干| 亚洲色色色色色色色色色| 久久婷婷五月丁香网| 激情小说婷婷小说| 中文AV网站| 色狠狠色| 操逼亚洲天堂| 亚洲不卡欧洲| 99综合一区| 99色视频在线| 久久久免费图片视频| 久久3p| 成人精品在线观看| 天堂久久性| 99久久免费性爱视频`| 综合色色色| 东京热五月婷婷| 激情婷婷五月女| 思思99久久| 久久五月热| VA婷婷亚洲| 亚洲无AV在线中文字幕| 99极品视频| 欧洲色| 9久久久久| 91青娱乐青青草| 中文不卡一二区| 国产成人精品123区免费视频| 中文无码婷婷| 俺去也婷婷| 久久婷婷网| 干一干xxxx| 婷婷五月中文字幕| 日本美女上人| 成人AV免费观看| 亚洲六月色婷婷| 操人久久| 深爱激情丁香| 婷婷丁香六月影视| 伊人九九68| 五月丁香激情在线| 大香AV| 婷婷久久丁香五月| 激情综合五月激情| 99热综合在线观看| 久久免费操| 午夜成人天堂久久无码日韩久久| 夜夜夜夜夜操| 六月丁香婷婷网| 五月丁香婷婷成人网| 亚洲精品色色色| 日本波多野结衣视频| 五月婷婷欲色| 欧美激情中文字幕| 色九月婷婷| 久久五月天激情视频| 婷婷大香焦| 色五月婷婷色五月| 婷婷色婷婷| 狠狠操狠狠| 婷婷日日天天| 97九色视频| 五月丁香成人网| 九九AV| 天天干、天天日日| 色色丁香五月天| 欧美日韩999| 婷婷丁香五月欧美人| 久久九九经典| 色综合天天| 激情小说 五月天| 五月婷免费视频| 99热国产这里只有精品| 天天插AV丝袜中| 五月天婷婷影院| 99热热热99精品婷婷| 色 色 色综合com| 97热视频| 禁片二区| 综合久久婷婷| 综合性爱网| 午夜理论片最新午夜理论剧 | 精品五月天| 丁香六月婷婷开心| 991自拍视频| 激情六月综合| 狠狠狠狠狠狠| 夜夜爽天天日| 丁香五月天欧洲在线| 欧美三级视频| 国产乱人偷精品人妻A片| 婷婷五月天天天| 天天日夜夜B久久| 五月丁香人妻| 色亭亭九月| 青草五月天| 伊人五月天在线| 99热国产这里只有| 精品久久99码| 天天天天爽爽天干| 伊人综合网4| 五月丁香性爱| 婷婷大乡焦噜噜| 色综合久久之分久久| 色五月色五天色情网| 亚洲综合狠狠艹| 九月丁香婷婷综合激情| 婷婷五月AV| 怡春院天天干| 欧美十二区| 这里只有精品久久| 99免费在线| 久久婷婷亚洲| 99性爱视频| 色五月丁香五月婷婷五月成人网| 久久成人综合五月天| 色婷婷久久| 射区导航| 91丨九色丨熟女丰满| 影院久久久| 超pen个人视频97| 久久小视频| 综合久久高清| 婷婷亚洲影院| 色色A| 日本五月婷| 中文字幕,综合,91| XX色综合| 激情五月天色播| 五月丁香黄色视频| 特级西西4444www无码| 26uuu亚洲精品国产| 六月婷婷激情小说网| 九九热视频免费观看| 婷婷激情五月天在线视频| 日本精品在线噜噜噜| 色婷五月天| 丁香五月欧美激情| 色九月婷婷| 久久女婷| 丁香五月天人体| 色必久悠悠影院| 插插插色综合网| 国产寻花在线| 四色AVwww| 五月丁香六月欧美综合网站| 婷婷成人AV| 六月丁香中文字幕| 自拍偷窥99热| 丁香婷婷人妻综合网| 丁香五月婷婷精品视频| 五月婷婷亚洲| 激情综合无码| 99国产精品久久久久久久久久久 | 婷婷综合网| 五月色婷| 中文字幕有多少字| 久久一伦| 丁香五月在线人妻| 久色网五月| 天天插综合网| 天天日天天操心| 99久久国产宗和精品1上映| 婷婷欠久少妇| 91AV婷婷| 丁香亚洲婷婷五月| 97亚洲婷婷| 五月丁香免费看| 欧美成人AAA片一区国产精品| 色五月丁香A欧美com| 久久九九Com| 色一情一乱一乱一区9| 六月婷久久| 婷婷丁香视频在线观看免费| 99成人免费热视频| 99在线观看精品视频| 不卡的AV网站| 91成人视频| 婷婷 激情 五月| 日本色爽| 久久婷婷五月综合色欧美| 4438成人电影| 99亚洲大片精品永久在线观看 | 色优久久| 啪啪色激情五月天| 激情婷婷内射| 日韩在线观看亚洲| 五月丁香婷婷欧美色图视频五月丁香777电影 | 婷婷五月天色| 五月天婷婷激情综合| 九九婷婷网五月天| 婷婷色基地在线看| tingtingzonghewang| 五月天丁香| 少妇性BBB搡BBB爽爽爽视頻| 97干视频| 五月婷婷激情综合av| 激情五月综合网| 黄色91在线观看| 五月丁香综合| 9视频1在线| www.天天干.com| 丁香五月婷婷五月天| 欧美电影在线播放| 久er免费视频| 色色五月天丁香| 婷婷五月激情基地| 五月婷色丁香| 99成人| 丁香六月色婷婷| 丁香五月天AV| 91a片爽| 插插插丁香五月婷婷| AV在线免费网站| 色五月激情图片| 色婷婷国色天香综合| 久久99精品九九久久久婷婷| 欧美日韩国产伦精品日韩人妻一| 成人视频婷婷| 日韩AV在线电影| 亚洲中文乱字字幕线在永久| 日本人妻伦在线中文字幕| 丁香五月自拍| 亚洲中文字幕av| 日亚二欧美| 激情六月丁| 97亚洲精品| 婷婷精品在线| 久久久天堂国产精品女人| 五月天婷婷日日爱| 成人精品在线| 九九免费精品在线视频| 五月天精品| WWW丁香五月| 婷婷丁香人妻天天爽| 性爱网五月天| 狠狠色婷婷777| 久久久99视频| 五月婷婷在线免费观看| 国产99热在线看| 久久综合五月| 密臀久久| 婷婷激情久久| 五月天狠狠网| 日本一级特黄大片AAAAA级| 五月丁香色综合| 超碰无码318604| www.色婷婷.com| 亚洲无线视频| 五月丁香六月婷| 一个色的综合| 久久婷婷五月综合色和| 日本美女五月天| 五月婷啪啪| 五月婷亚洲精品AV天堂| 狠狠做六月爱婷婷综合aⅴ| 婷婷五月激情六月丁香| 欧美日韩精品人妻狠狠躁免费视频| 久色视频首页| 99热黄| 国产亚洲色婷婷久久99精品91| 五月天天综合| www.激情五月| 五月婷婷我| 小泽玛利亚视频一区二区| 亚洲熟女色| 色婷五月婷婷| 婷婷伊人综合| 久婷婷| 婷婷黄色五月天在线视频| 色婷网站| 婷婷操久久| 无码网| 九 九九九AV| 中文AV在线观看| 第2色五月婷| 97人人妻人人艹| XX久久| 婷婷区日本| 色婷婷成人久久| 婷婷五月激情五月激情| 天堂AV在线看| www久久久| 思思9久久| 九九热免费视频| 五月丁香久久综合| 婷婷人妻激情| 亚洲V国产V欧美V久久久久久| 婷婷金品综合视频| 99热国产这里只有| 亚洲人妻Av| 色五月激情五月| 亚洲综合色网| 久久视频九九视频| 国产精品大香蕉| 99re资源在线视频导航| 五月亭亭开心网| 九九九九这里只有精品| 色欲婷婷夜夜| 超碰免费99| 好吊操这里只有精品| 色综合av超碰| 色日本颜射| 日韩欧美一级大黄网站| 色屌丝中文字幕| 日本色婷婷五月天成人电影| www.久久爱.com| 激情98色婷婷五| 欧洲色| 五月天婷婷综合网| 九热视频| 性色99| 久久亚洲婷婷综合色五月| 色色色区| 六月婷婷视频| 野外99热| 天天色五月婷婷91久久久久久久| 天天射影院| 丁香五月天色婷婷| 六月丁香啪啪啪| 丁香五月激情啪啪| www色中色综合| 天天噜天天爱| 狠狠艹狠狠艹| 99国产er热视频| 成人在线不卡| 久久婷婷国产| 97精品在线| 婷婷色吧| 色欧美影院| 99热69| 人人看人人97| www热久久yy9| 在线视频99| 无码橾| 婷婷综合一二三| 日本久久9| 中文字幕不卡视频| 超碰中文字幕在线| 丁香五月综合首页| 99超级碰碰| 91人人超碰在线| 狠狠色噜噜狠狠| 九九精品热播| 色五月天激情| 女性自慰系列第五页| 草综合网| 五月婷婷六月丁香综合视频在线| 丁香婷婷五月份| 欧美三级巜人妻互换| 内射干少妇亚洲69XXX| 人妻丰满精品一区二区A片| 办公室少妇激情呻吟A片在线观看| 久久婷婷精品| av免费在线看不卡无毒| 九月色婷婷婷| 97九色视频| 99啪啪视频| 九九热视频精品2| 青青草a在线| 深爱丁香激情| 一丁香五月天月AV| 国产成人网| 日日夜夜天天| 狠狠色狠狠色综合日日91| 99久久.www| 综合色色婷婷| 五月丁香激情综合欧美| 综合五月丁香六月婷婷| 啪啪婷婷五月天激情| 天天干天天操天天拍| 欧美电影在线播放| www.久久色.com| 91超级碰在线视频| 五月色 亚洲| 天天激情站| 日本在线视频播放91| 天天日天天干天天操| 五月综合激情久久| 精品牛仔裤超碰| 安息电影在线观看完整版| 激情网婷婷婷| 色欲久久综合| av中文字幕免费观看| 亚洲av无码精品色午夜| 婷婷五月丁香影院| 色婷婷五月综合| 五月天另类激情在线| 亚洲天堂色| 亚洲精品99| 性生活久久人妻| 日韩欧美一级大黄网站| 色色综合网www| 色色色综合色| 伊人9999| 亚洲人妻av| 99无码精品| 色播五月天激情| 五月天怕怕| 婷婷丁香午夜综合影视| 久久五月婷婷丁香| 久cao香蕉影院| 人妻22p| 曰日爽日日操| 熟女少妇内射日韩亚洲| 人人操99| 久久丁香综合| 91丨九色丨首页| 中文精品久久久久人妻不| 天天插天天爽| AV大片在线播放| 永久无码色| 可以免费观看的AV| 69热91天堂| 91操色| 婷婷在线精品| 性色av大香综合| 99久久免费精品| 偷偷与邻居做爰完整视频| 99热老司机| 天天舔天天爽| 亚洲a片免费观看| 五月色无码| 婷婷免费视频| 无码人妻激情| 五月婷婷深深爱| 操比激情五月| 婷婷五月花西瓜| 日本无码专区| 五月天三级| 色情综合| 99视频这里只有免费精品| 人人妻人人澡| 大香蕉久热| 另类小说色婷婷| 婷婷久久在线| 韩国激情五月天综合网| 五月丁香天堂| 色女伊人| 日韩美一级毛卡片| 六月婷婷在线| 超碰人人操人人9| 99乱视频| 综合五月丁香97| 99网| 99狠狠操一| 欧美色九| 婷婷99狠狠| 大香蕉综合| 激情五月天电影| 俺来也综合网精品一区| 婷婷综合网站| 色婷婷六月激情| 内射在线CHINESE| 91视屏在线观看com.wwwvv| 精品人妻伦九区久久AAA片| 五月婷婷与六月丁香图片激情| 中文av网| 五月天开心色情网| 99色嘟嘟精品网站| 九九婷婷网五月天| 久热超碰91| 婷婷综合五月天| 久久永久网址| 99re热视频这里只精品| 亚洲免费99| 日本在线视频看se99| 秋霞AV淫| 五月丁香婷婷无码中文| 久久97久久99久久综合欧美| 色婷婷狠狠干芒果TV| 色婷婷AⅤ| 大香蕉520| 三区激情四射av| 四川女人毛多水多A片| 午夜婷婷五月天| 欧美超级视频97| 激情五月天婷婷丁香| 五月色无码| 97性高潮久久久| 色九网| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 99爱在线观看视频| 亚州操操| 精品夜夜澡人妻无码AV| 欧州色色| 99色激| 免费观看全黄做爰的视频| 亚洲色激情| 亚洲欧美综合7777色婷婷| 成人精品视频99在线观看免费 | 9l视频自拍9l九色9l成人| 欧美日本另类| 久久视屏这里只有久久| 久久这里只有精品视频15| 五月婷婷偷拍| 久久99久久99精品免观看软件| 第四色网婷婷| BT综合在线视频观看| 99 福利 导航| 色九月婷婷| 亚亚州久久高潮| 婷婷丁香六月| 婷婷久久爱| 婷婷五月天电影网 | 99国产性感视频| 黄网免费观看| 操逼综合激情网| 五月天精品视频| 婷婷开心六月| WWW.激情| 亚洲视频国产一区| 99综合五月免费视频色婷婷| 综合五月婷婷| 丁香色五月天| 99色1| 丁香五月天堂网| 色婷婷第四色| 99网| 激情五月六月婷婷| 九九精品免费| 丁香五月网在线观看| ay2区| 婷婷五月色综合| 91国产精品视频播放| 91精品久久久久久77777| 99精品网| 五月天社区狠狠| 婷婷丁香五月天综合网| 日本91在线| 丁香婷婷性久久| 婷婷不卡基地| 欧美顶级少妇做爰HD| 亚洲激情五月天| 色哟哟精品| 久久五月丁香| 天天日,天天干,天天操| 色婷婷丁香中文在线播放| 久久久色婷婷五月天| 99热这里只有精品1025| 国产成人AV在线播放| 色色色五月天激情资源| 激情综合网激情五月婷婷| 午夜69成人做爰视频| 99热在线观看免费精品| 色色激情| 日韩成人中文字幕| 日韩高清成人| 婷婷五月综合网| 狠狠色大香蕉| 99精彩视频在线观看| 操B视频在线播放| 中字幕视频在线永久在线观看免费| 九九色色| 综合色99| 色婷婷五月在线| 婷婷五月色| 欧美性爱五月天| 91色色色| 久热这里只有精品6| 中文字幕在线日亚洲9| 超碰免费成人| 国产无套精品一区二区| 亚洲天堂色色| 成人精品在线观看| 欧美色综合天天久久综合精品| 97天堂| 野战J办公桌椅H| 成人做爰黄A片免费看直播室男男| 丰满少妇猛烈A片免费看观看 | 婷婷五月天论坛| 欧美亚洲婷婷五月| 人人噜天天上| 综合图片色色| 国产免费一区二区三州老师F1F1| 五月久久婷婷丁香| 这里只有精品免费视频| 天天日天天爽| 99视频| 韩国97天堂| 伊人婷婷五月天av| 激情综合网五月丁香| 久久香蕉网| 六月米奇色综合| 婷婷中文字暮| WWW.17C亚洲精品| 亚洲高清在线| 久久精品99国产精品日本| 色五月,com| 9热在线视频精品| 97香蕉久久超级碰碰高清版| 俺也去婷婷五月天第五色| 色 丁香婷婷| 狠狠色婷婷777| 婷婷激情人妻| 欧美性猛交 XXXX 乱大交| 久操乱| 超碰色综合| 噜色精品| 日本成人噜噜噜| 激情综合网五月激情| 9久久狠狠的| 超碰人人99| 五月伊人综合| 99色色色色| 91精品综合久久久久久五月丁香| 国产偷人爽久久久久久老妇APP| cao视频,现在观看| 日本片日本片祼观看网站在线看中文版网页在线看 | 综合色天天| 丁香五月开心五月激情| 五月丁香亭亭操逼| 少妇性按摩无码中文A片| 精品久9| 国产99久久久| 国产免费av在线| 亚洲色色在线| 婷婷婷婷婷婷婷婷| 五月丁香综合| 久久激情天堂| 五月婷婷网久久| 日本色图综合| 欧美婷婷丁香社区在线播放| 92久久| 欧美VA在线观看| 26UUU精品一区二区| 深爱五月亚洲| 91AV婷婷| 婷婷福利影院| 久久婷婷五月国产激情综合片| 色色射| 丰满少妇乱A片无码| 97干视频在线| 99视频网| 午夜天堂一区人妻| 九九AV在线| 99热官网精品在线| 8090在线影视少妇| 婷婷久久亚洲| 五月丁香综合激情网| AA片在线观看视频在线播放| 非洲一级AV| 色婷婷狠狠干芒果TV| AA丁香综合激情| 先锋资源91| 久久丁香五月婷婷| 国产99久久久国产精品免费看| 踪合专区啪啪| 激情五月婷婷色| 成人综合网站| 99热免费精品热久久66| 五月丁香 啪啪| 91操在线| 久久成人天| 亚洲国产精品SUV| AV九九| 97资源碰碰| 超碰在线综合| 六月激情婷婷| 91碰操| 五月天婷婷五月| 亚洲中文字幕在线观看| 永久思思热在线| 婷婷五月天色色| 五月婷婷啪啪啪| 超碰成人av| 天堂综合久| 婷婷五月色天| 美腿丝袜AV天堂网| 五月亭亭性| 天天综合色99| 色婷婷小说| 久在线综合69| 五月婷婷免费看| 神马久久五月天| 亚洲aV写真天天综合网久久| 美女被操一区二区| 这里只有精品9| 91 久热| 丁香婷婷色| 五月丁香A片| 五月色丁香视频精品| 狠狠色综合图片| 天天草比天天爽| 丁香五月激情欧美| 天天色噜| 午夜成人网站在线观看| 色玖玖综合网| 99操碰| 五月丁香六月色| 五月天开心激情网色欲无码| 激情五月婷婷综合| 色婷婷五月天天天天天天天天天| 国产精品99久久久久久久女警| 五月丁香av在线| 久久九九激情五月天| 久8色色| 亚洲色五月婷婷| 五月婷婷激情网| 婷婷综合五月天| 亚洲第一色色色| 江苏少妇性BBB搡BBB爽爽爽| 丁香五月激情性色郤| 第四色色六月色综合| 日日操天天操| 99色色网| 中文字幕按摩做爰| 人人摸人人干人人做| 亚洲黄3级片网站欧美| 在线婷婷| 日韩成人五月天| 超碰婷婷五月| 91精品久久久久久久久| 色999亚洲人成色| 偷偷与邻居做爰完整视频| 五月天激情婷婷小说| 五月丁香色婷基地综合久久| 丁香五月天啪啪| 色五月婷婷五月久久| 4399精品一区二区| 久久狼人天堂| 五月丁香久久综合精品| 怡红院91a√| 久热免费视频| 六月丁香婷婷五月| 噜噜噜狠狠色综| 丁香五月五月婷婷欧美大香蕉 | 9久久久| 婷婷六月综合激情| 夜夜撸日日骑| 激情综合婷婷| 五月天婷婷综合色| 亚洲AV中文在线| 啪啪啪啪五月天| www久久久久| 色婷婷影院| 99色热| 五月婷婷成人网首页| 日本人妻操| 五月天丁香网| 婷婷五月天色播| 久久AAAA片一区二区| 三级99热| 日韩免费视频| 婷婷综合色图| 色五月色五天色情网| 久久婷婷五月丁香网| 色婷婷伊人激情在线观看| 超碰色综合| 五月丁香六月情婷婷久久| 9久久久久久久久久久| 丁香五月天AV在线 | 六月丁香婷婷综合在线| 色五月婷婷狠狠撸| 99精品超在线播放| 98国产精品综合一区二区三区| 婷婷色操| 婷婷五月丁香六月天亚洲综合| 色五月综合网| 999九九九久久久99HD| 五月丁香六月激情| 久热AA| 天天日天天爽夜夜爽| 中文字幕日韩无码制服诱或| 9久久精品| 小色小蛇伊人婷婷色香五月| 亚洲婷婷性爱| 99成人| 欧美色久| 五月天婷婷7米| 天天天日天天天干| 国产精品五月丁香| 97碰在线视频| 182TV大香蕉| 亚洲欧美国产A片免费观看| 99热国品| 色情综合| 草草操操| 中文字幕日韩成人| 色综合久网| 超碰无码老师| 天天碰夜夜操| 疯狂做受XXXX高潮A片| 99热综合网| 成人短视频在线| 91热网址| 性色天| 色日本五月天| 色亚洲欧洲| 五月天婷婷在线播放免费| 久热a| 五月婷婷深爱六月| 99精品在| 色欲香综合网| sewuyue第四色| 管管補管管紱| 婷婷九月激情网| 天天综合.com| 狠狠狠狠狠狠狠狠草| 久久久久综合激动五月天| 五月激情丁香久久综合网| 99视频这里只有免费精品| 色婷婷小说| 欧美激情丁香五月| 激情五月天婷婷激情| 色综合夜夜| 丁香五月婷婷综合视频| 亚洲欧洲色色| 日日爽日日操| WWW.桔色成人.COM| 天天操天天爱天天玩| 开心五月深爱激情| 婷婷丁香五月高清| www.minyis.com【JT】实力收量可预付QQ2101460746 | 婷婷六月色播| 五月色色激情网| 开心激情五月天网| 五月久久婷婷天堂视频| 五月婷婷五月| 人人澡玖玖一| 丁香六月婷婷综合| 欧美色综合天天久久综合精品| 少妇AB又爽又紧无码网站| 国产av一区二区三区| 丁香五月天影院| 热久久色| 大香蕉九九| 欧美性丁香色色五月天综合爱爱| 激情综合网激情五月欧美| 丁香色综合| 五月天婷婷伊人| 思思热99热| 午夜天天精品视频| 激情婷婷五月天丁香| 国产成人在线精品| 天天日,天天射,天天插| 99色热综合| 五月天激情网站| 亚洲国产99| 国产古装妇女野外A片| 五月婷婷之综合激情在线| 亚洲色图五月丁香| 激情深爱综合| 色99热| 91色综合| 91人人人人人| 97欧美在线| 99激情视频热| 国产精品VA在线| 性色五月天| 色八戒操婷婷| 亚洲人妻AV| 色爱终和网| 91seav| 婷婷丁香五月天综合激情| 超碰97久久| 欧美天天综合网站上去吧| 婷婷狠狠色| 五月天色图| 色射7856五月天激情四射| 五月婷婷黄色| 99精品福利视频| 五月天六月色| 天啪色| 婷婷五月天另类视频| 99视频这里有精品| 天天舔天天| 婷婷的色色五月天| 熟妇内谢69XXXXXA片| 99久久玖玖| 五月天激情婷婷丁香| 亚洲成人一区| tingtingseav| 激情com| 国产精品爽爽久久久久久| 无码少妇高潮喷水A片免费| 在线观看亚洲视频影院| 99热这里只有国产精品| 91ncom.色| 婷综合六月| 噜色精品| 亚洲成人综合在线| 亚洲欧洲一二| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 少妇熟女视频一区二区三区| 婷婷色一二三区波多野结衣| 99精品视频免费在线播放| 青青青在线视频国产| 69色婷婷| 五月婷婷丁香色吧网| 狠狠的日| 久大香蕉| 99热国产这里只有精品| 黑人巨粗进入警花疼哭A片| 色欲婷婷五月天| 五月天激情久久| 99热99精品在线观看| 九九99视频精品| 九九亚洲视频| 99啪99| 午夜色丁香| 丁香五月天天久久综合小说| 丁香五月天色综合| 色五月天丁香| 人妻aV在线| 亚洲激情五月天| 日本97在线观看| 99色热综合| 日欧一片内射VA在线影院| 26UUU| 激情五月综合网| 色碰干| 综合网啪| 五月五月婷婷| 精品色| 婷婷国产五月天17c| 久久久久久丁香五月| 人人爽网| 五月天综合区| 精品亚洲国产成AV人片传媒| 久热2025无码| 亚洲激情在线| 4399在线观看免费高清电视剧| 九九久久精品| 久99| 色屌丝中文字幕| 天天做天天爱高潮片| 六月 丁香 视频| 九九精品在线视频观看| 五月丁香综合在线| 思思99热热热99| 久操大香蕉| 婷婷激情综合无月| 亚洲亚洲人成综合网络| www.婷婷,com| 色色图五月天| 五月婷视频在线|