久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

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

MRAM工業(yè)嵌入式存儲實戰(zhàn):MR25H40CDF與STM32F031C6驅(qū)動開發(fā) 1. 為什么 MRAM 在工業(yè)嵌入式場景里越來越受關(guān)注1.1 從 EEPROM 和 Flash 的痛點說起做過工業(yè)設(shè)備的人大概都有過這樣的經(jīng)歷設(shè)備在現(xiàn)場跑了幾個月突然某天斷電重啟后參數(shù)全丟了或者日志文件寫壞導(dǎo)致整個文件系統(tǒng)掛掉。追根溯源問題往往出在存儲介質(zhì)上。傳統(tǒng)方案里小容量參數(shù)存儲用 EEPROM大容量數(shù)據(jù)和代碼存儲用 NOR Flash 或 NAND Flash這套組合用了十幾年穩(wěn)定是穩(wěn)定但有幾個繞不開的硬傷。EEPROM 的寫入速度慢得讓人著急字節(jié)寫入典型值在 5ms 到 10ms 量級如果設(shè)備需要在掉電瞬間保存一批關(guān)鍵數(shù)據(jù)這個速度根本來不及。而且 EEPROM 的擦寫壽命雖然標(biāo)稱 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ī)格書時最直觀的感受是它的接口設(shè)計非常克制——標(biāo)準(zhǔn) SPI 接口支持 Mode 0 和 Mode 3最高時鐘頻率 40MHz指令集和普通 SPI Flash 高度兼容基本上你原來怎么操作 W25Q 系列換成它只需要改幾個指令碼。但它的內(nèi)在和 Flash 完全不同。MR25H40CDF 的存儲單元是磁性隧道結(jié)MTJ通過電子自旋方向來存儲數(shù)據(jù)而不是電荷。這意味著它沒有電荷泄漏問題不需要刷新寫入前不需要擦除寫入延遲極低。規(guī)格書上標(biāo)稱的寫入周期時間是 35ns這個數(shù)字在 SPI 接口下會被總線速度限制但即便如此40MHz 時鐘下連續(xù)寫入的吞吐率也能達到 5MB/s 左右比 EEPROM 快了三個數(shù)量級。工作電壓范圍 2.7V 到 3.6V工業(yè)級溫度范圍 -40℃ 到 85℃部分批次可以做到 105℃。封裝是 8 引腳 SOIC 或者 DFN引腳定義和標(biāo)準(zhǔn) SPI Flash 完全一致CS、SO、SI、SCK、VDD、VSS、WP、HOLD。WP 和 HOLD 引腳在 MRAM 里功能有所簡化但引腳位置兼容PCB 設(shè)計時可以直接替換 Flash 的焊盤。1.3 STM32F031C6 作為主控的適配性分析STM32F031C6 是 ST 的入門級 Cortex-M0 芯片48MHz 主頻32KB Flash4KB SRAM封裝是 LQFP48。選它來搭配 MR25H40CDF乍一看有點小馬拉大車的意思——4KB SRAM 的芯片去驅(qū)動 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 外設(shè)支持 DMA 請求雖然 M0 的 DMA 通道有限配合 MRAM 的連續(xù)讀寫特性可以實現(xiàn)零拷貝的數(shù)據(jù)流。我在一個振動采集項目里用 SPIDMA 把 MRAM 當(dāng)作環(huán)形緩沖區(qū)ADC 采樣數(shù)據(jù)直接通過 DMA 寫入 MRAMCPU 幾乎不參與實測下來非常穩(wěn)。注意STM32F031C6 的 SPI1 默認引腳是 PA5(SCK)、PA6(MISO)、PA7(MOSI)片選需要自己用 GPIO 控制。硬件 NSS 在 M0 系列上有些坑建議直接用軟件片選后面會詳細說。2. 硬件設(shè)計從原理圖到 PCB 的實操細節(jié)2.1 引腳連接與電平匹配MR25H40CDF 和 STM32F031C6 都是 3.3V 供電電平直接匹配不需要電平轉(zhuǎn)換芯片。這一點比某些 1.8V 的 MRAM 型號省事很多。具體的引腳連接關(guān)系如下表MR25H40CDF 引腳功能STM32F031C6 引腳備注CS片選PA4 (GPIO)軟件控制低有效SCK時鐘PA5 (SPI1_SCK)24MHz 以內(nèi)SO數(shù)據(jù)輸出PA6 (SPI1_MISO)推挽復(fù)用SI數(shù)據(jù)輸入PA7 (SPI1_MOSI)推挽復(fù)用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 懸空了結(jié)果在電機干擾比較大的環(huán)境里偶爾出現(xiàn)寫入數(shù)據(jù)錯亂。后來查了半天發(fā)現(xiàn)是懸空引腳拾取了噪聲導(dǎo)致芯片內(nèi)部狀態(tài)機誤動作。所以這兩個引腳一定要處理要么上拉要么接 GPIO 控制千萬別懸空。2.2 PCB 布局布線的關(guān)鍵要點SPI 總線在 24MHz 下雖然不算高速信號但在工業(yè)環(huán)境里電磁干擾復(fù)雜PCB 布局還是不能太隨意。我總結(jié)了幾條實操經(jīng)驗第一MRAM 芯片盡量靠近 MCU 放置走線長度控制在 5cm 以內(nèi)。SPI 的四根信號線SCK、MOSI、MISO、CS盡量等長尤其是 SCK 和 MOSI長度差不要超過 5mm。如果實在做不到等長優(yōu)先保證 SCK 走線短而直。第二SCK 走線要遠離模擬信號和電源開關(guān)節(jié)點。我在一個項目里把 SCK 走線從 DC-DC 電感旁邊穿過結(jié)果 SPI 通信誤碼率飆升。后來把 SCK 改道問題立刻消失。如果 PCB 空間受限可以在 SCK 和 GND 之間加一個 22Ω 的串聯(lián)電阻減緩邊沿速率降低輻射。第三去耦電容必須加而且要靠近芯片的 VDD 引腳。0.1μF 的陶瓷電容是標(biāo)配如果電源紋波比較大再并聯(lián)一個 1μF 的。我習(xí)慣在 MRAM 的 VDD 和 GND 之間放一個 0.1μF 的 0402 電容距離引腳不超過 2mm。第四CS 信號線不要和其他信號線平行走太長距離。CS 是控制信號如果受到干擾產(chǎn)生毛刺會導(dǎo)致 SPI 狀態(tài)機誤判。可以在 CS 上拉一個 10kΩ 的電阻到 VDD保證空閑時電平穩(wěn)定。實操心得如果你用的是雙層板建議在 MRAM 芯片下方鋪一塊完整的地平面SPI 信號線走在頂層地平面在底層作為參考。這樣可以讓信號回流路徑最短減少電磁輻射。四層板的話把 SPI 信號走在內(nèi)層上下都有地平面參考效果更好。2.3 電源設(shè)計與掉電保護工業(yè)場景里電源質(zhì)量往往不太理想浪涌、跌落、紋波都是家常便飯。MRAM 雖然寫入速度快但如果電源在寫入過程中跌落數(shù)據(jù)仍然可能出錯。所以電源設(shè)計要留足余量。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配合一個電壓檢測電路。當(dāng)檢測到輸入電壓跌落時MCU 立即觸發(fā) MRAM 寫入把關(guān)鍵數(shù)據(jù)保存下來。由于 MRAM 寫入速度極快1000μF 電容儲存的能量足夠完成幾百次寫入操作。我實測過一組數(shù)據(jù)在 3.3V 供電、1000μF 電容的條件下從檢測到掉電到電容電壓跌落到 2.7VMRAM 最低工作電壓大約有 15ms 的窗口時間。在這 15ms 內(nèi)以 24MHz SPI 時鐘計算可以寫入大約 45KB 的數(shù)據(jù)。對于大多數(shù)參數(shù)保存場景這個窗口綽綽有余。3. 軟件驅(qū)動從寄存器操作到 HAL 庫封裝3.1 SPI 外設(shè)初始化與時鐘配置STM32F031C6 的 SPI1 掛在 APB2 總線上PCLK 默認 48MHz。要配置 SPI 時鐘為 24MHz需要設(shè)置分頻系數(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 的指令集和標(biāo)準(zhǔn) SPI Flash 高度相似但簡化了不少。常用的指令碼如下表指令名稱指令碼功能說明WREN0x06寫使能寫入前必須發(fā)送WRDI0x04寫禁止RDSR0x05讀狀態(tài)寄存器WRSR0x01寫狀態(tài)寄存器READ0x03讀數(shù)據(jù)任意地址WRITE0x02寫數(shù)據(jù)任意地址RDID0x9F讀設(shè)備 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 拉高。寫操作的時序稍微復(fù)雜一點CS 拉低發(fā)送 WREN 指令0x06CS 拉高然后 CS 再拉低發(fā)送 WRITE 指令0x02發(fā)送 3 字節(jié)地址發(fā)送數(shù)據(jù)CS 拉高。注意 WREN 和 WRITE 之間必須拉高 CS這是 SPI Flash 和 MRAM 的通用規(guī)則目的是讓芯片內(nèi)部狀態(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ù)是驅(qū)動的基礎(chǔ)實際項目里我會再加一層封裝比如按結(jié)構(gòu)體讀寫、帶 CRC 校驗的讀寫、環(huán)形緩沖區(qū)管理等。但底層這幾個函數(shù)必須保證穩(wěn)定可靠因為所有上層操作都依賴它們。實操心得HAL_SPI_Transmit 和 HAL_SPI_Receive 的超時參數(shù)不要設(shè)太小。我一開始設(shè)了 10ms結(jié)果在 24MHz 下連續(xù)寫 256 字節(jié)時偶爾超時。后來改成 1000ms問題消失。原因是 HAL 庫在傳輸過程中有循環(huán)等待如果中斷頻繁打斷實際耗時可能比理論值長很多。4. 數(shù)據(jù)管理策略讓 MRAM 發(fā)揮最大價值4.1 參數(shù)存儲的分區(qū)設(shè)計512KB 的 MRAM 看起來不大但在參數(shù)存儲場景里綽綽有余。我一般會把 MRAM 分成幾個區(qū)域來管理區(qū)域名稱起始地址大小用途系統(tǒng)參數(shù)區(qū)0x000004KB設(shè)備配置、校準(zhǔn)參數(shù)用戶參數(shù)區(qū)0x010004KB用戶設(shè)置、偏好日志區(qū)0x02000256KB運行日志、事件記錄數(shù)據(jù)緩沖區(qū)0x42000252KB采集數(shù)據(jù)、掉電保護系統(tǒng)參數(shù)區(qū)和用戶參數(shù)區(qū)各留 4KB足夠存儲幾百個參數(shù)。日志區(qū)用環(huán)形緩沖區(qū)的方式管理寫滿后從頭覆蓋。數(shù)據(jù)緩沖區(qū)用于掉電保護平時可以當(dāng)作普通 RAM 使用掉電時把關(guān)鍵數(shù)據(jù)寫進去。分區(qū)設(shè)計的好處是隔離性好日志寫壞了不會影響參數(shù)區(qū)參數(shù)區(qū)更新也不會干擾日志記錄。而且每個區(qū)域可以獨立做 CRC 校驗出問題時容易定位。4.2 掉電保護的數(shù)據(jù)完整性保障掉電保護是 MRAM 最核心的應(yīng)用場景之一。我設(shè)計過一個方案實測在工業(yè)現(xiàn)場跑了兩年多沒有丟過一次數(shù)據(jù)。核心思路是雙備份CRC寫入確認。具體做法是每個參數(shù)塊存儲兩份地址 A 和地址 B。寫入時先寫 A讀回校驗 CRC確認無誤后再寫 B。讀取時先讀 ACRC 校驗通過就用 A否則讀 B。如果 A 和 B 都壞了才使用默認值。這個方案的關(guān)鍵在于寫入順序。必須先寫 A 再寫 B而且兩次寫入之間要有一個提交標(biāo)志。我在每個參數(shù)塊前面加一個 4 字節(jié)的頭部包含一個序列號和一個狀態(tài)標(biāo)志。寫入流程是讀取當(dāng)前序列號加 1構(gòu)造新數(shù)據(jù)塊頭部狀態(tài)標(biāo)志設(shè)為寫入中寫入 A 區(qū)讀回 A 區(qū)校驗 CRC如果校驗通過把 A 區(qū)頭部狀態(tài)改為有效寫入 B 區(qū)重復(fù)步驟 3-5這樣即使在第 3 步到第 5 步之間掉電A 區(qū)的狀態(tài)標(biāo)志還是寫入中讀取時會跳過 A 區(qū)使用 B 區(qū)的舊數(shù)據(jù)。數(shù)據(jù)完整性得到了保障。注意MRAM 的寫入雖然是即時的但 SPI 傳輸需要時間。在掉電窗口內(nèi)要確保 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。寫入時從當(dāng)前寫指針位置開始寫滿后回到開頭覆蓋最舊的日志。環(huán)形緩沖區(qū)的關(guān)鍵參數(shù)是寫指針和讀指針。寫指針指向下一個可寫位置讀指針指向最舊的未讀日志。為了避免讀寫沖突我用了寫指針原子更新的策略每次寫入完成后才更新寫指針。這樣即使寫入過程中掉電寫指針仍然指向舊位置不會產(chǎn)生半截日志。日志條目的結(jié)構(gòu)定義如下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è)設(shè)備這個容量可以記錄幾個月的運行日志。讀取日志時從讀指針開始逐條讀取并校驗 CRC。如果 CRC 不通過說明這條日志寫壞了跳過繼續(xù)讀下一條。這樣可以保證即使有個別日志損壞也不會影響整體日志的讀取。5. 性能實測與優(yōu)化技巧5.1 讀寫速度實測數(shù)據(jù)我在 STM32F031C6 MR25H40CDF 的平臺上做了一組性能測試SPI 時鐘 24MHz測試結(jié)果如下操作類型數(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ā)回調(diào)但 CS 的拉高時機需要自己控制。我一般會在 DMA 傳輸完成回調(diào)里拉高 CS確保數(shù)據(jù)全部發(fā)完。如果提前拉高 CS最后幾個字節(jié)可能丟失。5.3 低功耗場景下的存儲策略工業(yè)傳感器節(jié)點往往用電池供電功耗是核心指標(biāo)。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 年以上。當(dāng)然實際中還有傳感器和其他外設(shè)的功耗但存儲子系統(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 應(yīng)該有 8 個或更多時鐘脈沖。如果 SCK 沒有波形說明 SPI 外設(shè)沒配置好。如果 SCK 有波形但 MISO 一直是高電平說明 MRAM 沒有響應(yīng)可能是 CS 沒拉低或者 MRAM 損壞。第三步讀設(shè)備 ID。MR25H40CDF 的 RDID 指令0x9F會返回一個 3 字節(jié)的 ID正常應(yīng)該是 0xE5 0x40 0x13 之類的值。如果讀不到正確的 ID說明底層通信有問題先別急著調(diào)上層邏輯。第四步檢查 SPI 模式。MRAM 支持 Mode 0 和 Mode 3如果 MCU 配置成 Mode 1 或 Mode 2通信會失敗。這個坑我踩過當(dāng)時調(diào)了半天最后發(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 當(dāng)作一個連續(xù)指令導(dǎo)致寫入失敗。這個細節(jié)在規(guī)格書里有明確說明但很容易被忽略。三是電源干擾。在電機、繼電器等大功率設(shè)備附近電源紋波可能導(dǎo)致 MRAM 寫入出錯。解決方法是在 MRAM 的 VDD 和 GND 之間加一個 0.1μF 加 1μF 的電容組合必要時再加一個磁珠隔離。四是 SPI 時鐘太快。雖然 MR25H40CDF 標(biāo)稱支持 40MHz但在實際 PCB 上走線長度、負載電容等因素會影響信號完整性。如果 24MHz 下不穩(wěn)定可以降到 12MHz 試試。我有個項目因為 PCB 走線太長最后降到 8MHz 才穩(wěn)定。6.3 常見問題速查表現(xiàn)象可能原因排查方法解決方案讀不到設(shè)備 IDSPI 模式錯誤檢查 CLK Polarity/Phase改為 Mode 0讀到的數(shù)據(jù)全 0xFFMISO 未連接量 MISO 通斷重新焊接寫入后讀回不一致WREN 未發(fā)送讀狀態(tài)寄存器 WEL 位確保 WREN 后 CS 拉高偶發(fā)數(shù)據(jù)錯亂電源干擾示波器看 VDD 紋波加去耦電容高速下通信失敗信號完整性差降低 SPI 時鐘測試降頻或改 PCBCS 拉低無響應(yīng)CS 引腳配置錯誤量 CS 電平改為推挽輸出寫入超時HAL 庫超時設(shè)置太短增大超時參數(shù)改為 1000ms避坑技巧如果你在調(diào)試時實在找不到問題可以先用一個簡單的 GPIO 模擬 SPI 時序逐位發(fā)送指令用示波器觀察每一位的波形。這樣可以排除 SPI 外設(shè)配置的問題快速定位是硬件還是軟件的問題。我每次遇到疑難雜癥最后都是用這招解決的。7. 項目實戰(zhàn)工業(yè)數(shù)據(jù)采集器的存儲方案7.1 需求分析與方案設(shè)計我接手過一個工業(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ù)轉(zhuǎn)存過去。MRAM 的作用是削峰填谷在 SD 卡寫入的間隙緩存數(shù)據(jù)保證不丟采樣點。具體設(shè)計是MRAM 分成兩個 256KB 的緩沖區(qū)交替使用。當(dāng)緩沖區(qū) A 寫滿時切換 to 緩沖區(qū) B同時把 A 的數(shù)據(jù)通過 DMA 轉(zhuǎn)存到 SD 卡。SD 卡寫入速度約 2MB/s256KB 需要 128ms。在這 128ms 內(nèi)緩沖區(qū) B 可以繼續(xù)接收數(shù)據(jù)不會丟點。7.2 關(guān)鍵代碼實現(xiàn)與調(diào)試過程數(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 完成回調(diào)里拉高 CS 并調(diào)用 callback }調(diào)試過程中遇到的最大問題是 DMA 傳輸和 CS 控制的時序配合。HAL 庫的 DMA 完成回調(diào)是在傳輸結(jié)束后觸發(fā)的但 SPI 的最后一個字節(jié)可能還在移位寄存器里。如果立即拉高 CS最后一個字節(jié)會丟失。解決方法是在 DMA 完成回調(diào)里先等 1μs再拉高 CS。這個 1μs 的延時看起來不起眼但少了它數(shù)據(jù)就是錯的。另一個問題是緩沖區(qū)切換的原子性。如果切換過程中來了中斷可能導(dǎo)致數(shù)據(jù)寫到錯誤的緩沖區(qū)。我的做法是在切換時關(guān)中斷切換完成后立即開中斷。關(guān)中斷的時間只有幾個時鐘周期不會影響其他中斷的響應(yīng)。7.3 實測結(jié)果與長期運行穩(wěn)定性這個方案在實際現(xiàn)場跑了半年多采集了上千組數(shù)據(jù)沒有丟過一個采樣點。MRAM 的寫入速度完全跟得上 1ms 的采樣周期SD 卡轉(zhuǎn)存也沒有成為瓶頸。長期運行下來MRAM 的穩(wěn)定性非常好。我特意做了個測試連續(xù)寫入 100 萬次讀回校驗全部通過。規(guī)格書標(biāo)稱的 10^14 次擦寫壽命在實際使用中根本用不完。按每天寫入 100 萬次計算可以用 270 年。溫度方面設(shè)備工作在 -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鐵電存儲器也是非易失、高速、高壽命的存儲介質(zhì)。我把幾種方案放在一起對比特性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 以內(nèi)MRAM 是最優(yōu)解。如果功耗極其敏感、容量需求小FRAM 更合適。如果只是存?zhèn)€配置參數(shù)、寫入次數(shù)不多EEPROM 就夠了。8.2 從單機存儲到分布式存儲的擴展思路單個 MRAM 的容量有限如果項目需要更大的存儲空間可以考慮多片 MRAM 級聯(lián)。MR25H40CDF 支持 SPI 總線共享用不同的 CS 引腳選擇不同的芯片。STM32F031C6 的 GPIO 足夠驅(qū)動 4 到 8 片 MRAM總?cè)萘靠梢詳U展到 2MB 到 4MB。多片級聯(lián)的軟件設(shè)計需要一個地址映射層。上層應(yīng)用調(diào)用統(tǒng)一的讀寫接口底層根據(jù)地址范圍選擇對應(yīng)的 CS 和芯片。這樣上層代碼不需要關(guān)心具體有幾片 MRAM擴展起來很方便。如果還需要更大容量可以考慮 MRAM SD 卡的混合方案。MRAM 作為高速緩存SD 卡作為大容量存儲。數(shù)據(jù)先寫入 MRAM再批量轉(zhuǎn)存到 SD 卡。這樣既保證了寫入速度又滿足了容量需求。擴展思路MRAM 的另一個有趣應(yīng)用是做內(nèi)存鏡像。在系統(tǒng)運行時把關(guān)鍵變量同時存在 SRAM 和 MRAM 里。掉電后重啟從 MRAM 恢復(fù)變量值實現(xiàn)斷電續(xù)跑。這個方案在工業(yè)控制器的狀態(tài)保持場景里非常有用我后續(xù)會單獨寫一篇來展開。9. 寫在最后的一些實操體會這個組合我用了兩年多從最初的評估板到量產(chǎn)產(chǎn)品踩過的坑不算少但整體來說 MR25H40CDF STM32F031C6 是一套非常可靠的存儲方案。如果你正在選型工業(yè)嵌入式項目的存儲介質(zhì)我建議先拿幾片樣品在真實環(huán)境里跑一跑特別是高低溫循環(huán)和電源波動測試這兩項最能暴露問題。有個細節(jié)我一開始沒注意MRAM 的 CS 引腳在 PCB 上最好串聯(lián)一個 22Ω 的電阻。這個電阻可以抑制信號反射在長走線或者多從機場景下特別有用。我有個項目因為 CS 走線太長加了電阻之后通信穩(wěn)定性明顯提升。另外MRAM 的寫入雖然不需要擦除但并不意味著可以無限制地隨意寫。雖然壽命是 10^14 次但如果你的應(yīng)用每秒寫幾萬次幾年下來也會接近上限。所以日志系統(tǒng)還是建議用環(huán)形緩沖區(qū)避免對同一地址反復(fù)寫入。最后說個成本相關(guān)的事。MR25H40CDF 的價格比同容量的 SPI Flash 貴不少批量采購的話大概是 Flash 的 5 到 8 倍。所以選型時要算清楚賬如果只是存配置參數(shù)一年寫不了幾次用 Flash 就夠了如果是高頻寫入、掉電保護、高可靠性場景MRAM 多出來的成本是值得的。我一般會建議客戶在關(guān)鍵數(shù)據(jù)存儲上用 MRAM非關(guān)鍵數(shù)據(jù)用 Flash混合方案性價比最高。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
极品尤物在线观看| 试看日韩黄片| 五月天伊人| 国产精品视频自拍在线| AV有码在线| 亚洲成人精品久久久| 综合色色网| 国产肏逼网站| 男女无套 免费网站| 亚洲综合性网址| 国产av白丝| 性色av网站| 3PAV乱伦视频| 亚洲熟妇A V黑人| 久久一二三四不卡 | 五月综合久久| www.99热| www.久久99| 91社操逼| 思思热免费视频观看| 亚洲高清无毛一区二区| 免费岛国一级片| 精品传媒在线一区| 欧美很很操视频| AV在线性爱| 国产v亚洲v日韩v欧美v片另类| 亚洲高清色综合| 激情情色五月天| 麻豆性爱视频在线播放| 99久久综合| 红桃视频高潮| 91少妇通奸网站| 日韩电影天堂视频一区二区| 大香蕉啪啪啪啪在线| 人妻插插人妻人| 精品久久久九九九孕妇| 欧美激情视频一区二区三区不卡| 韩国轻伦国内自拍一区| 98精品国产乱码久久久久久| 强奸熟女一区二区三区| 超碰在线日韩一区| 欧美综合91| 熟妇女伦乱视频| 成年人黄色| 激情综合网激情综合| 97超碰碰| 国产一区二区三区免费视频在性观看 | 日本九九久久99| 91久久久视| 四虎在线播放| 色偷偷综合91久久噜噜| 人妻丝袜一区二区三区在线| 丁香六月综合激情| 五月天婷婷欧美三区| 丁香五月激情啪啪| 午夜精品久久久久久久男人的天堂| www色色色com| 韩国嫰模上门援交视频| 日韩97P| 色y情视频免费看| 国产一区二区免费福利片| 欧美偷拍区| 强奸乱伦动态污图免费 | 91色色综合| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 亚洲少妇激情一区二区三区| 97精品在线视频| 欧美亚洲小说| 日韩人成网站在线播放| 日日日日日| 白丝1区2区3区| 亚洲精品1区| 国产在线激情| 成年人三级黄色片视频| 日韩黄色电影网站| 亚洲伊人久久精品狠狠在线| 少妇高潮九九九九九九九| 青草精品视频-日本久久久久网站| 女优大全 - 91n| 中文字幕视频2区| 久久久久久久久久精| 九九九九精| 无码外流操逼视频| 激情婷婷丁香| 啊啊啊啊好疼视频| 国产日韩无码一区二区三区久久区| 男人天堂黄片| 超碰亚洲欧美日韩无| 日韩中文字幕2020| 国产高清自拍| 日本123区操B视频| 密臀AV在线| 天天噜| 日韩精品一区的| 亚洲综合有玛| 亚洲一区在线观看欧洲| 久九干| 人人澡人人澡人人| 久久久亚洲高清不打码| 天天综合香 ld视频| 婷婷五月天久久精品视频一区二区三区| 精品国产乱码久久久久久免费| 欧美A√综合网| 国产操逼网站亚洲一级黄色| 亚洲色欲天天人妻无码系列专区| 亚州色图欧美| 丁香六月激情| 人妻天天爽| 亚洲本色精品一区二区久久| 亚洲精品一二三四区| 亚洲资源站| 蜜桃无码AV一区二区| 啊啊啊啊二区好大| 丁香婷婷五月| 人妻黑丝袜电影| 精品欧美А∨无码黑人大荫蒂| 夜夜爽77777| 国产精品97视频| 亚洲精品成人| 精品一级| 综合网亚| 欧美视频一区二区在线| 91亚.色| 亚洲五码一区二区三区| 亚洲第一页综合在线| 国产精品免费日韩| 蜜臀va69| 婷婷午夜| 国产精品香蕉| 99re只有精品| 一线黄色免费性爱片| 久草精品视频| 综合激情五月天| 强乱老妇中文字幕| 国产精品交换一区二区| AV乱伦国产| 大香蕉丝袜一级片| 上床啊啊啊| 六月丁香五月婷婷| 777超碰| 人妻日日夜夜精品| 日韩无码黄色片| 91青青在线视频| 99热精品在线观看| 成人小说另类在线| 色偷综合| 无码99| 色噜噜狠狠色综合日日| 国产美女在线精品免费看| 国产91精品久久久久久久网曝门| 口爆吞精在线观看| 97视频免费播放| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 亚洲色图欧美一区二区不卡| 成熟熟女国产精品一区二区| 久热久| 日韩熟女操逼| 91痴汉| 嗯嗯嗯好爽| 亚洲乱色熟女一区| 97日韩超碰超碰中文字幕| 亚射在线| 99热| 五月天婷婷色| 免费观看国产不卡av| 男人的天堂kva| 蜜桃视频一区二区三区在线观看| 天天干天天狼在线视频| 无码人妻一区二区三区色欲aⅴ | 不卡视频一区蜜桃视频 | 韩国一级做a久久久久| 精品小视频在线| 日韩一区二区三区四区五区| 春色综合网| 欧美大战久久久伊人| 七久久久| av优播| 久久亚洲精品成人av| 天天综合网网欲色| 94色色电影网| 欧美淫乱视频| 欧美色爱综合| 亚洲诱惑| 污色区网站| 久久人妻一区二区三区高清| 欧美白嫩女HD| 欧美在线色图| 精品一区二区三区最新| 六月丁香网| 国产亲戚伦亲在线| 久久久精品无码亚免费| 盗摄女人妻在线| 久久青青草原免费视频| 成人AV超碰免费在线| 美女黄站| 欧美乱欲| 欧美少妇人妻| 97 色综合| 五十路熟女在线不卡观看一区二区| 夜夜嗨av午夜成人| 欧美se亚洲| 97天天摸天天碰| 日韩精品99999| 色婷婷视频| 激情五月天视频| 无码国产精品午夜不卡(| 色黄色美女大长腿午夜视频| 亚洲精品性爱片| 精品成人亚洲午夜电影| 九月丁香婷婷色| 丰满美女一级毛片在线播放| 国产黄色小视频网站| 自拍内地三级在线观看| 欧美一区二区福利在线| 国产在线视频二区| 极品AV网站在线观看| 1024手机看片欧美日韩| 97超碰免费生活| 天天天堂影视日韩亚洲91| 久久视频,这里只有精品| 黑人与人妻| 91精品国久久久久久无码| 青青草成人视频在线观看二区| 97超碰巨乳| 国产久久久久影院老熟女| 亚洲资源网| 欧美色图自拍| 人人操人人93| 色官网色综合| 婷婷色色五月天| 国产精品久久久亚洲一区| 亚洲色色色| 久久久久久久 九九九九九九九| 熟妇熟女一区二三区| 人人澡综合涩| 综合少妇网| 超碰97护士| 自怕偷自怕亚洲精品| 免费中文在线| 亚洲 中文 女同| 欧美 日韩 婷婷 五月| 看看日B真人视频| 九九九九AV| 欧美 精品国产制服第一页| 亚洲色图欧美色图日韩色图| 91粉嫩萝控精品福利网站_精品影音先锋国 | 伊人五月天青青草婷婷| 欧美999999| 五月丁香激情综合网| 日韩AV电影网站| 久久国语| 美女裸体无遮挡永久免费观看网站| 久久国产性爱| 艾草av| 天天操熟妇| 国产黄色剧情影片麻豆免费播放| 蜜乳AV色欲AVAV无码| 91大神电影天堂| 中文字幕av一区二区三区人妻少妇 | 九久久精品| 国产白丝av| 国产精品免费视频人成| 夜夜操91744565| 91熟女少妇| 亚洲美女AV无码| 免费作爱一级视频| 五月天色电影| 日本操逼视频免费| 一区二区你上我| 九一国产精品| 五月天玖玖资源站| 伊人aaa| 欧美Ⅴ性爱| 欧洲熟妇xxXx欧美老妇裸体| 熟妇国产免费一区| gogogo免费高清看中国国语| 嗯~啊~快点 死我视频| 97在线欧| 精品国产www久久| 亚洲激情天堂网| 欧美日韩中文视频播放| 久久女婷| 热G综合热G中文| 97在线精品观看视频| 久操高青| 97香蕉网| 三级片大波波| 国产精品久久久久久亚洲色欲| 少妇 综合| 天堂成人网| 午夜大香蕉| 67914在线兔费成人视频| 欧亚性爱啪啪| 久操电影网| 色五月激情综合网| AV中文字幕三四五| 激情五月婷| 综合色色网| 33044男人的天堂深夜备| 99日精品欧美国产| 91制服丝袜| 色综合色| 国产白丝精品在线观看| 1区2区3区中文字幕日韩| 超碰在线欧美性爱激情| 欧美另类自拍 | 无码乱人伦中文视频| 我中文字幕6区| 尤物网址| 日本在线15p| 伊人久久艹| 国产又粗又长又大的视频| 蜜桃久久一区二区三区| 插入逼91| 熟女91网| 国产四虎在线| 久久久久亚洲av综合波多野制衣| 男生通女生屁股| 婷婷六月天| 欧美高清无码免费视频高清版| 熟妇人妻一区二区三区| 久久久久人妻二区精品叶可怜| 中文字幕乱偷人妻久久艾草网| 少妇高潮对白在线观看| 欧美劲爆第一页| 香一区二区三区| 免费视频在线一区二区不卡| 天天影视网色欲色香| 天天干天天拍| 久久免费99精品久久久久久| 91天天综合在线观看| 超碰人人妻| 久热在线精品免费观看| 欧美精品黑人猛交高潮| 国产极品粉嫩馒头一线天av| 欧美中字不卡| 综精品久久久aaaa| 激情五月婷婷| 国产日韩精品人妻久久久久色欲网站| 日本高清视频在线观看黄已三辽| 欧亚不卡| 狠狠干狠狠干| 日韩成人大片一区二区| 高清有码一区二区| 91青青| 久久天天躁日日躁狠狠躁| 久久久久久AⅤ无码免费肉站| 久久久久久性爱免费视频| 使劲用力艹少妇视频一区二区| 岛国片在线观看视频亚洲| 强被迫伦姧在线观看无码网站| 91亚洲狠狠色| 国产视频小说| 1024手机看片欧美日韩| 男人的天堂在线有码| 色色香蕉| 18禁精品网站在线看| 男人天堂网址| 欧美日韩1234| 青青青在线高清视频在线一二三四区 | 亚洲精品蜜桃久久久一区二区三区| 成人性爱视频在线看| 午夜美女福利视频| 91少妇人妻| 久久久国产护士丝袜美腿一| 美美91成人国产精品欧美精品久久久久久久| 十八禁视频网站| 3d成人精品一区二区| 亚洲无码com| 国产激情在线| 久久系列| 69一区二区三区| 天堂网亚洲区手机版| 97久久国产亚洲精品超碰热| jiujiujiujingpin| 色偷综合| 97干综合网| 亚av顶级裸体一区二区三区四区五区| aaa淫乱视频| 中文字幕丝袜人妻| juliaann丝袜大战黑鬼| 亚洲蜜臀懂色| 欧美少妇性乱| 欧美 日韩 婷婷 五月| 熟女天天干| 99re69综合| 啊啊啊啊啊在线视频| 日韩内射视频| 久久国产对白激情浪潮| 久久久成人精品| 超碰97亚洲区| 91性情| 国产精品香蕉| 999精品国产高清一区二区| 日本一区二区三区午夜观看| 日韩乱伦影音先锋| 91一区二区| 18一区二区三区| 少妇毛片久久| 婷婷九月丁香| 97爱爱爱| 久久男人精品| 91日本在线观看| 亚 欧 美 综合| 蜜桃视频一区二区三区在线观看| 精品九九淫乱男| 97在线播放| 久久午夜色播影院免费高清| 欧美性爱www免费版| 久久久久久AⅤ无码免费肉站 | 国精综合一二三区影视| 2003天天干夜夜操| 日本久久女同性恋视频| 亚洲国产精品有声| 97色在线| 成人A片男人的天堂| 日本中文字幕一区| 日韩欧美加勒比| 国产亚洲精品无码三区| 五月丁香狠狠爱| 亚洲男人天堂网久久| 亚洲人久久久网| 日韩九九九| 欧美日韩啪啪电影| 六月天婷婷| 久久爽爽精品| 在线不欧美| 日韩卡一卡二卡三在线| 久久超碰爱| 亚州高清av| 欧成人精品H无码| 中文字幕精品一区二区精| 国产亚洲人妻综合日韩 久久| 欧美少妇第一页| 久久精品女同亚洲女同13| 日本中文字幕不卡视频| 国产精品老师| 欧美综合色综合| 日本操逼aaaaa| 丁香五月天啪啪| 福利天堂| 人人潮人人摸| 久久久久网站-538在线视频-欧美永久乱码| 天天欧美97| 插穴性爱视频在线观看| 亚洲A色| 加勒比海人人操超碰在线| 天天搞在线综合网| 99精品网站| 久久久新亚洲AV| 亚洲中文字幕精品久久久久久直播| 国产乱弄免费在线视频。| www国产精品| 亚洲精品亚洲人成人网| 久久99干一本高清| 91狼人| 亚洲文学偷乱拍啪啪啪啪| 激情小说图片亚洲首页| 亚洲中文字幕乱码无码一区二区| 亚洲色人阁| 日韩不卡av一二三| 老司机福利社视频在线观看| 免费在线观看国内色片网站网址| 日本中文字幕一区| 久久久久久久久成人av解说| 超碰午夜| 天天插天天操| 91丝袜在线播放| 欧美亚洲日韩人妻在线观看| 我想要 啊 啊 啊| 婷婷综合视频| 一起草高清无码| 1024久久高清视频| 尤物av网站免费在线播放| 混色激情av| 欧美色女人| 久久久久久性爱片| 操www| 人妻内射一区二区在线视频| 青草青草久热| 狠狠躁伊人中文字幕| 婷婷五月天成人| 97色在线视频| 久久久性爱视频| 嫩草影院在线观看精品| 正宗无毛一线天嫩逼| 97色干| 欧美色女人| 91精品成人| 亚洲制服欧美另类内射| 熟妇人妻丰满久久久久久久无码| 精精夜夜| 国产亚洲精品玖玖玖在线观看| 欧美另类天堂| 无码人妻一区二区三区四区老鸭窝| 人妻少妇久久久| 亚洲熟伦熟妇AV无码春色| 欧美大片天天看| 日韩一级片在线看| 精品一区二区三区国产 | 永久免费av无码网站国产app| 蜜臀久久久| 久久九九精品一区二区| 久久精品国产72国产精品福利| 一区二区三区欧美激情| 欧美一级A一级a爱片久久| 国产有码一区| 国产三级日产三级韩国三级| 99中文字幕| 国厂麻豆77q4| 性吧在线视频| 色综合av男人天堂| 麻豆天美91| 中文字幕诱惑制服人妻丝袜美丝袜美| 天天综合色| 亚洲成人性爱网站在线播放| 美女爽到高潮91| 欧美激情超碰777| 五月婷婷丁香中文字幕| 中文操逼字幕| 国产9熟妇视频网站| 偷拍亚洲高清图片| 丁香六月婷婷| 国产亚州精品美女久久久免费| 超碰美国| 亚洲久草AV色图| 91久久午夜无码鲁丝片久久人妻| 久9视频| 岛国毛片在线观看免费| 蜜臀久久99精品久久久久| 91男人天堂网| 麻豆福利视频导航| 亚洲天堂性爱| av天堂影视中文在字幕在线中文 | 天堂俺去俺来也www久久婷婷| 欧美强奸一区二区诱惑| 亚洲天堂在线怕怕视频| 人妻精品一区二区三区| 劲爆欧美人妖三区91| 亚洲s在线观看| 色婷婷九月| 超碰成人最新最好看| 亚洲97成人在线观看| 伊人超碰97| 4tube欧美女厕所| 风月影院男女十八禁| AV老汉| 精品99999久久久久久| 日韩熟妇二区| 欧美国产日韩清纯唯美| 大香蕉久| 狠狠狠狠狠干| 婷婷久久综合| 久久怡红院| 免费观看的av| 91狠| 99久久无色码| 99999精品成人| 成人精品视频一区二区| 欧美熟妇精品黑人巨大一二三区| 一区二区三区四区姦女| 中文字幕人妻色偷偷久久皮| 清清草影| 丝袜天堂网| 欧美第五页| 97鸡把在线视频| 神马麻豆福利院| 国产精品乱码久久| www.亚洲成人一区| 2019天天干天天操| 三级片网站在线播放| 91free福利| 乱精品一区字幕二区| 麻豆 欧美 日韩| 久插不卡| 亚洲好色人妻| 国产极品馒头逼| 自拍偷拍第26| 欧美性巨大╳╳╳╳╳高跟鞋| 日韩欧美经典在线观看| 天美AV片| 精品美女久久一二三| 美女爽爽爽刺痛洞洞| 91色欧美| 强奸乱伦AV网址| 午夜精品久久久久久久99蜜桃一| 久热免费视频| 久久、1234| 无码精品啪啪啪一区二区三区三州| 九九九九九九综合| 国产婷婷综合在线观看| 久操视频资源站公开| 精品国产乱码久久久| 日本一级特级毛片视频| 国产精品久久久久久 百度| 五月天成人综合| 亚洲人妻熟妇三十三区| 欲色综合| 欧美亚洲第一页| 色五月综合| 久久少妇人妻| 碰碰97| 亚洲中文字母在线播放| av在线人气| 96精品久久久| 午夜福利激情在线视频| 婷婷伊人| 91无摭挡| 三级精品三级在线观看| 99热在线播放| 欧美高潮| 中文人妻av高清一区| 天天干少妇| 精品乱码在线观看| 男女啪啪网站免费视频| 99热网站| 青草伊人久久| 五月婷网站| 97 亚洲 日韩 欧美 在线| 激情婷婷丁香网| 一级片在线观看高清无码| 精品久久青青草| 自拍啪啪视频| 国产成人www免费人成看片| 久久精品72| 日韩97| 丁香激情网| 夜夜嗨一区| 日韩av一级黄片| 欧天美中出| www.久久制服糖| 嗯嗯啊啊亚欧精品| 国产精品高潮久久久无码| 五月丁香色情| 国产日韩美女小穴视频网站不卡| 中文字幕亚韩| 大香蕉伊然在亚洲91| 操逼逼一区视频| 日本三级小说中文字幕| 97超碰站| 九久9热| 成年无码动漫av片无尽在线 | 丝袜综合| 日韩免费三级黄片电影| 久久综合精品一区二区三区| 91久久| 操穴国产| 日韩激情无码影院| 丰满少妇高潮无码| 九月丁香婷婷色| 91久久久老司机| 久久成人国产| 青青伊人这里只有精品| 内射卯月麻衣| 大屁股xxxxx| 肥臀熟女一区二区三区视频| 亚洲高潮少妇| 26uuu久久| 欧美97在线观看| 一级性爱啪啪视频| 在线小说视频一区| 97av在线视频| 精品一级毛片在线观看| 一区二区三区四区久久视1| 日韩性爱1级片视频| 亚洲综合贴图91 | 亚洲射综合网| 草草网站影院白丝内射| 国产精品白丝AV| 精品久久久无码| 呦呦影院| 安微少妇操BBB| 九九九九九九九精品视频| 亚洲综合欧美| 亚洲男人天堂2016| 亚洲aV性爱| 欧美色图 色综合图| 97激情97激情| 欧美人妻一区| 97干色| 青青草玖玖爱| 天天欧美欧美亚洲网| 国产精品久久久久久久AV大片| 九草九九九| 91久青| 国产女人操逼视频| 久热一区二区| av东京热男人的天堂| www.99色| 三级特黄60分钟播放| 亚洲人妻色图| 久神马| 天无日色综合| 性爱精品一区| 欧美熟妇成人一区二区| 欧美日韩人妻精品一区二区三区| 亚州成人a∨| 女人被添高潮免费视频| 91国产操逼视频| 人妻激情视频| 欧美中文狠| 人妻啊啊人妻啊啊| 蜜臀aV午夜一区二区三区| 香蕉在线一区二区三区| 熟女字幕| 国产高清吃奶免费视频网站| 91 综合网| 98超碰日本| 色哟哟-国产专区| 激情综合五月天| 日韩人成网站在线播放| 国内毛片热久久思思热| 97免费在线观看| 欧美精品欧美精品系列| 国产精品久久久777| 大香蕉免费中文| 久久久 国产精品| 日韩无码a片| 91社区伊人| 亚洲熟女综合网| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | av网站免费线看| 校园春色亚洲色图| 国产夫妻性生活视频| 国内97干免费看| 青青草久久一区网| 特级大荫道BBwBBwBBW| 色噜噜狠狠色综无码久久合欧美| 国产精品免费视频人成| 精品少妇人妻av久久免费| 国产辣妈在线视频福利| av三级电影在线播放| 欧美综合另类| 超碰97护士| 男人久久天堂| 亚州男人天堂| 五十路熟女人妻一区二区在线观看| 啊啊啊慢点| 天堂性色| 欧美超碰在线| 国产9区| 天天干天天操天天操夜夜操天天操| 97手机日韩| 久久久96| 国产成久久综合片| 国产一区免费午夜视频| 亚欧性爱无码| 探花熟女,姿勢到位,體驗感也到位| 成人乱人伦一区二区| 尤物网址| 亚洲一本大道中文字幕无码在线| 蜜臀AV网站| 激情综合网五月婷婷| 色五月综合| 麻豆 欧美 日韩| 欧美18禁91| 美女AV一区二区| 五十路人妻在线| 欧美97av| 黄色AV影视| 欧美毛片在线网| 嗯……啊…嗯嗯…啊…好舒服| 欧美白嫩女HD| 亚洲好色人妻| 熟妇乱伦一区二区| 色官网色综合| 天天爽天天| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 欧美色图 人妻| 骚货 中文字幕 av| 加勒比海色香蕉婷婷| 亚洲天堂五月天国产| av在线免费一区二区| 日本一级黄色电影| 黄网站黄视频网站进入口| 日韩精品系列| 亚洲天堂一区| 一级黄色性爱A级片| 丁香五月色| 久插综合| 97这里有精品| 亚洲熟女性高潮久久久| 日本色婷婷| 天堂射| 超碰2017| 日韩av一级黄片| 91在线综合网| 青青久久久| 欧美成人A√在线一区二区| hd成人一区二区在线| 成 人 影视 一区 二区 三区 四区| 久久久专区| 久久 精品| 中国国国产一级特黄毛片| 黄色大片一区二区密桃丝袜| 夜夜免费视频| 国产二区三区免费视频| 久久性爱大全| 久久久久久波多野吉衣高潮| 东京太热男人的天堂久久久| www.91理论| 中文字幕乱碼在线| 91 丝袜在线播放| 亚欧韩av| 亚洲日韩乱码中文无码蜜桃臀网站| 清纯唯美亚洲综合| 日本123区操B视频| 人妻丝袜肏逼| 激情 欧美 亚洲 小说| 精品区9| 伊人性在线视频| 亚州中文字幕超碰97| 综合网欧美| 激情视频网址| 欧美精品欧美精品系列| 福利操逼| 亚洲永久永久永久永久一级一级一级精品 | 日韩本不卡视频在线观看| 精品高清一区二区三区三州| 亚洲国产精品久久久久婷婷青年| 国产又粗又长又大的视频| 夜间福利片1000无码| 免费看污网址| 日韩成人精品| 欧色综合| 黄片免费视频2019| 91色图片| 国产精品白丝在线播放| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 久久九九精品一区二区| 秋霞久久亚洲精品成人| 日韩情色AV| 操操逼视频| 丝袜av一区二区三区| 国产精品嫩草影院午夜两性| 欧美激情 日韩精品| av网站在线看| 大香蕉伊人亚洲| 乱伦熟妇一区二区| 国产91精品久久久久久久网曝门| 乱性AV| 蜜臀AV成人精品蜜臀| 欧美激情性久久久久久| 91性高| 特级毛片特黄久久免费看| 中文久久96| 国内精品伊人久久久久影院会| 91欧洲入口| 97人人草| 亚洲福利影院一区久久| 中文字幕精品丝袜| 欧美探花网| 啊啊啊不要嗯嗯在线观看| 性爱乱伦网址| 中文 人妻 制服| 97玖玖人妻| 熟妇的味道HD中文字幕| 国产精品高朝久久久久久久| 99热99在线| 色图综合网| 97欧美色资源| 91色久| 日本人妻最新在线中| 中 文字幕一区二区三四 五 区日 日 骚| 国产对白刺激视频| 免费男人的天堂| 97舔舔| 约操熟妇| 欧洲综合色图| 嗯嗯啊好大| 99操视频| 国产精品盗摄 偷窥盗摄| 五月天亚洲网| 天天摸天天插天天日| 国产精品嫩草久久久久| 全国男人天堂网| 老熟女熟妇| 在线观看av区| 熟女激情综合网| 精品少妇一区二区三区| 五月天色图| 激情久久av一区av二区av| 9色国产精品一区粉嫩| 日韩av情韩国爱禁区av一区二区| 看日韩美女二区三区免费操逼视频| 久久黄片国产一区二区| 中国91AV| 色香伊人| yazhousetuoumei| 曰韩av中文字幕专区| 日韩激情无码影院| 精品久久97| 久久久专区| 99999无码| 精品超碰国产| 中文字幕,人妻,日韩| 唯美清纯 妖精视频| 亚洲综合贴图91| 久久久久久久 九九九九九九九| 婷婷中文网| 91人妻最真实刺激绿帽| 久久久久久97| 国产在线激情| 玖玖爱综合网| 精品美女少妇一区二区三区| 曰韩欧美国产传媒麻豆第一区| 入口操逼网站| 老熟妇一区二区三区…| 国产午夜精品在线观看| 欧美日韩欧美| 欧美黑人日韩少妇色情| 色 亚洲 91| 区一在线观看| 91久久精品蜜臀| 色婷婷香蕉| 天天草天天干天天日| 一本久道在线综合视频| 91精品无码久久久久久久| 欧美一级二级三级| 欧美图片校园春色| 亚洲诱惑天堂 | 超碰97最新人妻| 五月天综合网| 国产久久日韩网站导航| 亚洲熟妇乱女区二区三区| 亚洲国产第一页综合视频| 欧美丰满熟妇XXXX性ppX人交| 探花在线免费观看视频国产一区| 韩国一级婬片A片无码天美| 人妻9117c| 岛国A V在线免费看| 亚洲无码视频免费在线观看网址! J?P?NESEHD熟女熟妇伦 | 伊人影院日本| 国产毛片片精品天天看视频| 欧洲精品一级二级精品综合视频综合| 九九九999久久久网站| 蜜桃香蕉久草精品在线| 亚洲蜜臀精品视频久久| 男人天堂最新手机版在线青青草| 亚洲精品国产熟女久久久| 欧美一品道| 日本97久久| 99操逼| 97欧美综合| 欧美色999| 人人人摸人人| 欧美日韩亚洲一区二区在线观看| 天天操天天射天天日| 日本日逼高清| 最新日产中文在线麻豆| www.超碰在线| 久久久久成人蜜桃精品| 日韩乱码Av| 亚州乱码中文字幕综合久久久| 亚洲欧洲精品成人| 熟女网站最新| 欧美性第1页| 成人怡红院| 午夜视频久久久久一区| 操逼操网| 五月开心网| 亚洲情色1区| 色娱乐色呦呦夜夜夜夜av| 2020中文字幕在线| 综合第一页| 国产精品爱欲| av凤凰久久久| 97资源超碰| 亚洲男人的天堂网| 97人人夜| 一级做a爰片性色毛片久久| 伊人久久大香线蕉无码| 狼人久草| 激情欧美日韩女同久久| 97网站在线观看 | 熟女色图在线| 少妇熟女视频一区二区三区| 欧美黑人熟妇精品91| 亚洲男人久久综合天堂| av一区二区三区 中文| 熟女啪啪视频| 精品人妻伦一区二区三区久久| 久久久四区| 精品人妻av在线播放| 久久综合婷婷| 亚洲涩涩| 久久久久久久精| 亚洲精品影视老司机| 久久婷婷一区二| 精品久久九| 九九碰九九爱97超| 欧美顶级黄色大片免费| 又黄又爽在线观看视频| 青木玲在线不卡| 少妇久久久| 精品一区二区亚洲国产| 97免费视频网| 99热这里只有精品18| 看一级特黄a大一片| 久热久一区二区三区| 久久99久久99精品天美传媒棢·纸:.| 久久久性| 99操逼| 熟女91网| 国产曰批免费观看久久久| 天堂蜜桃无码视频一区二区| 91美女视频电影| 一级做a爰片久久毛片图片| 无码色| 热热色青青草| 激情国产乱伦Av| AV天堂男人的天堂| 欧美夜夜| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 超碰导航97| 日韩欧美国产高清视频| 人妻爽爽啪视频| 韩国免费播放一级毛片| 丰满人妻一区二区三区免费,| 久久网亚洲| 啪啪免费| 爱爱久久| 色操逼网| 清清草影| 五月天久久综合网| 91久久午夜无码鲁丝片久久人妻| 另类图片天天影视| 99热精品在线在线| 男同专区一区二区三区在线| 日韩免费性爱视频在线观看| 亚洲色图自拍| 日韩亚洲中文字幕在线| 狠狠躁天天躁日日躁| 中文字幕AV乱伦| 91中文精品日韩欧美在线| 亚洲在线网站| 欧美 传媒 麻豆 日韩 偷拍| 天天上日日上日韩精品| 4141514逼喷水三级片| 天天综合91| 久久色一区| 午夜a成v人电影| 欧美日韩婷婷中文| 日本欧美一区二区三区免费| 天堂综合| 欧美性爱系列| 国产成人精品网站| 中文字幕欧美精品亚洲日韩蜜臀| 亚洲精品国产精品乱码不99| 亚洲区小说| 日日日日日| 新亚洲无码| 色大师网站www永久网站视频| 中文字幕高清精品一区| 亚洲诱惑| 岛国成人av在线播放网址| 美女爽到高潮91| 天天操夜夜操| 尤物av网站免费在线播放| 97看操| 一区三区啪啪| 欧美性色网| 欧美天堂日韩三级国产传媒| 欧美亚洲一级在线观看| 激情文学小说一区二区| 99色在线观看| 人人操人人摸人人骑| 99在线视频播放| 曰韩成人免费视频| 亚洲情欲| 欧美天堂超碰97| 日本网色| 在线免费观看高清无码视频| 久日91在线| 亚洲综合婷婷| 2023天天操夜夜操| 国产精品久久久久久9999| 任你艹| 国产高清精品一区二区三区毛片 | 国产无马在线| 国产丝袜一区二区三区| 99热综合在线| 色欲蜜臀AV| 亚洲久久久久| 五十路人妻在线| 97天天搞在线| 91爆操视频| 天天综合91| 久射吧| 成人女人国产| 337p大胆噜噜噜噜噜91Av| 亚洲码在线中文在线观看| 亚州Av天美传媒| 射丝袜高跟鞋99| 日本午夜久久电影| www.yeyecao| 亚洲精品99999| 麻豆a'v电影| 久久久久久久久九九久孕交| 激情综合亚洲| 91在线视频观看国产| 欧美色偷偷| 色九色久| 激情视频一二三| 久久国色天香香蕉| 激情五月婷婷综合| 中日韩久久久| 国产二区三区免费视频| 青青草大香蕉视频| 啊啊啊啊啊啊啊在线| 欧美亚综合色图| 九九在线视频| 国产 v乱码一区二| 美国黄片aaa| 日本成a人v网站在线观看| 久久黄黄黄| 精品视频久久区| 久久久久久波多野吉衣高潮| 91N欧美| 99爱精品| 日本黄 R色 成 人网站| AV网站高清无码在线观看| 国产狂喷潮在线精品| 国产熟女精品一区二区| 欧美小说区视频区| 国产精品九九| 日日夜夜模| 亚州 综合 色图| 一级黄碟在线观看| 台湾肥佬网一区二区三区| 美国美女AV在线| 亚洲色图91欧美日韩| 大香蕉啪啪网| 色情综合网| 五月丁香激情综合| 思思热在线视频精品| 狠狠综合| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 综合色图亚洲欧美| 天天操夜夜操| 口爆综合网| 亚洲色图亚洲| 青青草福利视频| 国产精品片| 91在线免费精品视频| 看日韩黄片| 91av一区二区在线观看| 超碰国产精品无码| 女同女同恋久久级三级| 国产中文大片资源中文字幕| 免费人成在线观看网站品爱网| 日本高清视频xxxx| 日本三级一区二区 在线| 黄色AAAAA欧美| 333kkkk·亚洲com久久| 嫖老熟女A片一二三区| 美女网站黄页| 三级日韩一区二区三区| 成人一二|