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

ARTICLE DETAIL

資訊詳情

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

MRAM替代EEPROM:瑞薩RA2L1工業(yè)數(shù)據(jù)存儲(chǔ)方案實(shí)踐

MRAM替代EEPROM:瑞薩RA2L1工業(yè)數(shù)據(jù)存儲(chǔ)方案實(shí)踐 做工業(yè)嵌入式設(shè)備的這幾年一提到“存儲(chǔ)和讀取數(shù)據(jù)”很多人第一反應(yīng)就是 SPI Flash 或者 I2C EEPROM??梢坏﹫?chǎng)景變成高頻寫日志、斷電要保數(shù)據(jù)、產(chǎn)品生命周期內(nèi)要反復(fù)擦寫這兩類器件很容易成為整個(gè)系統(tǒng)里最先掉鏈子的部分。我最近在一個(gè)工業(yè)數(shù)據(jù)采集器項(xiàng)目里把這些底層存儲(chǔ)整個(gè)換成了 Everspin 的 MR25H40CDF 磁阻存儲(chǔ)器MRAM主控用的是瑞薩 R7FA2L1AB2DFP搭建了一套適合工業(yè)環(huán)境的數(shù)據(jù)讀寫方案。這篇就完整記錄這顆 MRAM 和這顆 MCU 的配合過(guò)程為什么選了 MRAM、硬件怎么接、FSP 里怎么配置 RSPI、驅(qū)動(dòng)代碼如何組織、以及實(shí)測(cè)中遇到的那些典型問(wèn)題和排查方法。如果你也在做嵌入式數(shù)據(jù)記錄、參數(shù)存儲(chǔ)或者需要頻繁寫入的緩沖類應(yīng)用希望這些內(nèi)容能幫你少走幾步彎路。1. 為什么工業(yè)數(shù)據(jù)存儲(chǔ)偏偏選了 MRAM1.1 一個(gè)簡(jiǎn)單算賬把 EEPROM 的壽命劣勢(shì)攤開以前很多工業(yè)采集板都用串行 EEPROM比如 25LC256、AT24CXXX 之類。EEPROM 不是不能用而是它的擦寫次數(shù)天花板太低低到什么程度呢常規(guī) SPI EEPROM 的擦寫壽命一般是 10 萬(wàn)到 100 萬(wàn)次寫入一個(gè)字節(jié)還要先擦后寫耗時(shí)大概 3 到 5 毫秒。我當(dāng)時(shí)那個(gè)項(xiàng)目現(xiàn)場(chǎng)設(shè)備每 2 秒要記錄一條 16 字節(jié)的工況數(shù)據(jù)。一天下來(lái)就是 43200 次寫入一年就是 1576 萬(wàn)次左右。拿 100 萬(wàn)次壽命的 EEPROM 來(lái)算兩個(gè)月多一點(diǎn)就報(bào)廢了。哪怕把壽命說(shuō)到 1000 萬(wàn)次一年左右也要提心吊膽?,F(xiàn)場(chǎng)反饋回來(lái)的故障也確實(shí)吻合寫失敗、數(shù)據(jù)偶爾丟失、設(shè)備重啟后日志斷檔。這還沒算 EEPROM 的另一個(gè)問(wèn)題寫一頁(yè)和寫一個(gè)字節(jié)的時(shí)間幾乎一樣但頁(yè)編程前必須把整個(gè)頁(yè)擦掉。日志類應(yīng)用往往是隨機(jī)追加、字節(jié)級(jí)修改成本非常高。所以那版設(shè)計(jì)我基本沒猶豫直接上了 MRAM。MR25H40CDF 的寫耐久性典型值是 10 的 14 次方次換算成剛才那個(gè)寫入頻率設(shè)備要跑幾十萬(wàn)年才可能摸到壽命邊界。對(duì)工業(yè)設(shè)備來(lái)說(shuō)基本等于永久。而且它寫數(shù)據(jù)不需要擦除任意字節(jié)直接覆蓋這就把“先擦后寫”的流程徹底省掉了。1.2 MRAM 的技術(shù)底子與 Flash/EEPROM 的差異很多人聽到“非易失性存儲(chǔ)器”腦子里只有 Flash 和 EEPROM。MRAM 的原理和它們完全不同。EEPROM 和 Flash 靠的是浮柵里的電荷電荷會(huì)被慢慢泄漏編程時(shí)還要用電荷泵產(chǎn)生高壓把電子注入進(jìn)去擦除時(shí)再靠隧穿效應(yīng)把電子拉出來(lái)。這個(gè)過(guò)程天生慢而且每一次擦寫都在氧化層上留下一點(diǎn)損傷所以壽命有限。MRAM 用的是磁隧道結(jié)MTJ。存儲(chǔ)單元里有兩層磁性材料中間夾著一層極薄的絕緣層自由層的磁化方向和固定層的磁化方向平行或反平行時(shí)隧道電阻不同對(duì)應(yīng) 0 和 1。寫入的時(shí)候施加電流產(chǎn)生的磁場(chǎng)或自旋極化電流直接把自由層的磁化方向翻轉(zhuǎn)。沒有電荷注入沒有擦除操作翻轉(zhuǎn)完成數(shù)據(jù)就穩(wěn)定了。理解了這個(gè)原理你就能明白為什么 MRAM 在工業(yè)場(chǎng)景里這么香寫入前不需要擦除所以隨機(jī)寫、字節(jié)寫都很快不挑地址。寫壽命極高不用做磨損均衡。非易失性斷電后數(shù)據(jù)不丟而且不存在電荷泄漏的長(zhǎng)期可靠性隱患。讀速度接近 SRAMSPI 接口跑到 40MHz 沒什么壓力。數(shù)據(jù)保持能力通常在 20 年以上。當(dāng)然MRAM 也不是沒有缺點(diǎn)最直接的就是單位容量?jī)r(jià)格比 Flash 高而且大容量型號(hào)選擇少。但在工業(yè)數(shù)據(jù)記錄這個(gè)場(chǎng)景里容量需求往往只有幾十到幾百 KBMRAM 的價(jià)格劣勢(shì)并不明顯可靠性優(yōu)勢(shì)卻是實(shí)打?qū)嵉摹?.3 MR25H40CDF 規(guī)格里最該關(guān)心的幾個(gè)數(shù)字MR25H40CDF 是 Everspin MR25H40 系列里的 SPI 接口 MRAM。我選它最看重的幾個(gè)數(shù)字列一下參數(shù)數(shù)值容量4 Mbit也就是 512 KB組織結(jié)構(gòu)512 K × 8 bit接口SPI支持模式 0 / 模式 3最高時(shí)鐘40 MHz供電電壓3.0 ~ 3.6 V典型 3.3 V寫耐久性典型 10 的 14 次方次寫周期數(shù)據(jù)保持 20 年地址字段3 字節(jié)有效地址 0x00000 ~ 0x7FFFF這里有一個(gè)容易忽略的地方4 Mbit 看起來(lái)不大但 512 KB 劃分成日志區(qū)、參數(shù)區(qū)、緩沖區(qū)已經(jīng)非常夠用。拿每條記錄 64 字節(jié)來(lái)算512 KB 能存 8192 條配合環(huán)形覆蓋設(shè)計(jì)等于一個(gè)掉電不丟失的小型磁盤。命令集也比較簡(jiǎn)單核心就 6 條WREN0x06、WRDI0x04、RDSR0x05、WRSR0x01、WRITE0x02、READ0x03。后面驅(qū)動(dòng)代碼主要就是圍繞這幾條命令展開。2. 硬件接線與 SPI 總線搭建把兩顆芯片接起來(lái)并不復(fù)雜2.1 R7FA2L1AB2DFP 的 RSPI 外設(shè)與引腳分配R7FA2L1AB2DFP 屬于瑞薩 RA2L1 系列Arm Cortex-M23 內(nèi)核主頻 48 MHz有 256 KB Flash 和 32 KB RAM片上帶了 RSPI 串行外設(shè)接口。對(duì) MRAM 這種標(biāo)準(zhǔn) SPI 器件來(lái)說(shuō)不需要什么特殊外設(shè)RSPI 即可。在 FSP 里RSPI 可以配置成主模式引腳一般使用 SCLK、MOSI、MISO 三根線。片選 CS 我建議不要用 RSPI 的硬件 SS而是單獨(dú)拿一個(gè)普通 GPIO 來(lái)控制。原因后面寫驅(qū)動(dòng)時(shí)會(huì)詳細(xì)說(shuō)核心點(diǎn)是 MRAM 的寫使能和寫執(zhí)行需要精確控制 CS 的下降沿和上升沿用 GPIO 軟控時(shí)序最直接可讀性也最好。我的接線示意如下MR25H40CDF 引腳功能接 R7FA2L1AB2DFPCS片選P301GPIO 輸出默認(rèn)拉高SCLKSPI 時(shí)鐘RSPI0 SCLKSI數(shù)據(jù)輸入RSPI0 MOSISO數(shù)據(jù)輸出RSPI0 MISOWP寫保護(hù)接 3.3 V禁用寫保護(hù)HOLD傳輸暫停接 3.3 V禁用暫停功能VCC電源3.3 V并聯(lián) 100 nF 10 uFVSS地GND這里要特別提醒一句接線時(shí)先分清 SO 和 SI別接反了。MRAM 的 SO 是輸出接 MCU 的 MISOSI 是輸入接 MCU 的 MOSI。有些開發(fā)板絲印容易讓人看反我第一版調(diào)試就吃過(guò)這個(gè)虧全部數(shù)據(jù)讀回都是 0xFF排查半天才發(fā)現(xiàn)是 MOSI 和 MISO 交叉了。2.2 CS、WP、HOLD 這些控制腳的接法CS 腳作為片選每次讀寫事務(wù)都要拉低事務(wù)結(jié)束后拉高。這個(gè)腳不能懸空如果 MCU 復(fù)位期間 GPIO 是高阻狀態(tài)外部最好加一個(gè) 10 kΩ 上拉電阻到 VCC保證 MRAM 在系統(tǒng)上電瞬間不被誤觸發(fā)。WP 腳叫寫保護(hù)低電平有效。接低電平會(huì)禁止寫狀態(tài)寄存器和數(shù)據(jù)區(qū)具體行為取決于器件配置但最穩(wěn)妥的做法就是直接接高電平徹底關(guān)掉寫保護(hù)功能。不要讓它懸空工業(yè)現(xiàn)場(chǎng)電磁干擾多懸空引腳很容易被耦合出錯(cuò)誤電平導(dǎo)致寫操作莫名失敗。HOLD 腳是傳輸暫停低電平有效。HOLD 拉低時(shí)SPI 時(shí)鐘和 CS 狀態(tài)會(huì)被器件忽略總線上的數(shù)據(jù)保持外部主機(jī)暫時(shí)沒辦法繼續(xù)通信。這個(gè)腳同樣不能懸空接高電平即可。VCC 旁邊要放 100 nF 的陶瓷電容盡量貼近引腳再加一顆 10 uF 鉭電容做低頻去耦。工業(yè)現(xiàn)場(chǎng)如果電源本身波動(dòng)大建議在電源入口加 TVS 管和磁珠防止繼電器或其他大功率設(shè)備啟停時(shí)把尖峰灌進(jìn)來(lái)。2.3 電路上常見的三個(gè)坑第一個(gè)坑是電平匹配。RA2L1 的 GPIO 和 MRAM 都是 3.3 V 系統(tǒng)直接連接沒有問(wèn)題。但如果你之前用慣了 5 V 的 AVR 或老式 51千萬(wàn)別順手把 MRAM 接到 5 V 上MR25H40CDF 的絕對(duì)最大額定值不允許。5 V 系統(tǒng)必須加電平轉(zhuǎn)換。第二個(gè)坑是 SPI 信號(hào)走線太長(zhǎng)。工業(yè)電路板上如果有電機(jī)驅(qū)動(dòng)、繼電器、開關(guān)電源這些干擾源會(huì)通過(guò)長(zhǎng)走線耦合進(jìn) SPI 總線。調(diào)通之后可以把時(shí)鐘跑到 40 MHz但前期調(diào)試建議降到 1 MHz 到 10 MHz 之間先把功能跑對(duì)再慢慢提速度。40 MHz 下串 33 Ω 電阻可以抑制振鈴具體阻值示波器看波形再定。第三個(gè)坑是 MISO 引腳誤開了內(nèi)部上拉。RA2L1 的 GPIO 可以配置內(nèi)部上下拉如果在 FSP 里把 MISO 配成帶上拉的輸入雖然讀取邏輯上問(wèn)題不大但上拉會(huì)抬高信號(hào)的低電平上升沿高速 SPI 下容易造成數(shù)據(jù)采樣錯(cuò)誤。MISO 建議關(guān)閉上下拉。3. FSP 里配完 RSPI剩下就是命令序列和驅(qū)動(dòng)封裝3.1 用 e2 studio FSP 生成 RSPI 工程瑞薩 RA 系列用 e2 studio 開發(fā)FSP 是它的軟件包配置框架。新建工程時(shí)選擇 R7FA2L1AB2DFP 這個(gè)具體型號(hào)然后在 Stacks 頁(yè)面添加 SPI 驅(qū)動(dòng)也就是 r_spi 模塊。配置項(xiàng)里幾個(gè)關(guān)鍵參數(shù)Operation ModeMaster主機(jī)模式。Frame FormatSPI。Data Bit Width8 bit。SPI Mode模式 0 或者模式 3MRAM 兩種都支持。Bitrate先填 1 MHz跑通后調(diào)到 10 MHz 或 20 MHz 都可以。Bit OrderMSB First。片選不用 RSPI 的硬件 SS用 GPIO 自己控制。生成代碼后工程里會(huì)出現(xiàn) g_spi0_ctrl 和 g_spi0_cfg。主函數(shù)里調(diào)用 R_SPI_Open 初始化一次即可。有一點(diǎn)必須強(qiáng)調(diào)FSP 的 R_SPI_WriteRead 默認(rèn)是異步行為代碼不能裸調(diào)完就立刻拉 CS否則數(shù)據(jù)可能還沒完全從移位寄存器里移出去CS 就拉高了整個(gè)命令會(huì)丟失。我習(xí)慣在配置里開傳輸完成中斷注冊(cè)回調(diào)函數(shù)在回調(diào)里置一個(gè)事件標(biāo)志主流程等待這個(gè)標(biāo)志后再拉高 CS。如果你喜歡輪詢也可以用 R_SPI_EventGet 不斷查詢事件狀態(tài)但回調(diào)加標(biāo)志位的方式更清晰多任務(wù)下也更容易擴(kuò)展。3.2 命令序列從 WREN 到最后的 CS 上升沿MR25H40CDF 的讀寫雖然簡(jiǎn)單但命令順序很講究尤其 CS 邊沿的時(shí)序。先看寫使能 WREN這是所有寫操作的前提CS L 發(fā)送 0x06WREN CS H上升沿寫使能鎖存到狀態(tài)寄存器這一步如果 CS 拉高前數(shù)據(jù)還沒發(fā)完寫使能就不會(huì)生效。所以代碼里發(fā)送完 0x06 之后必須等 SPI 傳輸完成事件再拉高 CS。然后是寫數(shù)據(jù) WRITECS L 發(fā)送 0x02WRITE 發(fā)送 3 字節(jié)地址高位在前 發(fā)送數(shù)據(jù)字節(jié) CS H上升沿執(zhí)行寫入MRAM 的好處是 CS 拉高后寫入立即完成不需要像 EEPROM 那樣等待內(nèi)部編程時(shí)間。寫完可以馬上發(fā)下一條命令也可以馬上讀回驗(yàn)證。但注意每次寫命令之前都必須重新做一次 WREN因?yàn)?WEL 位在一次寫操作完成后會(huì)自動(dòng)清掉。很多第一次用 MRAM 的工程師都會(huì)在這里翻車寫使能只做了一次然后連續(xù)寫多個(gè)地址第二個(gè)地址開始全部寫不進(jìn)去。讀數(shù)據(jù) READ 更簡(jiǎn)單CS L 發(fā)送 0x03READ 發(fā)送 3 字節(jié)地址 持續(xù)發(fā)送時(shí)鐘MISO 上讀出數(shù)據(jù) CS HREAD 命令下地址可以連續(xù)遞增保持 CS 為低就可以一直讀下去直到地址越過(guò) 0x7FFFF 后自動(dòng)回繞到 0x00000。寫數(shù)據(jù)也一樣地址會(huì)自動(dòng)遞增所以批量寫入時(shí)不需要每字節(jié)都帶地址。3.3 驅(qū)動(dòng)模塊設(shè)計(jì)與完整讀寫代碼驅(qū)動(dòng)邏輯我拆成三個(gè)層次底層 SPI 收發(fā)、MRAM 命令封裝、上層讀寫接口。底層只關(guān)心把數(shù)據(jù)發(fā)出去或者收發(fā)同時(shí)進(jìn)行上層接口負(fù)責(zé)地址合法性判斷和分包。先給一個(gè)頭文件定義命令字和地址范圍#ifndef MRAM_H_ #define MRAM_H_ #include stdint.h #define MRAM_CMD_WREN 0x06 #define MRAM_CMD_WRDI 0x04 #define MRAM_CMD_RDSR 0x05 #define MRAM_CMD_WRSR 0x01 #define MRAM_CMD_WRITE 0x02 #define MRAM_CMD_READ 0x03 #define MRAM_MAX_ADDR 0x7FFFFu int mram_init(void); int mram_write_buf(uint32_t addr, const uint8_t *data, uint32_t len); int mram_read_buf(uint32_t addr, uint8_t *data, uint32_t len); #endif再看底層實(shí)現(xiàn)。以 FSP 生成的 g_spi0_ctrl 為例我用回調(diào)方式等待傳輸完成#include hal_data.h #include mram.h #include string.h static volatile bool g_mram_spi_done false; void mram_spi_callback(spi_callback_args_t * p_args) { if (SPI_EVENT_TRANSFER_COMPLETE p_args-event) { g_mram_spi_done true; } } static void mram_cs_low(void) { R_IOPORT_PinWrite(g_ioport_ctrl, PIN_MRAM_CS, BSP_IO_LEVEL_LOW); } static void mram_cs_high(void) { R_IOPORT_PinWrite(g_ioport_ctrl, PIN_MRAM_CS, BSP_IO_LEVEL_HIGH); } static void mram_wait_tx_done(void) { while (!g_mram_spi_done) { } g_mram_spi_done false; } static int mram_tx_bytes(const uint8_t *tx, uint16_t len) { fsp_err_t err R_SPI_Write(g_spi0_ctrl, (uint8_t *)tx, len, false); if (FSP_SUCCESS ! err) { return -1; } mram_wait_tx_done(); return 0; } static int mram_txrx_bytes(const uint8_t *tx, uint8_t *rx, uint16_t len) { fsp_err_t err R_SPI_WriteRead(g_spi0_ctrl, (uint8_t *)tx, rx, len, false); if (FSP_SUCCESS ! err) { return -1; } mram_wait_tx_done(); return 0; }這里提醒一下回調(diào)事件具體名稱取決于 FSP 版本有些版本是 SPI_EVENT_OPERATION_COMPLETE我示例里用的是 SPI_EVENT_TRANSFER_COMPLETE編譯報(bào)錯(cuò)的話改一下宏名就行。如果工程里開了 DTC傳輸完成后的處理邏輯會(huì)略有不同我建議這個(gè)模塊保持最簡(jiǎn)單的中斷模式不開 DTC方便排查。寫使能和讀狀態(tài)static int mram_write_enable(void) { uint8_t cmd MRAM_CMD_WREN; mram_cs_low(); if (mram_tx_bytes(cmd, 1) ! 0) { mram_cs_high(); return -1; } mram_cs_high(); return 0; } static uint8_t mram_read_status(void) { uint8_t tx[2] { MRAM_CMD_RDSR, 0x00 }; uint8_t rx[2] { 0x00, 0x00 }; mram_cs_low(); if (mram_txrx_bytes(tx, rx, 2) ! 0) { mram_cs_high(); return 0xFF; } mram_cs_high(); return rx[1]; }狀態(tài)寄存器最低位就是 WEL讀取后判斷一下能幫我們快速定位“寫不進(jìn)去”的問(wèn)題。寫數(shù)據(jù)接口。我每次最多寫 256 字節(jié)超過(guò)就分包處理。原因有兩個(gè)一是避免在棧上開太大的數(shù)組二是每次寫事務(wù)的時(shí)間可控不會(huì)長(zhǎng)時(shí)間占用 SPI 總線int mram_write_buf(uint32_t addr, const uint8_t *data, uint32_t len) { static uint8_t tx[256 4]; if (addr MRAM_MAX_ADDR || (addr len - 1) MRAM_MAX_ADDR) { return -1; } uint32_t pos 0; while (pos len) { uint16_t chunk (len - pos 256) ? 256 : (uint16_t)(len - pos); uint32_t cur addr pos; tx[0] MRAM_CMD_WRITE; tx[1] (cur 16) 0xFF; tx[2] (cur 8) 0xFF; tx[3] cur 0xFF; memcpy(tx[4], data[pos], chunk); if (mram_write_enable() ! 0) { return -1; } mram_cs_low(); if (mram_tx_bytes(tx, 4 (uint16_t)chunk) ! 0) { mram_cs_high(); return -1; } mram_cs_high(); pos chunk; } return 0; }讀數(shù)據(jù)接口用全雙工 R_SPI_WriteRead 實(shí)現(xiàn)。發(fā)送命令和地址后后續(xù)時(shí)鐘由 MCU 生成同時(shí) MISO 逐位移出數(shù)據(jù)收到的前 4 個(gè)字節(jié)是命令和地址階段的無(wú)效數(shù)據(jù)從 rx[4] 開始才是真正的數(shù)據(jù)int mram_read_buf(uint32_t addr, uint8_t *data, uint32_t len) { uint8_t tx[256 4] { 0 }; uint8_t rx[256 4] { 0 }; uint8_t hdr[4]; if (addr MRAM_MAX_ADDR || (addr len - 1) MRAM_MAX_ADDR) { return -1; } hdr[0] MRAM_CMD_READ; uint32_t pos 0; while (pos len) { uint16_t chunk (len - pos 256) ? 256 : (uint16_t)(len - pos); uint32_t cur addr pos; hdr[1] (cur 16) 0xFF; hdr[2] (cur 8) 0xFF; hdr[3] cur 0xFF; memset(tx, 0x00, 4 chunk); memcpy(tx, hdr, 4); mram_cs_low(); if (mram_txrx_bytes(tx, rx, (uint16_t)(4 chunk)) ! 0) { mram_cs_high(); return -1; } mram_cs_high(); memcpy(data[pos], rx[4], chunk); pos chunk; } return 0; }這個(gè)驅(qū)動(dòng)讀寫?yīng)毩⒎职看?CS 重新建立事務(wù)所以跨 0x7FFFF 邊界的問(wèn)題也分塊堵住了上層不用太擔(dān)心地址回繞。唯一要注意的是靜態(tài)局部變量 tx 讓驅(qū)動(dòng)不可重入如果項(xiàng)目里有多個(gè)任務(wù)同時(shí)訪問(wèn) MRAM記得在外面加互斥保護(hù)。4. 實(shí)測(cè)與排錯(cuò)全 0xFF、寫不進(jìn)去、以及滾寫可靠性4.1 讀回全 0xFFSPI 模式會(huì)和信號(hào)完整性背鍋第一次上板我調(diào)用 mram_read_buf 讀 MRAM 廠商出廠數(shù)據(jù)區(qū)返回的全是 0xFF。這個(gè)現(xiàn)象在 SPI 存儲(chǔ)器件調(diào)試?yán)锾?jīng)典了基本可以按下面的順序排查。先測(cè)電源和地。MRAM 供電要是 3.3 VVCC 和 VSS 之間不能有虛焊。然后用示波器看 CS 拉低后SCLK 上是否有時(shí)鐘輸出。如果 CS 一直高M(jìn)RAM 根本沒被選中數(shù)據(jù)線自然一直高電平讀回來(lái)全是 0xFF。第二步查 SPI 模式。MR25H40CDF 只支持模式 0 和模式 3如果 FSP 里配成了模式 1 或模式 2器件永遠(yuǎn)不會(huì)給出正確數(shù)據(jù)。模式 0 和模式 3 的區(qū)別在于空閑時(shí)鐘電平和采樣沿示波器上一抓就能看出來(lái)。我當(dāng)時(shí)把 RSPI 從模式 0 換成模式 3數(shù)據(jù)立刻正常了。第三步查 MISO。用示波器看 MISO 引腳在 CS 拉低、發(fā)送 READ 命令后MISO 上應(yīng)該有脈沖信號(hào)。如果始終是一條高電平要么芯片虛焊要么 SO 引腳沒接到 MCU 的 MISO。再不行就把 SPI 速度降到 1 MHz排除信號(hào)振鈴。還有一個(gè)容易被忽略的點(diǎn)就是讀狀態(tài)寄存器。上電后正常 RDSR 應(yīng)該返回 0x00。如果 RDSR 返回 0xFF幾乎可以斷定命令根本沒發(fā)進(jìn)去問(wèn)題出在 CS 時(shí)序或 SPI 配置如果 RDSR 返回 0x02 之類說(shuō)明 WEL 處于置位狀態(tài)可能是上次寫操作后沒清這本身不算故障。4.2 寫不進(jìn)去先查 WEL 位再查 CS 邊沿全 0xFF 的問(wèn)題解決后緊接著遇到寫不進(jìn)去調(diào)用 write_buf 再讀回來(lái)數(shù)據(jù)跟寫之前完全一樣。這個(gè)時(shí)候第一件事就是查 WEL。我在 mram_write_enable 后加了一個(gè)斷言函數(shù)讀 RDSR判斷 bit0 是不是 1。如果置位失敗說(shuō)明 WREN 命令沒被正確執(zhí)行。常見原因有兩個(gè)第一個(gè)是傳輸沒完成就拉高了 CS。代碼里用 R_SPI_Write 發(fā)送 0x06 后如果沒有等待事件標(biāo)志而立刻 cs_high在 SPII 高速率下0x06 可能只說(shuō)了一半CS 就上去了。解決方式就是前面驅(qū)動(dòng)里寫的發(fā)送后必須等 g_mram_spi_done 標(biāo)志置位再拉高 CS。第二個(gè)是 WP 腳被拉低了。WP 拉低會(huì)讓器件進(jìn)入寫保護(hù)狀態(tài)WREN 命令本身雖然能發(fā)但 WEL 可能不會(huì)被正確置位或者即使置位了后續(xù) WRITE 也會(huì)被拒絕。所以先量一下 WP 引腳電壓確認(rèn)是高電平。如果 WEL 已經(jīng)是 1但 WRITE 還是寫不進(jìn)去就要查地址對(duì)不對(duì)。MR25H40CDF 只有 19 位有效地址最高地址是 0x7FFFF如果地址算錯(cuò)寫到了非法區(qū)域器件不會(huì)報(bào)錯(cuò)但數(shù)據(jù)也進(jìn)不去。我總是先用固定地址比如 0x00000 來(lái)測(cè)試寫一組 0x5A 5A 5A 5A讀回比對(duì)最大限度減少變量。最后還要注意一個(gè)時(shí)序細(xì)節(jié)寫命令的數(shù)據(jù)字節(jié)必須在 CS 上升沿之前全部發(fā)完。對(duì)于 MR25H40CDF寫入動(dòng)作就是 CS 上升沿那個(gè)瞬間提交的如果你在發(fā)送數(shù)據(jù)的中途就拉高 CS這次寫入會(huì)失敗或者只寫入半個(gè)字節(jié)。用示波器抓 CS 和 SCLK 的關(guān)系確認(rèn) CS 拉高前最后一個(gè)數(shù)據(jù)位已經(jīng)穩(wěn)定這比盯著代碼猜靠譜得多。4.3 百萬(wàn)次滾寫與掉電回讀測(cè)試驅(qū)動(dòng)調(diào)通之后真正的考驗(yàn)才開始。我寫了一個(gè)壓力測(cè)試固件對(duì)固定地址反復(fù)寫入遞增計(jì)數(shù)每次寫完立即讀回校驗(yàn)并使用軟件 CRC32 做數(shù)據(jù)完整性判斷。日志通過(guò)串口輸出。測(cè)試結(jié)果很直觀260 萬(wàn)次滾寫全部通過(guò)沒有一次讀回錯(cuò)誤。這個(gè)數(shù)字對(duì) EEPROM 來(lái)說(shuō)已經(jīng)是不可想象的任務(wù)對(duì) MRAM 來(lái)說(shuō)只是熱身。我也用示波器同時(shí)觀察了 SPI 波形寫操作完成后 CS 上升沿到下一次命令發(fā)起之間沒有額外延時(shí)說(shuō)明 MRAM 確實(shí)不需要內(nèi)部寫等待。掉電測(cè)試更有意思。我在主循環(huán)里周期性寫一條 64 字節(jié)記錄然后人為隨機(jī)斷電再重新上電掃描 MRAM 里的記錄區(qū)檢查每一條記錄的 magic、長(zhǎng)度和 CRC。因?yàn)?MRAM 的寫入是原子提交每次結(jié)果要么是完整的舊記錄要么是完整的新記錄沒有出現(xiàn)半條記錄混雜的情況。這正是工業(yè)掉電場(chǎng)景最需要的特性。高低溫方面我用熱風(fēng)槍把板子加熱到 105℃ 左右持續(xù)運(yùn)行再放回常溫驗(yàn)證數(shù)據(jù)讀寫均正常。有條件的話建議做一輪完整的 -40℃ 到 85℃ 溫度循環(huán)工業(yè)級(jí)存儲(chǔ)器件在這種條件下反而比消費(fèi)級(jí) Flash 穩(wěn)定得多。5. 工程化思考掉電保護(hù)、容量規(guī)劃與跨平臺(tái)遷移5.1 掉電瞬間怎么寫不丟MRAM 本身是非易失的但“非易失”不代表“掉電時(shí)正在寫的操作也一定能完成”。真正的工程問(wèn)題是當(dāng)電源開始跌落而 MCU 恰好正在往 MRAM 寫數(shù)據(jù)這個(gè)事務(wù)到底能不能完整提交。我建議從兩頭發(fā)力。第一硬件上在系統(tǒng)電源端加掉電檢測(cè)。RA2L1 自帶低電壓檢測(cè)模塊也可以外接 TPS3839 之類的電壓監(jiān)控芯片當(dāng) VCC 低于 3.0 V 時(shí)觸發(fā)中斷或復(fù)位。第二固件里把關(guān)鍵數(shù)據(jù)維護(hù)成“鏡像”。比如環(huán)形日志區(qū)先寫入記錄正文和 CRC全部成功后再更新日志頭里的寫指針。掉電發(fā)生在新記錄寫了一半時(shí)上電后頭部指針還指向上一條記錄新記錄雖然空間占用了但不會(huì)被當(dāng)作有效記錄也不會(huì)破壞舊數(shù)據(jù)。MRAM 寫 512 字節(jié)在 20 MHz SPI 下大概是 200 微秒左右加上命令和地址開銷也不到 300 微秒。如果 MCU 的掉電檢測(cè)能在電壓跌落到器件最低工作電壓之前留出 1 毫秒那么寫一兩條關(guān)鍵記錄完全來(lái)得及。真正要避免的是在電源已經(jīng)不穩(wěn)的時(shí)候還去做耗時(shí)的讀改寫流程所以掉電中斷里只做最精簡(jiǎn)的寫操作。5.2 磨損、容量與緩沖區(qū)規(guī)劃MRAM 雖然壽命極高但它也有自己的“寫周期”概念。一次完整的 CS 上升沿提交算一個(gè)寫周期無(wú)論寫 1 字節(jié)還是寫 256 字節(jié)都是消耗一次。所以真正高效的用法是數(shù)據(jù)攢夠一包再寫而不是每來(lái)一個(gè)字節(jié)就發(fā)起一次事務(wù)。這樣做還能減少 SPI 總線占用和調(diào)度開銷。容量規(guī)劃方面512 KB 需要想清楚分區(qū)。我習(xí)慣把 MRAM 分成三個(gè)區(qū)域區(qū)域大小用途參數(shù)區(qū)4 KB設(shè)備配置、校準(zhǔn)參數(shù)低頻寫日志索引區(qū)4 KB寫指針、讀指針掉電恢復(fù)依據(jù)循環(huán)日志區(qū)剩余空間環(huán)形數(shù)據(jù)記錄高頻覆蓋寫參數(shù)區(qū)低頻寫入用雙緩沖加 CRC 防止更新過(guò)程中掉電。日志索引區(qū)單獨(dú)劃出來(lái)是因?yàn)槊看螌懭胗涗浐蠖家轮羔樔绻羔樅陀涗浕煸谝黄馂?zāi)難恢復(fù)會(huì)非常麻煩。主日志區(qū)做環(huán)形緩沖滿了以后覆蓋最舊記錄這樣 MRAM 的寫壽命被分散在整個(gè)區(qū)域而不是集中在一個(gè)地址上。如果設(shè)備需要保存較大的波形數(shù)據(jù)或批量事件512 KB 可能不夠那就需要考慮把 MRAM 換成功耗更高的 SPI NOR Flash或者加 SD 卡。但請(qǐng)注意這種擴(kuò)容通常會(huì)犧牲隨機(jī)寫入壽命和寫速度本質(zhì)上是用復(fù)雜度換容量不是所有場(chǎng)景都劃算。5.3 換個(gè) MCU 怎么辦MR25H40CDF 是標(biāo)準(zhǔn) SPI 命令集和主控品牌沒有綁定關(guān)系。RA2L1 用 FSPSTM32 用 HALNXP 用 SDK底層函數(shù)各不一樣但上層邏輯完全可以原樣搬走。我在驅(qū)動(dòng)設(shè)計(jì)時(shí)就把硬件有關(guān)的操作收斂成了幾個(gè)內(nèi)部函數(shù)mram_cs_low、mram_cs_high、mram_tx_bytes、mram_txrx_bytes、mram_wait_tx_done。換平臺(tái)時(shí)只需要重寫這五個(gè)函數(shù)的實(shí)現(xiàn)mram_write_buf 和 mram_read_buf 不需要?jiǎng)?。如果換成帶硬件 CS 的 MCU我還是堅(jiān)持用 GPIO 軟控 CS因?yàn)?MRAM 命令序列對(duì) CS 邊沿的要求比較明確軟控不受外設(shè)自動(dòng)控制邏輯干擾出問(wèn)題也好定位。另外提醒一點(diǎn)不同 MCU 的 SPI 時(shí)鐘極性命名可能不同。ST 的 HAL 里 SPI_MODE0 是 CPOL0、CPHA0SPI_MODE3 是 CPOL1、CPHA1。瑞薩 FSP 里同樣用模式 0/模式 3 命名但有些老工程師習(xí)慣叫“空閑時(shí)鐘電平高還是低”這時(shí)候直接看寄存器定義最安全。這次把存儲(chǔ)介質(zhì)從 EEPROM 換成 MRAM改動(dòng)的代碼量并不大但帶來(lái)的是整個(gè)系統(tǒng)可靠性的明顯提升。如果非要說(shuō)留下什么經(jīng)驗(yàn)我會(huì)記下三條第一MRAM 不是 Flash別再用擦除的老思路第二CS 邊沿的時(shí)序比命令字本身更關(guān)鍵第三測(cè)試存儲(chǔ)器件一定要在真實(shí)寫頻和掉電條件下跑而不是寫入一次讀一次就算驗(yàn)證完成。后面如果再遇到類似的工業(yè)數(shù)據(jù)記錄需求我還是會(huì)優(yōu)先看這類 MRAM 方案。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲色天| 天天操天天射青青草| 蜜臀av在线播放一区二区三区| 亚洲成人一区二区精品| 熟女自慰久久久| 99999精品| 亚洲一区操| 久久精品国产97欧美精品亚洲| 岛国毛片在线观看免费| 高树玛利亚无码流出| 中文字幕久久婷婷丁香五月天| 色香阁在线| 射综合网| 久久九七| 欧美亚男人的天堂| 亚洲免费成人在线高清无码视频| 夜夜草天天| 啊啊啊啊啊啊啊啊啊啊在线观看| 欧美99| 91亚洲在线| 区一在线观看| 97人人超| 日韩精品资源专区二区| 色图综合| 99re在线视频这里只有精品| 欧美最婬乱婬爆婬性视频| 国产男女无套视频免费观看| 美女熟妇色| 亚洲91色| 色噜噜人妻av中文字幕| 欧美肥臀在线| 一区=区三区视频| 色噜噜国产在线| 99久久九九| 老司机天天操| 日韩15p| 成人免费不卡在线视频| www.超碰在线| 久久久啊啊啊| 狼人久草| 超碰人人干| 日本www操操操| 九九九网站| 抽插一区二区视频| 麻豆一区二区AV天美| 九九热九九热| 91老熟女逼| 日本天天人人狠狠在线日美女| 99日韩| 97色婷| 欧美性特| 中文熟女五十乱码在线| 激情图片伦理国产一区二区日韩| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 亚洲精品色| 夜草网站| 男人天堂电影院| 941超碰| 婷婷九月丁香| 91久久久久| 日夜精品| 欧美日韩1234| 久久xxxx| 搡老女人老91妇女老熟女| 高清国产成人无码| 日逼国产| 无码久久国产| 国产一区二区三区久久久精品| A片A5445444| 国产综合久久久麻桃个| 免费αV在线视频| 成人无遮挡毛片免费看| 91色色色| 男人天堂日日夜夜| 久久久久大香青草精品综合| 精品国产72| 啊嗯嗯啊好大好爽| 亚洲色棕合| 色姑娘综合网| 欧美日日网| 天天摸夜夜操视频| 亚洲有码第一页| 天天日日日射| 90后后入| 91一起操| 中文日韩欧美熟| 熟妇女伦乱视频| 国产乱伦亚洲色图高清无码| 无码少妇精品一区二区60岁老人| 婷婷AV一区二区三区| 超碰三级秋霞| 天天综合网视频91| 欧美亚洲素人制服精品| 欧美操逼熟女| 东京热一区二区三区四区五区六区| 天美传媒AV在线播放| 黑人与人妻| 99亚洲天堂| 96超碰网| 国语国产操逼伊人AV网| 九九九国产精品| 高清国产精品无码| 99re这里只有精品3| 91亚洲情色| 久久久久久AⅤ无码免费肉站 | 人人艹亚洲| 欧美日韩大香蕉| 欧美色视频在线| 亚洲成人妻日韩在线| 蜜桃精品一区二区三区ww| 91亚洲人| 精品国产乱子伦一区二区三区,精品一| 亚洲黄a三级三级三级看三级| 亚洲久久久久| 超AV色女| 日韩成人无码| 久久9亚洲| 一区二区三区国产在线播放 | 中文字幕精品亚洲熟女| 国产亚洲精品农村妇女| 天天看片麻豆| 97超级久久| 亚洲精品无码久久AV| 口爆欧美91| 老司机福利青青草| 极品极品色影院| 国产乱码久久久久久| 一区二区三区看视频| 日韩福利综合一区| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 老司机福利青青草| 日本熟女不卡视频| 婷婷五月色| 超碰九7免费| 九九热精品视频在线观看| 好湿好紧视频| 亚洲欧美自拍偷拍| 色婷婷aV一区二区三区麻豆综合| jizz啪啪| 伊人久久亚洲色欲综合网站| 九九色色| 天天操夜夜操狠很操| 97色妞| 日本欧美韩国国产在线| 偷拍盗拍亚洲色图图片| 超碰人人乐97| 黑人精品成人一区二区三区| 青青草影视蜜久久| 亚洲欧洲偷拍一区| 日韩操逼性鲍| 91蜜臀人妻中文字幕在线| 91视频国品一二三区| 亚洲色图自拍| 大香蕉伊人色偷偷在线| 美女视频尤物网在线看| 噜噜噜噜天天狠狠| 亚洲国产剧情少妇激情| 五月天玖玖资源站| 91无摭挡| 三级片大波波| 操91| 中国熟女老妇仑乱一区二区三区| 大香蕉青青9| 99热这里是精品| 大屁股人妻女教师撅着屁股| 欧美另类精品xxxx| 囯产精品久久久久久久久久二区三区| 伊人96在线| 青青操97| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | av在线人气| AV无码久久久精品| 亚洲色人| 亚洲av无码成电影在线播放| 九九九综合精品| 91人妻在线视频| 欧美日本不卡| 久久只有精品一区二区三区| 黄色视频特级毛片| 78久久| 青青草国产盗摄一二三区| www.夜夜| 色色激情五月天| 天天干天天操天天干天天操| 亚洲精品尤物yw在线影院| 黑丝少妇在线观看| 天天干人人干天天日97| 在线日韩日本亚洲国产| 青草伊人网| 午夜毛片高清免费不卡| 久久久久一本一区二区青青蜜月| 女优视频第10页| 日韩午夜精品一区二区三区电影| 第四色奇米影视777| 亚洲熟女av中文字幕| 欧美成人AⅤ大片在线观看| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亚洲乱伦图片视频| 久久香蕉国产线看观看猫咪av| AV天堂国产| 高清一区AV无码| 国产97在线视频| 亚洲图片小说欧洲| 欧美亚洲今日在线| 白丝一区| a片自拍直播视频| 欧美男人的天堂| 偷拍新久久| 中文字幕久久精品一区| 欧美激情亚洲情色| 亚欧美综合| 人妻丝袜无 码视频专区| 自拍偷拍 日韩无码| 强奸乱伦动态污图免费 | 2024人人操人人摸| 狼人久草| 97 亚洲 日韩 欧美 在线| 久久久精品国产亚洲伊人| 欧美一级三级| 亚洲狼狼干综合1| 性夜影院爽黄A爽免费动漫| 国产精品香蕉| 国产一区在线观看无码AV| 国产精品嫩草久久久久| 成人短视频在线观看| 麻豆人妻精品一区二区| 十八禁黄色成人网站观看| 亚洲欧美另类少妇精品| 国内一区二区三区| 97视频在线免费观看| 野狼激情网| 青青草吊丝| 欧美国产一区二区三区麻豆传媒| 人妻人久久精品中文字幕| 男女啊啊啊| 九九热视频这里只有精品| 91色图片| 97伊人超碰| 99人妻| 成全在线观看免费观看| 欧洲熟妇xxXx欧美老妇裸体| 大香蕉伊人在线成人AV在线观看| 亚洲自拍青操视频| 91另类| 亚洲,日韩,欧美,成人播放| 国产欧美日韩精品中文| 中文字幕在线24| 91丝袜激情在线| 嗯嗯啊啊啊好舒服| 人妻丰满熟妇av无码区蜜桃| 国产成人精品必看| 国产乱伦性爱AV| 亚洲情色一区三区| 午夜亚洲| 国产精品久久久久久久久AV大片| 日韩熟女精品无码专区一区二区 | 欧美三级一级| 国产精品97超碰| 91无遮挡| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 亚州再线| 91日韩国产欧美亚洲另类精盘州至城都| JIZZJIZZ亚洲女人被躁| 日本人妻一区二区| 熟女少妇视频| 97摸视频| 大香蕉92| 天天操天天射天天日| 五月天丁香欧洲日韩| 久久后入制服| 亚洲精品xxx| 偷拍 精品 另类 四区| 综合网97| 久久久久亚洲AV无码专区少妇| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 青青国产在线拍揄自揄拍| 日韩一级二级三级| 日本在线播放不卡一区| 欧美国产操逼| 老鸭窝成人免费毛片视频| 国产1769在线| AV中文字幕剧情1区2区3| 精品一区二区三区国产| 天天影视网综合少妇| 亚洲影视第一页| 欧美一级久久久久久久大片动画| 午夜天堂精品久久| 精品人妻免费观看| 爱干爱射网啊啊啊| 超碰97久久| 亚洲 欧美 91| 性综合网| 国产精品视频电影| 亚洲一级黄色毛片| 色狠人在线99| 操逼视频色| 日韩电影天堂视频二区三区| 亚洲中文一区二区三区| 亚洲精品不卡一二三区| 黄片免费久久久久久久| 欧美丰满少妇交换91欧美精品| 亚欧成人中文字幕一区| 91在线国产后入风骚翘臀美女素人| 郑州宾馆老熟女露脸啪啪| 欧美少妇高潮久久91| 污污汅18禁网站在线永久免费观看| 色情亚洲日本成人| 亚洲黄色a级片| 本道在线| 色色色网站| 69精品| 日韩AV一区二区三区三州三州| 亚洲欧美日韩制服另类| 色网在线| 九月丁香婷婷| 欧美片第一页| 99热线麻豆 | 久久老女人| 天操老女人| 麻豆区久久久久亚| 亚洲欧美精品福利在线| 黄页av| 91精品电影18| 天天色黄色影院天天操| 夜夜做夜夜爽精品视频| 综合网亚| 婷婷五月成人| 乱伦色图网址是多少| 97久久国产亚洲精品超碰热| 亚洲熟妇自偷自拍另欧美| 国产成人超碰在线| 中文欧丝袜诱惑| 色情成人五月天| 国产粉嫩蜜臀av一区二区三区 | 亚欧无码线免费观看视频| 先锋音影AV| 欧美日韩操逼嗦吊| 五月天我淫我色av| 东京热,男人的天堂| AV色天香在线| 97操在线| 91美女视屏| 在免费jIzzjIzz在线视频| 久久这里只有精品9| 欧美色天堂网在线视频| 色综合美国| 国产99久久99热这里只有精品15| 久久神马| 久久黄黄黄| 国产盗摄美女如厕大神作品在线观看| 五月色网| 色欲蜜臀AV| 网友自拍第一页| 欧美激情亚洲情色| 久久久久久中文版| 大香蕉伊利av| 99精品在线观看| 国产精品不卡av免费在线观看| 尤物av网站免费在线播放| 日本视频在线观看污污污| 色欲av国内精品久久久久久| 91精品操美女| 欧美韩国你懂得在线 | 中文字幕88av在线| 亚洲人精| 又黄又爽在线观看视频| 立川理惠加勒比无码| 又大又长又粗又爽又黄| 岛国福利在线精品播放| 国产一级舔足在线观看| 国产60页| 亚洲高清视频在线免费观看| 亚洲精品97| 91第一页| 亚洲色图一区二区三区| 精品欧美老熟女一二区| 搡老熟女免费视频 | 日韩国产在线观看av| 飘花国产午夜精品不卡| 一区操逼日比视频| 高清无码 国产精品| 国产强奸乱伦xd| 成人性爱AV在线免费观看| 免费视频在线一区二区不卡| 亚洲一区日韩精品| 涩综合导航| 国产在线观看91精品一区| 综合伊人激情| 国产精品爽爽v| 天天做日日做| 一级啊性爱在线视频| 一级黄色牲爱A级片| 无码精品人妻一区二区三区妖精| 乱欲一区二区| 欧美激情综合色综合啪啪五月| 玖玖色综合| 嗯嗯嗯好爽| 熟妇视频一区二区三区在线观看| 欧美人妻色| 亚州欧美综合| 亚洲精品成人动漫在线| 青娱乐亚洲自拍| 中日韩欧美精品无码AⅤ一区二区| 亚洲强奸乱伦影视网| 第一高清av中文字幕| 99色视频| 精品人妻视频一区二区三区蜜桃视频| av久日| 精品丰满熟妇人妻一区| 丁香七月婷婷| 亚洲九月丁香| 天天摸天天插天天日| 免费网站观看www在线观| 日韩精品作爱导航| 96久久久久久久| 成人小说另类在线| 人妻精品一区二区在线| 精品福利视频| 在线播放中文字幕| 激情五月综合开心五月| 717影院理论午夜伦八戒| 爽爽歪在线视频| 97超视频在线观看| 91色香| 性在久久久久久| 五月婷在线| 熟女一区二区三区| 久久国产成人精品国产成人亚洲| 久久成人国产| 嗯嗯嗯啊啊啊操的我好爽| 精品一区99999| 日韩操啪| 中文字幕第页| 巨乳特殊服务按摩| 99热99在线播放激情| 日韩pv中文| 日韩精彩视频| 欧美日产国产在线成人第一区| 99热色精品| 天天爱综合网| 免费?级毛片无码?∨蜜芽试看| 91美女丝袜诱惑视频| 性性久久| 综合激情二| 青青操青娱乐| 欧美色图片色哟哟| 国产 v乱码一区二| 超碰97久久国| 上海一级黄片| 手机在线视频国内精品| 伊人久久婷婷| 加勒比综合a∨| 久9re热视频这里只有精品| 欧美日韩91| 97超碰免费生活| 肏逼福利网站| 五月婷婷六月丁香| 人人操超碰在线| 约操熟妇| 日韩精品电影| 欧美激情性爱视频网站| 丝袜美腿校园春色| 成人无码在线超碰网| 天天看片天天爽| 天天92av| 天综合中文| 777超碰| 五月丁香婷婷综合网| 欧美国产操逼| 欧美性爱精品七区| 青青草视频久久久久| 97在线免费观看视频| 色色婷婷丁香| 91爱网| 九九热精品免费视频| 夜夜精品视频| 少妇天堂网络| 强奸乱伦AV网站| 亚州欧美一区| 99色天堂| 免费成人自拍视频在线| 欧美高潮在线| 偷拍自拍在线视频观看| 亚洲第一页色网| 欧美精品第3页| 屁股久久久久久| 久久9亚洲| 午夜.DJ高清在线观看免费7| 亚洲久草AV色图| 天天肏夜夜肏| 乱伦日本中文自拍| 2026国产精品视频| 九九热精品视频在线观看| 99re在线| 天天躁狠狠躁av| 99精彩视频| 日韩国产精品人妻无码久久久| 三上制服丝AV| 久久久97| 日韩在线欧美精品一区二区| 日韩色图 一区二区| 色色五月天婷婷| 精品无码一区二区三区| 欧美色图97| 999在线电影香蕉| www.yeyecao| 一级AAA片一区二区三区| 九九热精品在线| 一起草日韩| 嗯嗯不要视频| 97超级色碰碰| 国产天天骚| 首页中文字幕中文字幕免费| 日韩熟女三十乱伦| 淫纸中9区| 一牛一区二区三区久久| 日韩精品一区二区三区四虎影视| 国产高清精品一区二区三区毛片 | 69精品| 经典丝袜一区| 熟妇人妻一区二区三区| 91模特在线观看| 久久综合久久综合人久久夜精品| 黄色高清无码无码破解免费暗网| 黑人娇小av在线播放| 国产乱子伦一区二区三区免看| 人妻激情偷乱视频一区二区三区 | 90后性网国产欧美| 嫩草美女久久| 2024黄色视频| 久久伊人影院| 后入日本1234| 中文久久96| 在线天堂999| 午夜免费视频1000| 国产欧美日韩在线不卡第一页 | 久久精品高清无码一区| 精品无吗久久| 日本天天人人狠狠在线日美女 | 屁股久久久久久久久| 欧洲乱码一区二区| 女同在线视频一区| 激情久久久| 无遮挡h肉动漫在线观看| 99视频这有这里有精品| 久久国产成人精品国产成人亚洲| 九九九九亚洲| 亚洲一区二区中文字幕| 久久精品无码熟妇一区二区三区视频导航 | 九久久九精品视频| 殴美牲| 久久久一级| 国产成人+综合亚洲+天堂| 国产精品岛国片在线观看| 夜色AV无码手机在线影院| 欧亚第一综合网| 国产美脚女优尤物在线观看| 日韩黄色片子| 久热精品色情| 欧美另类天堂| 欧美综合综合| 97色操| 安微少妇操BBB| 日韩熟女视频二区| 超碰9 7女人| 密臀成人视频久久久| 久久亚洲日韩国产欧| 熟妇高潮二区三区| 欧美草草高清日韩视频| 中文字幕一区二区无码成人| 蜜桃久久一区二区| 91国产操逼视频| 日B操| 久久国产性爱| 欧美刺激色黄片免费看| 日韩久久三区| 人人污日韩一区二区| 日日干夜夜操视频h| 性性欧美| 96一区二区三区| 亚洲图片第一页| 成人av性爱电影在线观看| 一级@啪啪视频| 97国产高清视频在线观看| 免费综合亚洲中文| 女同亚洲欧美一二三区久久电影| 宗合情欲网| 任我爽在线视频免费观看| 人妻蜜桃臀| www国产无码| av日韩国产一区二区| 国产精品老师| 91国产大片| 1204人成网站色www| 久久精品黄色| 亚洲一卡2卡3卡4卡乱码网站| www五月| 欧美亚洲美少妇一区二区| 亚洲图片视频小说| 亚洲无码国产探花在线观看| 国产小u女在线观看| 欧插网站| 欧美第五页| 欧美呦呦性爱| 屌色在线97视频| 久久草视频污视频| 超碰91在线| 精品一区二区人妖| 久久久久久久久九九久孕交| 久久久久熟女| 97人人操人人摸人人爱| 亚洲国产综合久久天堂| 东京热,男人的天堂| 免费黄色片。| 91啪9色| 亚洲黄色电影| 熟女精品va中文字幕| 草b在线 | 狠狠操狠狠操操| 国产女性无套 免费观看| 亚洲熟妇一,二,三期| 免费αⅴ在线观看| 欧洲亚洲国产综合在线| 99色| 狠久久| 伊人久操| 超碰久在线天天做| 性暴力欧美猛交在线直播| 色欧美天天| 国内毛片四区| 色婷五月| 色亚洲欧美| 图片区小说区| 亚洲丰满很很操| 岛国网址国产 | 91色交| 亚洲第一页色| 亚洲美女精品九九视频| 噜噜噜无码AV一级一级久久影院| 98超碰日本| 久久中文字幕一区不卡| 一区二区 日韩 欧美 国产 传媒| 婷婷色综合欧美日韩| 久久久久13| 欧美97色| 国内91熟女人妻丝袜天天精品视频在线| 婷婷20月天青娱乐| www狠狠| AV色女综合| 九九在线视频| 七月婷婷综合| 蜜桃视频一区二区三区在线观看| 久久欲| 一区二区三区四区久久视1| 1769国内精品视频| 大香蕉欧美国产日韩高潮| 国产成人自拍视频视频| 人人噜夜夜操| 国产成人bd在线观看| 亚洲影视第一页| 99热国产精品| 亚洲第一页综合在线| 色呦色呦色精品| 婷婷五月天激情四射| 小日子操bb在线看| 啊啊啊不要啊啊受不了了视频在线| 激情五月天社区| 五月天开心网| 三四中文字幕| 一区二区三区无卡视频在线观看| 蜜臀av网址| 日本精品五区| 嫩草影院性色| 春色综合免费| 久热69九色熟妇97| 91精品国产91综合久久蜜臀| 91欧美偷拍| 奇米狠999| 91精品导航| 97人人中文网| 嫖老熟女A片一二三区| 蜜臀99精品国产高清在线观看| 亚州操操穴网| 啪一啪免费视频| 91亚洲人| 超碰97欧美日韩| 欧美综合站| 亚洲精品xxx| 久久啊啊啊| 99国产精品久久久在线播放| 久热这里| h无码动漫在线观看| 日本在线不卡v二区| 精品成人无码| 美女高潮视频91| 日韩中文字幕国产| 操逼内射干逼白丝91| 国产精品不卡高清在线观看| 91 刺激在线| 国产熟女无套内射| 久久99草| 狼人综合婷婷激情四射 | 丁香五月激情综合| 精品中文字幕第一页| 国产熟女无套内射| 91处女在线视频| 日韩av三四区| 国产 日韩 欧美 人妻 熟女 中文| 国产亚洲精品激情| 偷拍综合网| 国产伊人精品在线| 欧美人人天天网| 啊a一区在线| 激情综合五月| 丰满人妻一区二区三区大胸懂色| av网站免费线看| 九热久| 久久久少妇诱惑精品视频| 操人妻逼91| 射 色综合| 九色婷婷| 中文字幕日本久久| 中文字幕亚洲热播人妻| 日韩人妻一区二区| 夜夜爽夜夜爽| 日本大香蕉综合网| 美女91网| 91青青在线| 天天天做天天天爱天天天爽| 日日摸日日碰| 天美精品一区二区三区四区在线观看| 黑丝91视频| 九九热精品在线| 亚洲有薄码区日本系列中文字幕| 一区二区激情国产熟女| 婷婷综合五月| av一区二区三区 中文| 在线精品福利免费播放| 日本激情免费大片| 丁香五月综合| 国产女生在线| 成人av动漫在线观看| 黄片在线免费在线观看| 国产成人精品亚洲日本| 国产一区二区视频在线播放| 欧美成人一区二区三区在线播放| 91精品无码人妻系列| av日韩在线观看电影| 欧美日本国产日韩激情视频| 亚洲成熟国产精品美女| 户外裸露刺激视频第一区| 日韩激情中文字幕有码| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 久久久久中出| 欧美 综合| 噜噜噜亚洲精品| 九九九九九九九九九九九蜜桃| 玖玖超碰熟| 性感美女91影视| 亚洲91色| 18禁无码永久免费无限制| 看大黄色大片原件| 精品国产www久久| 久久婷婷视频| 极品白嫩福利在线| 日本九九久久99| 欧美另类天堂| 亚洲av青草久久一区二区| 日韩精品在线放| av午夜影院在线播放| 欧美顶级黄片AAAAA在线免费看| 99热综合| 久久97资源 网| 亚洲。天堂。日本在线观看| 狠狠入| 国产兽交视频在线播放| 国产一区二区欧美日本| 校园春色 男人天堂| 亚洲免费日韩在线一区二区| 后入式999| 超碰97久久| 国产精品自在线发布| 偷拍欧美综合| 麻豆传媒一区二区在线观看| 久久精品—区二区三区内射| 国产最新小视频在线播放下载| 国产精品青草综合久久| 殴美综合色88| 性生活性生大爱77AV国产| 乱伦一二三| 国产在线视视频有精品| 青青草伊人久久| 青草伊人网| 国产精品原创巨作?v网站| 亚洲天堂 视频你懂的| 5252色欧美在线| 91狠狠综合久久| 久久久久免费看少妇A片特黄| 九九激情网| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 亚洲 在线| 97欧美性爱| 天天亚洲综合| 日韩熟女精一区二区三区不卡| 嗯啊抽插大香蕉网页| 久久精品视频久久久| 色牛牛AV| 国产午夜精品理论片一二三区区| 91国模| 一起草日韩| 97中文天堂| 深爱伊人影院| 国产精品无码av| 96AV久久久| 欧美乱欲| 婷婷综合| 亚春色色| 破苞ⅩXXX性无码动漫无码| 人妻无码后入| 1769成人国产精品视频| 婷婷综合五月天| 久久久一二三四区| 日韩国产乱子伦App| 日本一区99| 亚洲一区二区三区春色| 亚洲高潮少妇| 国产日本顶级一区二区三区| 国产一区二区三区精品观看啪| 国产精品suv一区| 久久久久亚洲熟妇熟女| 宅男91视频在线播放| 伊人麻豆传媒| 婷婷五月天伊人| 97超碰欧美精品| 99视频内射三四| 嗯嗯啊啊啊好爽| 色区久久| 78精品| 98一区二区精品| 99无码| av婷婷色网| 久久久99免费| 亚洲少妇在线影音| 操操操日本的逼| 国产99999久久精品| 看一级特黄a大一片| 涩涩久久精品| 在线观看黄色电话| 国产尤物在线三区| 九九在线精品| 亚洲无码com| 国产丝袜美腿美女麻豆| 国产精品网址| 韩日自拍| 激情五月婷| 啊啊啊好多水| 干B| 久草视频分类在线| 男人的天堂2019| 日本999精品视频| 亚洲成人av电影在线| 久久噜噜噜精品国产亚洲综合| 成人黑料社久久| 国产精品久久久 | 国产精品一区人妻精品阁在线| 一二三区操逼国产91| 最新中文字幕av| 韩国一级做A片免费的| 男人天堂2030| 久久久久久波多野吉衣高潮| 国产欧美日韩精品中文| 伊人网高清| 亚州熟妇精品| 九九热精品视频在线观看| 国产免费黄色一级大片| 色亚州人久干视频在线观看免费版| 蜜乳av首页| 久操91视频| 天天情欲宗合网| 丝袜六区| 国产一区在线免费播放| 翔田千里AV无码秘 三区| 啊啊啊好大好湿| 亚洲成人av色网| 无码精品久久久天天影视| 78操B| 色老牛| 亚洲天堂人妻一区二区| 亚洲国产婷婷在线播放| 亚州欧美色图| 成年人免费观看网站| 四虎AV无码| 九九色精品| 福利社区午夜一区二区| 97综合国产| 区自美91| 99亚洲人人| 丝袜六区| 日韩精品一区二区三区色欲| 亚洲性爱成人| 国产视频第二页| 超碰在线第一页| 大香蕉天天看妹子| 中文字幕日韩综合| 日韩性爱高清免费视频| 99re国产精品视频| 亚洲欧美日韩中文播放| 97人人夜| 玖玖超碰熟| 欧美久久婷婷| 婷婷综合在线观看| 婷婷久草一区二区三区| 国产精品熟女丝袜一区二区| 国产毛片久久久久久久| 中文AV制服乱伦| 91少妇人妻| 嗯嗯不要 视频| 97欧美色综合| 人妻内射一区二区在线视频| 国产精品午夜成人福利| baisiav| 亚洲欧美精品一区天堂久久 | 亚洲中文一区二区三区视频| 五月天精品| 黄色欧美性爱视频| 2020中文字幕在线| 99精品热| 蜜桃视频成a人v在线| 啪啪性爱免费视频| 激情小说亚洲色图| 人人妻人人玩人人澡人人爽| 男人的天堂视频精品乱在线| 欧美少妇高潮视频| 97精品视频在线| 91网站18+| 欧美性五月| 久久久久久免费电影| 公司1区2区3区精产精| 蜜桃精品视频一区二区三区| 色阁阁AV综合网| 2019午夜福利视频| 热热色国产一二区AV| 极品一区二区三区免费| 伊人在线大香蕉视频久久| 91亚洲欧美综合高清在线| 国产后入清纯| 97在线播放 | 91欧洲国产成人久久精品网站| 精品亚洲天堂| 91香蕉国产尤物视频| 尤物av网站免费在线播放| 亚洲一区中文精品| 国产亚洲精品精AV.| 在线国产福利网址导航| 日韩欧美字幕亚洲一区二区| 99操碰| 特污免视频| 欧美72网页| 天天影视网色欲色香| av橘色网站| 东京热天堂网| 亚洲无码超碰免费| 操逼操网| 激情99| 欧美操逼视频二区| 国产乱不卡| 亚洲影视综合| 国产一区自拍欧美日韩 | 亚洲有薄码区久久在线一区| 天天日天天看| 亚洲一区操| av天堂5| baisiav| 亚洲诱惑| 91久| 亚洲国产欧美另类自拍| 国内毛片无码一级毛片| 日韩人妻少妇中文字幕| 综合欧美日韩在线| 国产一线二线三线av| 亚洲巨爆乳一区二区三区四季网| 欧美,日韩综合久久| 91黑丝露脚| 新视频sss国产| 搡老女人老91二区| 曰本人妻人人澡人人夹| 欧美午夜精品久久久久久3D| 一牛一区二区三区久久| 97色综合中文网| 狼狼色丁香久久婷婷综合五月| 久久人妻精品| 涩涩久久精品| 操逼操逼操| 中日高清无码操逼视频| 丝袜天堂| 神马午夜久久| 丝袜熟女一区二区三区| 中文字幕丝袜人妻| 欧美在线亚洲| 大香蕉久| 亚洲第一页欧美| 久久丝袜| 国产午夜激片Av毛片不卡| 男人的天堂激情| 亚91网| 欧美激情中文字幕另类小说| 大香蕉天天看妹子| 人妻欧美| 国产精品久久久久av| 国产精品网站免费| 天天干电影| 日韩黄色一区二区三区| 黄网站黄视频网站进入口 | 5252色欧美在线| v91av| 91粉嫩萝控精品福利网站_精品影音先锋国 | 嫩草 人人网精品| 躁躁躁日日躁2020| 日韩中文字幕在线视频观看| 中国黑人三级片网站上区| 日日骚AV| 亚码激情| 国产精品网址| 色五月婷婷网| 欧洲亚洲人妻无码高清久久三区四区| 温婉少妇玩3p| 亚洲性综合| 99re国产精品视频| 日日黄色三级网站| 国产成久久综合片| 内射中出日韩在线观看视频| 91丝袜美女视频| 激情综合五月| 色吊丝 日日骚 清纯唯美| 这里都是精品在线观看| 色一区二区三区综合| www.伪伪| 男人的天堂久久狠| 99色婷婷| 久久人妻丝袜一区二区三| 久操电影网| av资源在线播放天堂| 超碰偷拍| 综合色色婷婷| 日本一线产区和二线产区伦理片| 一区二区娱乐网站| 蜜臀Av一区二区三区| 成人在线日韩| 91丨人妻丨国产丨丝袜| 国产免费大片| 精品久久久久久无码| m欧洲一级午老| 久久超碰大香蕉| 17c在线成人免费A片观看| av东京热男人的天堂| 日韩久久.一级黄色片| 亚洲文学偷乱拍啪啪啪啪| 强奸乱亚洲| 久艹日日日| 大吊色| 99久久久er直播网址| 欧美色爱综合| 日韩情色视频| 为用户提供免费看黄网址在线观看| 亚洲美女 晚间男人天堂| 最近2019中文字幕国语免费版| 亚洲天堂一二| 久久国色天香香蕉| 国产熟女完整版中字| 97日韩欧美亚洲| 小草精彩毛片| 国产成人无码啪| 伊人欧美大香蕉视频| 久热伊人99re| 国产精品无套内谢| se..亚洲欧美| surenchaopeng| 麻豆这里只有精品| 一级乱伦网站| 97jingpin| 超碰79人人乐| 国产高清无码一区三区二区| 国产丁香精品露脸视频| 91色女| 91足交| 国产精品女aA片爽爽视频| 亭亭在线资源| 日韩情色视频| 日韩性爱再线视频| 91在线免费精品视频| 少妇丝袜在线观看AV| 久久手机好看网站| 日韩欧美中文日韩欧美色| 天天噜| 欧洲自拍第一页| 欧美18禁91| 99热这里是精品| 日韩乱伦AⅤ| 大JI巴好深好爽又大又粗视频| 久热大香蕉网站| 九九九久千久久激情蜜桃在线看 | 青青草九九九九九| 8050无码八戒| 无码精品久久| 偷拍 亚洲 欧美| 九九超碰综合网| 欧美白嫩女HD| 97天天搞在线| 91站街按摩店老熟女熟女| 在线观看成人性爱免费小视频| 男人天堂电影院| 中文字幕丝袜| 一本色道久久综合狠狠操| 日日A∨| 中文字幕艹艹| 蜜臀久久一区二区| 日韩在线观看中文字幕视频| 人妻 丝袜美腿 中文字幕| 成人小说另类在线| 91制服丝袜中文字幕| 亚洲久草AV色图| 亚洲色图综合网| 国产一区麻豆免费观看| 亚州伊人色综台| 五月综合久久| 五月丁香啪啪网| 欧美日韩国内不卡| 极品美女福利在线观看| 777AV电影| 秋霞一级A片黄色视频| 久久国产AⅤ| 日本成熟少妇A∨网站| 精品国产Av无码久久久伦古装| 淫淫综合网| 青娱乐黄色录像| 操熟女91| 2017天天插| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 热久久无毒不卡| 91精品婷婷国产综合久久| 99福利社| 91青青在线| 人妻中文在线| 在线日韩视频| 日本欧美成人片AAAA| 丁香五月社区| 96AV精品| 丝袜喷水在线| 久草新免费| 极品AV网站在线观看| 色哟哟av网址| 后入合集| 91天堂网| 97超碰磁| 国产一级不卡在线观看| 熟女精品va中文字幕| 国产版a级片直播在线| www激情| 天综合中文| 磁力99AV|