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

ARTICLE DETAIL

資訊詳情

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

VS Code + Jupyter Notebook:打造個(gè)人本地知識(shí)庫(kù)

VS Code + Jupyter Notebook:打造個(gè)人本地知識(shí)庫(kù) 簡(jiǎn)介面向嵌入式開(kāi)發(fā)者和物聯(lián)網(wǎng)設(shè)備調(diào)試人員該壓縮包提供AW9523 GPIO擴(kuò)展芯片的完整I2C驅(qū)動(dòng)源碼用于通過(guò)兩線(xiàn)制I2C總線(xiàn)讀寫(xiě)芯片內(nèi)部寄存器從而在微控制器上擴(kuò)展GPIO引腳數(shù)量。驅(qū)動(dòng)采用C/C編寫(xiě)包內(nèi)僅含1個(gè)主要C源文件整體約3KB結(jié)構(gòu)緊湊適合直接閱讀和移植到不同平臺(tái)。已有244人學(xué)習(xí)下載適合有一定嵌入式基礎(chǔ)、正在調(diào)試I2C外設(shè)的工程師參考。代碼覆蓋I2C控制器初始化、寄存器映射讀寫(xiě)、GPIO方向與電平控制、中斷配置及錯(cuò)誤處理等關(guān)鍵環(huán)節(jié)并體現(xiàn)與Linux設(shè)備模型交互的思路開(kāi)發(fā)者結(jié)合AW9523數(shù)據(jù)手冊(cè)可快速定位驅(qū)動(dòng)中的初始化流程、寄存器操作和中斷響應(yīng)邏輯也能從中學(xué)習(xí)I2C從設(shè)備驅(qū)動(dòng)的通用編寫(xiě)框架為后續(xù)在RTOS或裸機(jī)環(huán)境中實(shí)現(xiàn)類(lèi)似外設(shè)驅(qū)動(dòng)提供參考。1. 提到 gpio-aw9523 這個(gè)包先搞清楚它到底解決什么問(wèn)題提到 gpio-aw9523 這個(gè)包做嵌入式的第一反應(yīng)通常是又一顆 I2C 接口的 GPIO 擴(kuò)展芯片而且驅(qū)動(dòng)得自己寫(xiě)。AW9523 的核心價(jià)值不在“IO 多”而在于它用一條兩線(xiàn) I2C 總線(xiàn)帶起 16 路 IO其中 P0-P7 還能進(jìn) LED 模式做電流可調(diào)的呼吸燈效果省掉專(zhuān)門(mén)的 PWM 定時(shí)器。對(duì) MCU 引腳不夠、又要接按鍵加指示燈的板子這個(gè)方向很容易落地。這篇筆記按 Linux 用戶(hù)態(tài)和 MCU 裸機(jī)兩條路線(xiàn)把 AW9523 的寄存器模型、C/C 驅(qū)動(dòng)結(jié)構(gòu)、參數(shù)配置和容易翻車(chē)的點(diǎn)一次講透。剛拿到芯片不知道怎么下手的新手能跟著走熟手可以直接看邊界和坑。2. AW9523 寄存器模型與 I2C 時(shí)序先讀明白地址和位域再動(dòng)手2.1 從機(jī)地址不是固定的A0 引腳決定 0x58 還是 0x59AW9523 的 I2C 地址不是寫(xiě)死的芯片的 A0 引腳電平會(huì)改變 7 位從機(jī)地址。常見(jiàn)的默認(rèn)配置是 A0 接地地址落在 0x58如果把 A0 拉高地址會(huì)變成 0x59。這個(gè)細(xì)節(jié)最容易在第一步卡住用 i2cdetect 掃描總線(xiàn)發(fā)現(xiàn) 0x58 和 0x59 都不出現(xiàn)第一反應(yīng)是芯片壞了實(shí)際上只是原理圖上 A0 接到了 VCC而你代碼里寫(xiě)死了 0x58。我一般會(huì)在拿到板子后先查原理圖確認(rèn) A0 接法再?zèng)Q定驅(qū)動(dòng)里用哪個(gè)地址。如果原理圖還沒(méi)定建議默認(rèn)按 0x58 寫(xiě)同時(shí)把地址定義做成宏這樣后面改起來(lái)只動(dòng)一行。還有一點(diǎn)要注意AW9523 的地址是 7 位地址在 Linux i2c-dev 里 ioctl 設(shè)置從機(jī)地址時(shí)直接傳 0x58 這種 7 位值不要左移一位很多剛從單片機(jī)轉(zhuǎn)過(guò)來(lái)的同事在這里會(huì)把地址寫(xiě)成 0xB0結(jié)果怎么都通信不上。地址確認(rèn)后下一步就是過(guò)一遍寄存器映射。以下寄存器表是根據(jù)這顆芯片的公開(kāi)手冊(cè)整理的常見(jiàn)布局具體到某個(gè)批次還是以你手里的 datasheet 為準(zhǔn)。2.2 核心寄存器映射輸入、輸出、方向、LED 模式與中斷AW9523 的寄存器是 8 位寬偏移地址從 0x00 開(kāi)始。寫(xiě)驅(qū)動(dòng)前先把下面這張表背下來(lái)比反復(fù)查手冊(cè)快得多。偏移名稱(chēng)位寬作用0x00Input16讀引腳電平bit0 對(duì)應(yīng) P00x01Output16寫(xiě)引腳電平bit0 對(duì)應(yīng) P00x02Direction161 表示輸入0 表示輸出0x03Initial State16定義上電時(shí)輸出腳的默認(rèn)電平0x04LED Mode Select8只對(duì) P0-P7 有效置 1 進(jìn)入 LED 模式0x11/0x12LED Current8每 4 位一組控制 LED 電流檔位0x13Global Control8輸出模式、翻轉(zhuǎn)速率等全局配置0x14/0x15Interrupt Enable/Status8引腳變化中斷使能與狀態(tài)這里最容易誤解的是 0x00 到 0x03 都是 16 位寄存器但 AW9523 的 I2C 寄存器地址是 8 位偏移一次讀寫(xiě)可以按兩個(gè)字節(jié)處理也可以按兩個(gè)地址分別讀寫(xiě)高低字節(jié)。我習(xí)慣把它拆成兩個(gè) 8 位訪(fǎng)問(wèn)邏輯更簡(jiǎn)單踩的坑更少。0x04 的 LED 模式選擇只對(duì)低 8 位有效也就是 P0-P7。置 1 之后對(duì)應(yīng)引腳從普通 GPIO 變成 LED 驅(qū)動(dòng)通道輸出電流由 0x11 和 0x12 里的 4 位檔位決定不再受方向寄存器控制。這一點(diǎn)在后面的踩坑章節(jié)會(huì)專(zhuān)門(mén)講很多翻車(chē)現(xiàn)場(chǎng)就是在這里發(fā)生的。中斷部分同樣容易誤用。0x14 是中斷使能0x15 是中斷狀態(tài)狀態(tài)寄存器讀完后必須寫(xiě) 1 清除否則 INT 引腳會(huì)一直拉低主機(jī)側(cè)永遠(yuǎn)等不到下一次中斷。2.3 時(shí)序與總線(xiàn)速率100kHz 和 400kHz 怎么選SLEW 控制在管什么I2C 總線(xiàn)速率對(duì) AW9523 這種芯片來(lái)說(shuō)不是越快越好。芯片本身支持標(biāo)準(zhǔn)模式 100kHz 和快速模式 400kHz但實(shí)際板級(jí)走線(xiàn)長(zhǎng)度、上拉電阻值、總線(xiàn)上掛了多少設(shè)備都會(huì)影響高速下的通信可靠性。我之前在一款主板上總線(xiàn)上同時(shí)掛了 AW9523 和一顆 EEPROM走線(xiàn)超過(guò) 15 厘米跑 400kHz 時(shí) EEPROM 讀寫(xiě)正常AW9523 卻偶發(fā)返回錯(cuò)誤數(shù)據(jù)。原因在于 AW9523 的輸入引腳有一個(gè) slew rate 控制位在 0x13 全局控制寄存器里。slew rate 調(diào)低一點(diǎn)能抑制信號(hào)邊沿的過(guò)沖對(duì)長(zhǎng)走線(xiàn)和弱上拉有幫助。默認(rèn)值不一定適合你的板子所以驅(qū)動(dòng)初始化時(shí)最好顯式寫(xiě)入這個(gè)寄存器而不是依賴(lài)上電默認(rèn)值。如果總線(xiàn)距離很短、上拉電阻 4.7k 到 10k、設(shè)備少400kHz 沒(méi)問(wèn)題但凡有一點(diǎn)不確定先用 100kHz 把功能調(diào)通再?lài)L試提速。讀時(shí)序也是新手容易寫(xiě)錯(cuò)的地方。AW9523 讀寄存器的標(biāo)準(zhǔn)流程是先發(fā)一個(gè)字節(jié)的寄存器地址然后重新產(chǎn)生起始條件再讀數(shù)據(jù)。用 i2cdetect 時(shí)看到設(shè)備地址出現(xiàn)只說(shuō)明芯片在線(xiàn)不代表讀寫(xiě)邏輯正確。真正驗(yàn)證時(shí)序最好用邏輯分析儀抓一次寫(xiě)和一次讀對(duì)比手冊(cè)里的時(shí)序圖這一步省掉的話(huà)后面排錯(cuò)全靠猜。3. Linux 用戶(hù)態(tài)驅(qū)動(dòng)用 C/C 寫(xiě)一個(gè)可用的 aw9523ctl 工具3.1 用戶(hù)態(tài)還是內(nèi)核態(tài)i2c-dev 和設(shè)備樹(shù)各自的邊界在 Linux 下控制 AW9523有兩條路一條是在設(shè)備樹(shù)里聲明這顆芯片寫(xiě)內(nèi)核態(tài) I2C 驅(qū)動(dòng)通過(guò) sysfs 或 gpio 子系統(tǒng)暴露給應(yīng)用層另一條是直接訪(fǎng)問(wèn) /dev/i2c-N 節(jié)點(diǎn)在用戶(hù)態(tài)用 C 程序讀寫(xiě)寄存器。對(duì)大部分項(xiàng)目來(lái)說(shuō)用戶(hù)態(tài)方案就夠了理由很實(shí)際AW9523 這類(lèi)擴(kuò)展芯片的實(shí)時(shí)性要求不高寄存器操作頻率低用戶(hù)態(tài)讀寫(xiě)引入的調(diào)度延遲完全在可接受范圍內(nèi)。而且用戶(hù)態(tài)代碼調(diào)試方便編譯快出錯(cuò)不會(huì)把整個(gè)內(nèi)核帶崩。內(nèi)核態(tài)驅(qū)動(dòng)的好處是能接入 Linux 的 gpiochip 框架讓上層用標(biāo)準(zhǔn) gpiod 接口操作適合需要和其它 gpio 設(shè)備統(tǒng)一管理的場(chǎng)景。但如果只是點(diǎn)亮幾顆燈、讀幾個(gè)按鍵為它寫(xiě)一個(gè) platform_driver 再配設(shè)備樹(shù)投入產(chǎn)出比不劃算。我通常的做法是原型階段一律用戶(hù)態(tài)把寄存器行為摸清楚后面如果確實(shí)要接入 gpio 子系統(tǒng)再把這層寄存器邏輯原封不動(dòng)搬進(jìn)內(nèi)核驅(qū)動(dòng)測(cè)試周期會(huì)短很多。用戶(hù)態(tài)方案有一個(gè)前提/dev/i2c-N 節(jié)點(diǎn)要有訪(fǎng)問(wèn)權(quán)限。開(kāi)發(fā)板上一般直接用 root 跑如果產(chǎn)品里是普通用戶(hù)運(yùn)行需要在 udev 規(guī)則里給 i2c 設(shè)備節(jié)點(diǎn)加權(quán)限組這個(gè)后面驗(yàn)證章節(jié)會(huì)提到。3.2 最小讀寫(xiě)封裝兩個(gè) C 函數(shù)覆蓋全部寄存器訪(fǎng)問(wèn)用戶(hù)態(tài)訪(fǎng)問(wèn) AW9523本質(zhì)就是打開(kāi) /dev/i2c-1用 ioctl 設(shè)置從機(jī)地址然后 write 和 read 寄存器。下面的代碼是一個(gè)最小可用的封裝頭文件部分包含了 Linux i2c-dev 的用戶(hù)態(tài)接口。#include stdio.h #include fcntl.h #include unistd.h #include sys/ioctl.h #include linux/i2c-dev.h #include stdint.h #define AW9523_ADDR 0x58 #define AW9523_REG_OUTPUT 0x01 #define AW9523_REG_DIR 0x02 static int aw_write_reg(int fd, uint8_t reg, uint8_t val) { uint8_t buf[2] { reg, val }; if (write(fd, buf, 2) ! 2) { perror(i2c write fail); return -1; } return 0; } static int aw_read_reg(int fd, uint8_t reg, uint8_t *val) { if (write(fd, reg, 1) ! 1) { perror(i2c write reg fail); return -1; } if (read(fd, val, 1) ! 1) { perror(i2c read fail); return -1; } return 0; }這段代碼的邏輯很直接寫(xiě)寄存器時(shí)把寄存器地址和數(shù)據(jù)拼成一個(gè)兩字節(jié) buffer 一次發(fā)出讀寄存器時(shí)先單獨(dú)發(fā)地址再等芯片把數(shù)據(jù)送到總線(xiàn)上。注意讀操作里 write 和 read 之間不需要重新設(shè)置從機(jī)地址因?yàn)?ioctl 設(shè)置的地址在 fd 上一直有效。參數(shù)說(shuō)明打開(kāi)設(shè)備節(jié)點(diǎn)時(shí)用 O_RDWR不能只讀因?yàn)閷?xiě)寄存器是雙向操作。ioctl 的第二個(gè)參數(shù) I2C_SLAVE_FORCE 會(huì)強(qiáng)制把 fd 綁定到指定從機(jī)地址即使這個(gè)地址已經(jīng)被內(nèi)核驅(qū)動(dòng)占用用它調(diào)試比 I2C_SLAVE 更不容易失敗。但這個(gè)特性也意味著地址配錯(cuò)了不會(huì)立刻報(bào)錯(cuò)數(shù)據(jù)會(huì)發(fā)給一個(gè)不存在的設(shè)備所以地址宏一定要核對(duì)原理圖。3.3 初始化與命令行動(dòng)作把寄存器配置變成可調(diào)參數(shù)有了讀寫(xiě)封裝剩下的就是把寄存器配置翻譯成命令行動(dòng)作。下面這段代碼實(shí)現(xiàn)了三個(gè)子命令init 完成基本初始化set 控制某一路輸出read 讀取所有引腳電平。這里刻意把寄存器地址和參數(shù)都做成宏方便換板子時(shí)調(diào)整。#define AW9523_REG_INIT_ST 0x03 #define AW9523_REG_LED_MODE 0x04 #define AW9523_REG_GCR 0x13 int main(int argc, char *argv[]) { int fd open(/dev/i2c-1, O_RDWR); if (fd 0) { perror(open /dev/i2c-1); return 1; } if (ioctl(fd, I2C_SLAVE_FORCE, AW9523_ADDR) 0) { perror(set slave addr); return 1; } if (argc 2) { printf(usage: aw9523ctl init|set|read\n); return 1; } if (strcmp(argv[1], init) 0) { // 先寫(xiě)初始電平再配方向P0-P7 全部輸出高P8-P15 輸入 aw_write_reg(fd, AW9523_REG_INIT_ST, 0xFF); aw_write_reg(fd, AW9523_REG_DIR, 0xFF); aw_write_reg(fd, AW9523_REG_LED_MODE, 0x00); aw_write_reg(fd, AW9523_REG_GCR, 0x00); printf(aw9523 init done\n); } else if (strcmp(argv[1], set) 0 argc 4) { int pin atoi(argv[2]); int val atoi(argv[3]); uint8_t cur; aw_read_reg(fd, AW9523_REG_OUTPUT, cur); if (val) cur | (1 pin); else cur ~(1 pin); aw_write_reg(fd, AW9523_REG_OUTPUT, cur); printf(pin P%d - %d\n, pin, val); } else if (strcmp(argv[1], read) 0) { uint8_t lo, hi; aw_read_reg(fd, 0x00, lo); aw_read_reg(fd, 0x00, hi); // 實(shí)際應(yīng)讀 0x00 的低字節(jié)和高字節(jié)這里按兩段讀取 printf(input: 0x%02X%02X\n, hi, lo); } close(fd); return 0; }這段代碼里的 init 順序是有講究的先寫(xiě) 0x03 初始電平再寫(xiě) 0x02 方向寄存器。這樣配置的引腳從上電開(kāi)始就保持確定的電平不會(huì)在初始化瞬間亂跳。方向寄存器寫(xiě)成 0xFF表示高 8 位是輸入低 8 位是輸出P0-P7 輸出高P8-P15 懸空輸入。set 子命令里先讀回當(dāng)前輸出寄存器再改對(duì)應(yīng)位避免把其它引腳的狀態(tài)沖掉。這個(gè)“讀-改-寫(xiě)”操作是 GPIO 驅(qū)動(dòng)里最常見(jiàn)的模式很多人第一次寫(xiě)會(huì)直接整字節(jié)覆蓋輸出寄存器導(dǎo)致其它引腳狀態(tài)被錯(cuò)誤復(fù)位。read 子命令目前沒(méi)有區(qū)分高低字節(jié)實(shí)際工程里應(yīng)該讀取偏移 0x00 和 0x01或者一次讀兩個(gè)字這點(diǎn)在拿到芯片手冊(cè)后按實(shí)際位寬修正即可。這個(gè)工具編譯只需要一條命令gcc -o aw9523ctl aw9523ctl.c。它不依賴(lài)任何第三方庫(kù)直接在開(kāi)發(fā)板或 Linux 主機(jī)上編。如果板子上的 I2C 控制器編號(hào)不是 1把 open 里的 /dev/i2c-1 改成實(shí)際節(jié)點(diǎn)用 i2cdetect -l 可以列出所有總線(xiàn)。4. MCU 裸機(jī)驅(qū)動(dòng)把 AW9523 封裝成可復(fù)用的 C 庫(kù)4.1 硬件抽象層設(shè)計(jì)為什么驅(qū)動(dòng)不該直接綁死 HAL_I2C在 STM32 或其它 MCU 上寫(xiě) AW9523 驅(qū)動(dòng)最容易犯的錯(cuò)是把驅(qū)動(dòng)代碼直接調(diào) HAL_I2C_Mem_Write 或寄存器操作寫(xiě)滿(mǎn)整個(gè)文件。這樣做在單板子上確實(shí)能跑一旦換平臺(tái)或者從 HAL 庫(kù)換成 LL 庫(kù)全部代碼要重寫(xiě)。C/C 驅(qū)動(dòng)該有的樣子是底層只留兩個(gè)函數(shù)指針上層邏輯完全不知道 I2C 控制器是哪家的。我一般會(huì)先定義一個(gè)設(shè)備結(jié)構(gòu)體把從機(jī)地址和兩個(gè) I2C 收發(fā)函數(shù)指針?lè)胚M(jìn)去。初始化時(shí)傳入平臺(tái)的讀寫(xiě)函數(shù)驅(qū)動(dòng)內(nèi)部所有寄存器操作都通過(guò)這兩個(gè)指針完成。這樣 AW9523 驅(qū)動(dòng)變成一個(gè)純 C 的靜態(tài)庫(kù)換平臺(tái)只是換底層兩個(gè)函數(shù)的實(shí)現(xiàn)芯片邏輯一行不用改。這個(gè)思路對(duì) I2C 從機(jī)都適用不只是 AW9523。結(jié)構(gòu)體的定義并不復(fù)雜如下所示。核心是讓上層拿著 aw9523_t 指針就能完成所有操作而不需要關(guān)心底層是阻塞還是中斷傳輸。4.2 初始化和方向控制的核心代碼先配初值再配方向下面的代碼展示了設(shè)備結(jié)構(gòu)體和初始化函數(shù)的完整實(shí)現(xiàn)。重點(diǎn)是初始化順序和方向配置的細(xì)節(jié)。typedef struct { uint8_t addr; int (*i2c_write)(uint8_t addr, uint8_t reg, uint8_t val); int (*i2c_read)(uint8_t addr, uint8_t reg, uint8_t *val); } aw9523_t; static int aw9523_write_reg(aw9523_t *dev, uint8_t reg, uint8_t val) { return dev-i2c_write(dev-addr, reg, val); } static int aw9523_read_reg(aw9523_t *dev, uint8_t reg, uint8_t *val) { return dev-i2c_read(dev-addr, reg, val); } int aw9523_init(aw9523_t *dev) { if (aw9523_write_reg(dev, 0x03, 0xFF) 0) return -1; // 初始電平全高 if (aw9523_write_reg(dev, 0x02, 0x00) 0) return -1; // 全部輸出 if (aw9523_write_reg(dev, 0x04, 0x00) 0) return -1; // 關(guān)閉 LED 模式 if (aw9523_write_reg(dev, 0x13, 0x00) 0) return -1; // 推挽輸出默認(rèn)翻轉(zhuǎn)速率 return 0; } int aw9523_set_pin(aw9523_t *dev, uint8_t pin, uint8_t level) { uint8_t cur; if (pin 15) return -1; if (aw9523_read_reg(dev, 0x01, cur) 0) return -1; if (level) cur | (uint8_t)(1 pin); else cur (uint8_t)~(1 pin); return aw9523_write_reg(dev, 0x01, cur); }初始化時(shí)先寫(xiě) 0x03 再寫(xiě) 0x02這個(gè)順序和 Linux 用戶(hù)態(tài)版本一致。方向寄存器 0x02 的位定義是1 為輸入0 為輸出。示例里直接寫(xiě)成 0x00讓 16 路全部輸出。實(shí)際項(xiàng)目里通常會(huì)結(jié)合硬件設(shè)計(jì)把部分引腳配置成輸入這時(shí)應(yīng)該按位準(zhǔn)備方向字節(jié)。set_pin 函數(shù)里的讀-改-寫(xiě)是關(guān)鍵。AW9523 的輸出寄存器是 16 位分布在兩個(gè)地址上如果直接寫(xiě)一個(gè)字節(jié)另一個(gè)字節(jié)的引腳狀態(tài)就丟了。示例代碼為了可讀性只處理了 8 位的情況真實(shí)使用時(shí)應(yīng)該按高低兩個(gè)字節(jié)分別處理或者封裝一個(gè) aw9523_set_pin_mask 函數(shù)一次性把需要變更的位和掩碼傳進(jìn)來(lái)。這部分是驅(qū)動(dòng)里最容易埋雷的地方后面避坑章節(jié)還會(huì)展開(kāi)。4.3 LED 呼吸模式不用 PWM 也能做出來(lái)的亮度漸變AW9523 真正值錢(qián)的功能是 LED 模式。進(jìn)入 LED 模式后P0-P7 不再受方向寄存器控制而是由 LED 電流寄存器決定輸出電流。這意味著不需要 PWM 定時(shí)器只需要周期性更新電流檔位就能做出呼吸燈效果。下面這段代碼演示了如何在 P0 上做 0 到 15 檔的漸變。#define AW9523_REG_LED_CUR 0x11 void aw9523_led_breath_step(aw9523_t *dev, uint8_t step) { uint8_t cur, target; if (step 15) step 15; // 讀回當(dāng)前電流配置只改低 4 位避免影響 P4-P7 aw9523_read_reg(dev, AW9523_REG_LED_CUR, cur); target (uint8_t)((cur 0xF0) | step); aw9523_write_reg(dev, AW9523_REG_LED_CUR, target); }調(diào)用方只需要在定時(shí)器中斷或主循環(huán)里每隔 30 到 50 毫秒改變 step 的值從 0 遞增到 15 再遞減回 0就能看到呼吸效果。電流檔位和實(shí)際毫安值的對(duì)應(yīng)關(guān)系要查芯片手冊(cè)里的曲線(xiàn)不同批次可能略有差異。0x11 寄存器每 4 位控制一組 LED 通道直接整體寫(xiě)入會(huì)誤傷相鄰引腳所以必須先讀后寫(xiě)。這個(gè)方案替代 PWM 的意義在于MCU 可以繼續(xù)睡在低功耗模式不需要一個(gè)硬件定時(shí)器專(zhuān)門(mén)跑 PWM。呼吸節(jié)奏完全由軟件控制改起來(lái)靈活。但副作用是 LED 模式的引腳不能再讀輸入狀態(tài)所以在設(shè)計(jì)按鍵和指示燈共用引腳時(shí)要提前想清楚。5. AW9523 驅(qū)動(dòng)踩坑記錄五個(gè)最容易翻車(chē)的點(diǎn)5.1 引腳編號(hào)和寄存器位對(duì)應(yīng)錯(cuò)位輸出寫(xiě)到別的腳上現(xiàn)象是控制 P5 輸出高結(jié)果 P9 亮了或者完全沒(méi)反應(yīng)。原因幾乎都是把引腳編號(hào)直接當(dāng)成了寄存器位號(hào)寫(xiě)了 (1 pin)但 AW9523 的位映射是 bit0 對(duì)應(yīng) P0bit15 對(duì)應(yīng) P15中間的 P8-P15 在高字節(jié)P0-P7 在低字節(jié)。如果 pin 值大于 7位號(hào)已經(jīng)超出低字節(jié)范圍但驅(qū)動(dòng)只寫(xiě)了低字節(jié)高字節(jié)壓根沒(méi)動(dòng)。解決方法是先分清楚高低字節(jié)pin 小于 8 操作 0x01 的低字節(jié)pin 大于等于 8 操作 0x01 的高字節(jié)實(shí)際寄存器地址為 0x01 和 0x011按手冊(cè)確認(rèn)?;蛘叨x一個(gè) pin_to_reg(pin) 宏把端口號(hào)映射到正確的寄存器和掩碼。我在驅(qū)動(dòng)里統(tǒng)一用掩碼不用裸的位移從根上杜絕錯(cuò)位。5.2 進(jìn)了 LED 模式后P0-P7 讀不到輸入電平現(xiàn)象是把 0x04 寄存器的某位置 1 后原來(lái)配置為輸入的 P0 變成了永遠(yuǎn)讀到低電平。原因是 LED 模式會(huì)把引腳內(nèi)部結(jié)構(gòu)從輸入緩沖切換成電流源驅(qū)動(dòng)引腳不再具備數(shù)字輸入功能。這不是芯片故障而是模式本身互斥。解決方法是把需要做輸入檢測(cè)的引腳全部放在 P8-P15或者在使用前把 0x04 對(duì)應(yīng)位清零并重新配置方向寄存器。設(shè)計(jì)階段就定好分工P0-P7 優(yōu)先給 LED 和指示燈P8-P15 做按鍵輸入和普通輸出。如果布局已經(jīng)固定就要在驅(qū)動(dòng)里加一個(gè)狀態(tài)變量記錄哪些引腳處于 LED 模式避免上層誤讀。5.3 初值寄存器沒(méi)先寫(xiě)上電瞬間輸出亂跳現(xiàn)象是系統(tǒng)上電后接在 AW9523 輸出腳上的繼電器或 LED 閃了一下然后才進(jìn)入正常狀態(tài)。原因是方向寄存器配置成輸出之后輸出寄存器默認(rèn)值是不確定的芯片在上電到初始化完成的窗口期內(nèi)可能輸出隨機(jī)電平。初值寄存器 0x03 如果沒(méi)被寫(xiě)入這個(gè)窗口期的行為不可控。解決方法是嚴(yán)格按照先寫(xiě) 0x03 初值、再寫(xiě) 0x02 方向的順序初始化。如果硬件上不允許輸出腳在上電瞬間有不確定電平還需要在 AW9523 的 INT 腳或使能電路上加一個(gè) RC 延時(shí)讓芯片輸出腳在外圍電路穩(wěn)定后再生效。軟件和硬件兩手都要做這一點(diǎn)在量產(chǎn)產(chǎn)品上尤其重要。5.4 中斷一直拉低讀狀態(tài)寄存器后沒(méi)有清標(biāo)志現(xiàn)象是 AW9523 的 INT 引腳觸發(fā)一次后電平就一直保持低后續(xù)引腳變化不再產(chǎn)生中斷。原因通常是中斷狀態(tài)寄存器 0x15 只讀不清。讀取狀態(tài)寄存器之后必須把讀到的值原樣寫(xiě)回把中斷標(biāo)志清掉INT 引腳才會(huì)釋放。很多人讀完之后直接忽略返回值中斷就永遠(yuǎn)卡死在第一次觸發(fā)。解決方法是把清標(biāo)志和讀狀態(tài)做成一個(gè)函數(shù)每次中斷處理末尾強(qiáng)制寫(xiě)回。即使只有一個(gè)中斷源也建議寫(xiě)回完整狀態(tài)值而不是寫(xiě) 1避免不同位之間有粘連邏輯。用邏輯分析儀抓 INT 波形能直接看到清標(biāo)志前后引腳電平的變化是最快的驗(yàn)證方式。5.5 400kHz 快速模式下偶發(fā)讀寫(xiě)失敗線(xiàn)長(zhǎng)和上拉要背鍋現(xiàn)象是 AW9523 在 400kHz 下工作運(yùn)行一段時(shí)間后偶發(fā)寫(xiě)入失敗或讀到 0xFF降到 100kHz 后完全正常。原因不是芯片性能不行而是板級(jí) I2C 總線(xiàn)的上拉電阻和走線(xiàn)寄生電容不匹配。上拉電阻太大信號(hào)上升沿變緩走線(xiàn)太長(zhǎng)振鈴和過(guò)沖疊加在 SDA/SCL 上毛刺會(huì)被芯片當(dāng)成錯(cuò)誤起始或停止位。解決方法是先看示波器抓 SCL 的上升沿如果邊沿超過(guò) 300ns把上拉電阻調(diào)小比如從 10k 換成 4.7k 或者 2.2k。同時(shí)把 0x13 寄存器里的 slew rate 控制位調(diào)低讓輸出驅(qū)動(dòng)器本身不那么激進(jìn)。如果板子已經(jīng)量產(chǎn)沒(méi)法改電阻驅(qū)動(dòng)里強(qiáng)制用 100kHz 跑AW9523 這類(lèi)擴(kuò)展芯片的實(shí)時(shí)性要求通常不高慢一點(diǎn)完全可以接受。6. 驗(yàn)證方法與調(diào)試環(huán)境讓 AW9523 驅(qū)動(dòng)跑得明明白白拿到一塊帶 AW9523 的板子先不要急著寫(xiě)驅(qū)動(dòng)。我有幾個(gè)固定的驗(yàn)證步驟能省掉大半排錯(cuò)時(shí)間。第一步用 i2cdetect 確認(rèn)設(shè)備在線(xiàn)。下面的命令會(huì)掃描總線(xiàn) 1 上所有 I2C 地址輸出列表里出現(xiàn) 58 或 59說(shuō)明芯片通信鏈路沒(méi)問(wèn)題。如果掃不到先查 A0 引腳電平再量 SCL/SDA 波形最后檢查 VCC 和 GND。i2cdetect -y 1 i2cdump -y 1 0x58第二步用 i2cset 手動(dòng)改寫(xiě)方向寄存器和輸出寄存器看對(duì)應(yīng)引腳電平是否變化。這一步繞過(guò)所有代碼直接證明硬件鏈路和寄存器行為符合預(yù)期。命令格式是把 0x58 地址處的 0x02 寄存器寫(xiě)成 0x00全部輸出再把 0x01 寫(xiě)成測(cè)試值。i2cset -y 1 0x58 0x02 0x00 i2cset -y 1 0x58 0x01 0xFF第三步如果功能正常但代碼跑起來(lái)不對(duì)重點(diǎn)檢查工具鏈架構(gòu)匹配。在 vscode 里配置 C/C 環(huán)境時(shí)遇到過(guò)擴(kuò)展報(bào)“二進(jìn)制文件不兼容或不匹配”十有八九是 tasks.json 里用的編譯器架構(gòu)和開(kāi)發(fā)板不一致比如在 x86 主機(jī)上編出了 x86 的 ELF拿到 ARM 板上當(dāng)然跑不了。用交叉編譯工具鏈時(shí)編譯、鏈接、調(diào)試器三者的目標(biāo)架構(gòu)必須一致不能主機(jī) gcc 和 arm-gdb 混用。想快速驗(yàn)證算法邏輯在 termux 里裝 gcc 也可以但操作硬件設(shè)備節(jié)點(diǎn)需要真實(shí)硬件環(huán)境這點(diǎn)繞不開(kāi)。驗(yàn)證順序建議是i2cdetect 確認(rèn)在線(xiàn)i2cset 確認(rèn)可控邏輯分析儀確認(rèn)時(shí)序最后再編譯驅(qū)動(dòng)代碼。我自己的習(xí)慣是每換一顆新芯片先花半小時(shí)把寄存器表抄成頭文件再寫(xiě)讀寫(xiě)函數(shù)最后才碰業(yè)務(wù)邏輯。這個(gè)順序救過(guò)我很多次每次覺(jué)得“時(shí)序沒(méi)問(wèn)題直接寫(xiě)吧”結(jié)果都在省掉的那步上翻車(chē)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月丁香综合| 亚洲青色欧美| 青木玲在线不卡| 激情黄色片在线观看| 天天日夜干| 丝袜熟女2P| 日本一级真人黄色性爱视频| 麻豆成人av| 国产精品一二三免费网站| 久久久久久久唑| 97爱碰| 亚洲Av诱惑| 大香蕉久久| dy888午夜老子影视达达兔| 九区国产| 99∨VTV| 97综合在线| 96AV久久久| 91看黄片| 熟女熟妇一区二区三四区| 女优视频第10页| 张柏芝国产一区在线观看| 91足交| 日本一级特级毛片视频| 免费看污网址| 免费在线观看AV无码网站| 无码一区二区精品视频久久久春药 | 很狠操| 国产懂色精品国产av| 天美传媒精品一区二区三区| 99久久这里只有精品| 日本免费中文字幕在线| 日韩有码专区| 日韩无码第3页| 久久天天摸| 青青草日韩无码| 涩综合导航| 加勒比av网| 毛片17S| 黄网在线播放| av绯色| 亚洲图片欧美色| 天堂亚洲精品| 黄色成年| 日本综合色图| 99999精品成人| julia在线观看久久| 五月婷婷色| 五月丁香婷婷色| 天天躁日日躁AAA片李宗瑞| 亚洲欧美在线观看免费| 自拍偷拍亚洲熟女妇人精品 | 久久久久久国产无码精品| 久久久久久亚洲Av无码| 99999这里都精品| 亚洲日本成人动漫| 手机不卡视频不卡在线一二三区| 色婷婷综合网| 精品久久久久久亚洲| 狠狠久久亚洲欧美专区| 丝袜性亚洲| 国产乱弄免费在线视频。| 色眯眯射| 亚洲欧美内射| 干B网| 91老司机在线| 国产对白刺激视频| 一级性爱aaaa| 色狠狠综合噜一二三区| 亚洲精品蜜桃久久久久久久| 在线中文AV| 精品人妻少妇| 先锋激情∨在线视频播放| 大香网站| 操老熟女AV| 国产精品一区二区三区四区五区| 日本性爱欧美性爱| 欧美躁死她一区二区| 欧色综合| 亚洲欧美综合图片| 亚洲欧美日韩免费观看| 久久久蜜桃臀无码视频| 天天日天天干天天整| 亚洲精品久久久久久久久豆丁网| 欧美午夜视频| 国产精品剧情| 久久久久国产无av| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 一区二区三区 丝袜 高跟 美腿| 色亚州人久干视频在线观看免费版| 99蜜月精品久久| 精品毛片av一区二区| 96精品在线| 97精彩视频网站| 色亚州人久干视频在线观看免费版| 东京热,男人的天堂| 亚洲,日韩,欧美,成人播放| 色婷婷六月| 秋霞鲁丝午夜无码一区二区三| 国产一级高清免费观看| 夜夜肏2021| 精品9999| 色色福利| 人人污日韩一区二区| 天天性射网| 国产无码高清操逼视频| 欧美少妇一区二区三区| 操东北女人| 老熟女搡BBBB搡BBBB视频| 自偷自拍的亚洲视频| 这里只有精品视频在线| 九九九九九九九九九国产精品| 农村女一级毛卡片| 97干在线看| 中国熟女91| 精品国产一区二区三区四区在线看 | 综合网欧美在线| 熟妇高潮二区三区| 91动漫操逼视频| 丁香婷婷色五月| 中文一区二区| 强奸xx国产| 丝袜狠狠草尤物 91| 岛国网址国产| 夜夜夜夜久久久久| 久久天堂婷婷网| 91白虎| 国产精品久久久久综合| 日本国产二线女色| 丁香六月综合激情| 欧美性夜| 97激情97激情| 婷婷丁香熟妇综合网| 97视频在线观看网站| 国精精品无码一二三区水多多| 中文字幕高清20页视频| 日韩成年人性爱视频| 视频在线观看一二三区| 亚洲在线网站| www四虎| 欧美色乱| 蜜臀99999| 夜夜嗨视频| AV天堂男人的天堂| 中文AV制服乱伦| 嗯……啊…嗯嗯…啊…好舒服| 欧美裸体美女日麻屄| 精品夜夜澡人妻无码| 久久久久久久唑| 蜜臀精品1区2区| 人妻干天天| 亚洲国产丝袜在线观看| 亚洲成人免费电影| 免费一级精品啪啪视频| 九九九九热只有精品| 淫妻综合网| 黄片免费日韩| 十八禁电影伊人网| 高树玛利亚无码流出| 黄色片一区二区三区四区五区 | 大香蕉免费乱伦视频| 久干网| 亚洲图片偷拍视频区| 日韩色女精品| 91成人在线| 东京热视频网| 亚洲色图欧洲| 亚洲图片欧美偷拍| 色大师网站www永久网站视频| 亚洲欧美中文日韩视频中国语| 美女被啪到深处抽搐视频| 蜜臀亚洲综合一二三四区| 久99热| 亚洲,日韩,欧美,成人播放| 日日骚av| 97色97好| 青娱乐亚洲热| 丁香婷婷啪啪| 国产成年免费大片黄在线观看| 久久久久久人体| 欧美人妻色| 97色色色| 另类小说五月天| 亚洲欧美日韩免费观看| 狠狠97| 亚洲综合影片| 欧美A√综合网 | 欧美色图 人妻| 国产在线不卡导航| 亚洲免费看片| 国产女人91精品嗷嗷嗷嗷| 超碰97人人cao| 亚洲国产精品成人久久蜜臀| 久操国产在线| 69精品| 成人七区| 蜜乳成人AV| 久久精品熟妇丰满人妻99| 精品欧美日韩在线观看| 热热色综合网| 性色avv| 亚洲综合小说另类图欧美视频激情小说色五月天 | 欧美顶级黄色大片免费| 国产日韩区| 欧美人与动性人交a| 欧美色图亚洲色| 9美女超碰在线免费观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 传媒免费一区二区三区| 怡春苑东京热| 爱干爱射网啊啊啊| 国产久久一区二区三区野外在线| 搡老女人老妇女老妇老熟女怎么读| 久久久久久精品免费看A级| 在线无码视频| 强奸乱伦动态污图免费 | 920日本午夜免费| 26uuu国产| 大香蕉九九| 高清无码网址| 特级大荫道BBwBBwBBW| 日日狠狠久久偷偷色综合免费| 九九黄色网| 91精品国产高清久久久久久,亚洲成人 | 亚洲精品尤物yw在线影院| 性生活久久久久久久久久| 六六久久日韩不卡| 农村妇女精品一区二区| 精品无码久久| 日韩福利综合一区| 1人人看人人摸人人操| 精品一级毛片在线观看| 国产 热久久久久国产精品| 日韩激情啪啪| 免费啪啪啪网站18岁| 天天做日日做天天欢。| 日本 欧美 亚中文字幕| 欧美日韩资源在线| 国产精品久久久久久久免牛肉蒲团| 是还免费视频1727我| 久久华人网| 猛猛干| 色综合一本| 青青草大香蕉视频| 日本性感人妻91| 亚洲AV无码翔田千里网站| 污污汅18禁网站在线永久免费观看| 一区二区三区探花在线观看| 国产精品蜜乳AV| 精品一区二区啪啪啪| 啊啊啊在线观看免费视频| 不卡九肏| 九九九九亚洲| 综合激情二| 亚洲精品日韩国产欧美| 午夜福利久久久噜久噜久久综合 | 日韩91网站| 中文字幕丝袜国产第一页不卡| 五月激情视频| 国产不良强奸视频免费看| 18禁精品网站在线看| 欧美在线播放aaaa| 欧日韩在线观看| 特色a在线上| 波多野结衣被操50分钟免费视频 | 97超级久久| 操人人| 婷婷操逼| 99精品无码| 强奸乱伦免费网站| 国产999精品久久久久久| 亚洲色资源| 99久久99久久免费精品蜜臀| 欧美黄片视频在线观看免费| 男人的天堂在线| 九九九精品| 欧美性爱免费短视频| av天堂5| 日韩国产十八禁| 亚洲日韩电影| 怡红院视频在线| 久久r精品| 美女极品一区二区三区| 欧美性爱一区二区三区四区 | 操逼操逼视频操逼| 啊啊啊啊啊操我视频| 在线视频资源| 99色| 成人性生活高清视频在线播放| 成人免费在线网站| 蜜臀久久99'精品久久久| 极品欧美一区二区三区| 欧美熟妇精品黑人巨大一二三区| yaouchengrenav| 久久极品一区二区| 久久精品国产亚洲AV先锋| 又黄又爽在线观看视频| 久久女人| 丁香六月天| 91熟女丨91老女人| 久久久不能久久久久| 蜜乳av首页| q2午夜理论片夜色av| 中文字幕一区二区免费在线| 日韩噜噜69| 亚洲啪啪视频一区二区| 日韩综合色网| 99re在线观看| 少妇高潮九九九九| 综合网欧| 午夜福利精品| 亚洲情色欧美| 亚洲 欧美 另类 日韩 人妻一区| 青娱乐亚洲自拍| 久久久久人| 探花激情视频| 天天色欧美| 97日视频| A片三级无码| 亚洲中字慕不卡| 狠狠狠狠狠干| 成人26uuu| 男人的天堂无码| 中国乱伦一区二区| 97在线视频网站| 中文字幕视频一区视频二区| 欧美另类精品xxxx| 超碰97日韩| 国产13区| 极品极品色影院| 热99re69精品8在线播放| 成人五月天色网| 特级丰满少妇一级AAAA爱毛片| 91日产桃蜜| www.操| 日本色色色视频| 中文字幕三四五区| 新视频sss国产| 色99视频| 激情国产乱伦Av| 亚洲乱妇p22| 午夜.DJ高清在线观看免费7| 人妻少妇无码| 天天插夜夜爽| 97干com| 能直接看AV的网站| 2018天天日天天日| 欧美92| 9精品久久| 亚洲综合97中文网| 国产 日韩,欧美 自拍| 91影视亚洲| 色哟哟国产精品免费网址| 久久成人午夜精品影院| 亚洲欧美综合| 日夜精品| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 日韩欧美亚洲一区二区三区影院| 襙一襙| 久久东京热成人| 欧美 牲| 91在线限制级| 猛交交| 一区二区娱乐网站| 精品性爱一二三区| 91精品久久久久五月天精品| 亚洲国产精品无码AV久久| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 麻豆国产成人精品| 日韩99神马视频播放| 国产激情综合五月久久| 国产做?爰片久久毛片?片美国| 欧美自拍偷拍综合图片| 亚洲AV不卡在线观看尤物| 国内一级精品| 在线看免费无码AV天堂的| 粉嫩av平台| 欧美 亚洲| 国产女性无套 免费观看| 欧美Aⅴ| 高清无码久操视频| 精品视频在线观看精品| 91亚洲色图| 国产精品久久久久久久久久久久| 99少妇| 日韩人妻精品中文字幕| 男人网站婷婷| 国产精品色哟哟| 91久久久久久| 99久久久无码| 欧美超碰96| 麻豆AV一区二区| 爱干爱射网啊啊啊| 91精品久久久久久77777| 色综和网| 欧美综合狠| 欧美日韩中文字幕不卡| 新亚洲无码| 操国产逼| 日韩久久.一级黄色片| www.99中文字幕| aaaa少妇高潮大片| 精品久久99| 久妇网| 日日夜夜国产综合| 亚洲九九视频在线观看| 综合亚洲欧美| 一个色导综合| 91麻豆va国产精品| 精品.99999| 熟妇艹鸡八| 亚洲丰满很很操| 欧美日韩狠狠爱| 啪啪综合网| 国产成人自拍视频视频| 中文字幕 国产 精品| 激情五月婷婷| 97色色,97综合| 黑人性欧美| 精品人妻一区二区三区在| 亚洲一区在线观看欧洲 | 欧美日本视频一区| 啊啊啊好大好深| 久久在线观看免费视频| 在线观看精品国产免费| 97久精品| 茄子社区国产精品| w w w.久久精品| 天天看天天在线精品| 色5月婷婷| 区一二区日韩亚洲乱码av电影| 天天操天天7| 欧美超碰在线| 黄aaaaaaaaaaaaaaaaaa色网站| 人人人人人人少妇| 日韩电影免费网站麻豆视频| 中文字幕高清精品一区| 五月丁香六月激情综合| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 久久婷婷影院| 男人的天堂成人的社区| 久久久久久久唑| 伊人五月天激情| 9热9热综合网| 97视频在线免费观看| 久久久精品无码亚免费| 97日视频| 亚洲伊人久久综合97| 亚洲操人| 超碰一区二区| 色噜噜精品一区二区三| 久久超碰98| 日韩三级伊人| 粉嫩在线一区二区懂色| 亚洲不卡AV在线| 男人精品天堂一区| 天堂а√在线最新版在线| 欧美黑人XXXⅩ高潮交| 久操av在线| 综合免费无码中文| 91伊人久久在线| 在线无码视频| 欧美情色男人的天堂| 成人精品在线免费视频| 亚洲有薄码区日本系列中文字幕| 四虎影视欧美| 亚洲激情综合| 午夜福利视频在线一区| 色拍偷亚洲| 操迟操逼在巾线Fre看| 欧美性,亚州色| TS人妖另类精品视频系列| 人妻天堂综合网| 欧美大的香蕉有线电视视频| 五月婷婷六月丁香| 青青草好吊色| 东北女人av| 尤物av网站免费在线播放| 久久最新免费视频23| 成人线上超碰| 97 超碰 人人做 人人爱| 91丨国产丨白浆秘 洗澡动漫| 男人亚洲91首页在线| 欧美中出| 加勒比日本在线| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 色淫网站优优视频| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 婷婷爽人人婷婷爽视频| 天天日日日射| 每日更新AV| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 91社区伊人| 日韩三级在线观看mp4| 国产精品福利视频播放| 日本中文字幕一区| 爱射综合| 男人女人18禁片免费看网站| 婷婷香网站| av资源在线观看少妇| 丝袜足交视频| 97超碰精品图片| 99在线精品观看99| 成人性爱免费播放| 肉丝无码中文高清| 久久一二三四五六七八九区区区| 欧美不卡五十路| 二三四区精品| 天天爽夜夜操| 18禁中文字幕| 中文字幕乱妇免费视频| 超碰97资源大奶| 欧美顶级黄色大片免费| 中文字幕国产在线天堂| 精品视频久久区| 精品久久久久,69国产成人精| 91av一区二区在线观看| 日本一区二区三区四区免费观看| 午夜啊啊| 欧美91网站| 国产av尤物| 性影在线视频| 天天看夜夜看日日干| 97国产综合欧美| 欧美中文字幕男人天堂久久精品| 无码精品蜜桃一区二区三区ww| 蜜臀99久久精品久久久久| 欧美 亚洲 另类 综合| 日日狠狠久久偷偷色综合免费| 天天色,天天干,天天干| 国产性爱强奸乱伦大全| 青青草导航在线视频| 国产一区麻豆免费观看| 天天插天天射| 成年人一级黄色毛片大全在线观看| 亚洲 暴爽 AV人人爽日日碰| 亚洲中字慕不卡| 另类av天堂| 欧美日韩第一页| 免费观看国产小粉嫩喷水精品午| 中文字幕丰满子伦无码专区在线视频最新| 肉丝无码中文高清| 国产久久男人天堂| 久草综合视频| 99热在线不卡| 久草资源在线视频官方总站日韩丝袜美腿 | 色婷婷丁香五月天| 亚洲欧洲国产综合av| 97在线视频观看网站| 无码国产精品96久久久久孕妇| 精品无人区麻豆乱码1区2区图片| 国产一区二区三区,在线观看观看 五月开心久久AV官网 | 好看的91视频| 午夜精品久久久99| 亚州色站 日韩电影| 毛片视频白嫩| 成人网欧美风情| 97色插| 精品人妻夜夜草| 无码一区二区三区四区五区六区七区八区九区十区视频 | 亚洲黄色| 欧美黑人熟妇精品91| 亚州欧美在线| 久久久久久久9| 神马久久午夜| 亚洲无码国产探花在线观看| 亚洲无码成人精品| 中文字幕一区二区三区高清| 日韩卡一卡二卡三在线| a级成人毛片免费视频高清| 亚洲精品天堂久久A∨51成人漫| 免费啪啪av| 日韩无码a片| 404操逼福利视频| 90后性网国产欧美| 麻豆天美国美国产AV| 国产成人资源| 男人 天堂 日 亚洲| 国产乱人妻精品入口| 操淫穴亚洲五月丁香| 精品女同一区| 97超碰美女| 精品久久久久久AV无码| 色色福利| 婷婷丁香五月综合| 91红杏| 少妇人妻激情四射| 爱爱60秒免费视频| 日本久久99| 97欧美综合| 夜夜狠狠躁日日躁色视频| 亚瑟国产精品久久无码| 美女高潮视频91| 精品女同一区| 亚洲五月天激情| 天天摸夜夜摸| 久久9免费视频| 欧美综合天天| 夜嗨影院| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 99超级碰免费视频| 吉田爱美AV在线| 狠狠干2020| 国产一国产一级毛片古装| 日韩在线性爱免费视频| 丁香五月成人| 久久久久久久久久久999| 亚洲色图片区| 日本操逼视频不卡直接放| 不卡免费av在线播放| 欲色啪| 亚洲97在线| 国产精品久久久久久无码红治院| 天美传媒av 在线| 97欧美色综合| 日本人妻伦在线中文字幕| 日韩性爱播放| 亚洲精品一卡二卡三卡福利视频网站 | 夜夜高潮夜夜爽夜夜爱爱一区| 久久久精品91八戒| 久操综合在线| 亚洲一区中文字幕| 十八禁成人网站在线观看| 男女打扑克高清网站| 精品无人区麻豆乱码1区2区图片| 超碰在线观看av不卡| 最新一二三区视频| 欧美色视| 大香网伊人久久综合| 96国产污污污丝袜| 久久久久少妇| 日韩一级二级| 日天天九九天堂666| 福利视频一区二区微拍| 欧美日韩一干二干| 欧亚无码视频| 夜夜夜久久| 加勒比中文av| 色综合婷婷| 青草伊人久久| 欧美亚洲中文字幕| 精品二区三四区五电影| 欧美人妻精品一区二区| 色九九综合AV| 日韩午夜精品一区二区三区电影| 国产乱人妻精品入口| www.久久制服糖| 美女的肌被草喷水视频| 亚洲AV成人无码一二三久久| 欧美一级欧美三级在线观看| 思思热国产高清| 久久久一热在线播放| 蜜臀久久99精品久久久久| 亚洲色图超碰在线| 国产精品96| 91 丝袜在线| 加勒比在线观看一区二区| 婷婷另类小说| 97人妻免费中文字幕| 亚洲91综合| 国模精品一区二区三区苹果色戒| 农村少妇久久久久久久| 国产按摩一区二区三区| yiqicaoav| 狠狠操狠狠操操| 久久久久久久 九九九九九九九| 亚洲无 码A片在线观看麻豆| 天天综和| 欧美色性爱| 1204人成网站色www| 人人操AV| 九九九精品成人免费视频小说| 久操 高清| 自拍偷拍 日韩无码| 中文字幕欧美精品亚洲日韩蜜臀| 中文字幕精品一区二区精品| 丝袜人妻av一区二区| 天天影视射综合网| 亚洲欧美在线观看2021| 亚洲图片小说欧洲| 日欧美色| 人人看人人摸人人色| 夜夜欢天天干| 激情终合网| 中文字幕在线高清男人的天堂| 欧美天天干| 精产国品一区二三产品| 国产一区二区视频在线播放| 日韩超碰97| 精品中文日韩字幕视频| 97操碰| 亚洲天堂在线怕怕视频 | 美女尤物人人操| 欧美亚洲特P| 97这里都是精品| 婷婷亚洲综合| 草草影院最新网址| 国产区在线| 青青草男人天堂| 日韩AV片| 久久6热视频免费观看| 2024年最新色情网站在线观看| 亚洲自拍欧美色综合| 女人爽到高潮久久久| 日韩一级特黄av毛片| 麻豆天美91| 青青草AV色| 天美欧美国产| 成人AV素股で擦久久| 精品伊人久久久大香线蕉小说| 天堂69亚洲精品中文字| 中文字幕视频二区| 久热99999| 99re69综合| 蜜桃久久综合视频| 超碰人妻在线| 浪人综合网| 日本精品网站在线中文| 国产一级内射高清视频| 96一区二区三区| 亚洲区限制级| 天堂国产AV| 91在线免费观看处女| 久久久精品九| se,,,亚洲欧美| 国产a级精品| 99国内精品| 熟女精品一区二区三区| 欧美日韩国产色图在线| 欧美日韩一区二区三区四区蜜桃| 国产日韩精品suv| 天天干嫩逼网| 亚洲色宗合| 午夜欧美精品久久久| 久热精品在线| 四虎884| 熟女熟妇一区二区三区视频| 国产AB视频| 91欧美巨乳| 国产后入清纯| 91熟女视频网| 熟妇一区,二区,三区。| 在线播放中文字幕| 好一吊区二区| 日韩97超碰| 天天干夜夜鈤| 黑人综合网| 男人天堂网址| 国产成人亚洲精品无码最新在线| 日韩成人高清一区二区| 国产精品久久aV| 最近2018中文字幕在线高清第一页| 亚洲97| 国产精品久久久久久亚洲色欲| 国产在线播放成人免费| 国产在线综合福利网站| 婷婷在线视频在线观看| 久久久久人妻二区精品叶可怜| 91人妻精华帖| 国产av美女被艹的乱叫| 丁香五月婷婷色| 91蜜臀在线久久久久| 秋霞男人网| 天天干人妻| 亚洲性综合11| 欧美资源| av天堂精品久久| 大香蕉黄色一区| 又大又黄国产| 久久99精品九九久久久婷婷| 久久精品女同亚洲女同13| 熟妇熟女一区二区三区| 午夜男女爽爽爽影院视频| 国产亚洲女v在线观看| 国产福利影视| 人妻碰碰碰碰碰碰| 成人在线午夜视频一区| 东北女人高潮视频| 五月天婷婷在线看 | 四虎视频在线观看| 亚洲综合草草| 69视频入口| 黄色av片三级三级三级免费看| 大香蕉伊人久久| 色999偷自拍拍| 玖玖无码超碰| 中文字幕乱码人妻二区三区| a在线视频免费观看| av在线浏览| 欧美淫乱视频| 99久久精品欧美国产| 亚洲精品日韩国产欧美| 亚洲色图加勒比| 丝袜美腿91| 日本1区2区不卡视频| 色婷婷综合网站| 亚洲 se图 欧美电影| 伊人国产AV| 思思热久久成人| 精品久久在线区一区| 狠狠操狠狠燥| 精品国产91内射久久| 五月婷在线| 1000午夜黄色| 国产 亚洲 一二三四| 色玖玖| 蜜桃精品一区二区三区久在线| 国产偷人伦激情在线观看| 8050午夜少妇无码| 97干天天| 少妇熟女1区2区3区| 丰满人妻一区二区三区| 91劲爆| 成人精品一区二区91毛片不卡| 草草影院在线视频| 香港久久久| 久久三| 97视频900| 国产精品蜜臀久久久久无码AV| 日韩精品国产精品五码一区二区| 97草草| 无码日韩人妻av一| 精品999日本| 国产高清吃奶免费视频网站| 校园春色之综合网| 欧美熟妇精品黑人巨大91| 亚洲操逼无码| 九一性生活免费视频| 一区二区三区黄色片a| 99re不伦| 亚洲欧美国产中文视频| 在线啊啊啊啊| 超碰色综合| 天无日色综合| 成人怡红院| 青青草日本无码| 欧美97爱| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 91天美传媒在线观看| 中文字幕人成乱码熟女香港| 九九热五区| 韩三级a视频在线观看| 校园春色综合色| 强奸乱伦 亚洲一区| 校园春色综合色| 久久久精品电影| 玖玖资源中文字幕制服丝袜| 操www| 曰韩少妇无码| 在线观看精品国产免费| 九九这里只有精品| 亚洲精品久久久久久久蜜桃臀| 9久9久| 亚洲激情久久| 加勒比伊人| 欧美少妇第一页| 国产av强奸美女| 亚洲涩图欧美| 久久婷婷五月天| 久久精品一区二区三区四区五区| 一牛影视久久久一区二区三区| 日韩成人高清一区二区| 91日日| 欧美日韩性爱无码| 色区97| 国产视频三区四区| 色色网91| 欧亚韩国999| 一区二区三区精品黑丝白丝酒店对鸡| 啊啊啊在线观看| 99抽插| 翔田千里av一区二区三区| 国产精品国产精品国产| 伊人991| 综合婷婷| 国产美女自拍AV| 9.1小视频| 青青草原狼av| 亚洲欧美国产成人综合不卡| 欧美不在线| 五月开心久久AV官网| 五月天婷婷基地| AV一起草在线| 亚洲精品电影| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美人人天天网| 久久99热这里只频精品6学生| 妇女性内射冈站HDWWWCOM| rivers-china.com| 国产午夜福利视频在线| 超碰在线人妻| 欧美日韩国产黄色片| 麻豆成人AV| 尤物视频网 刘玥| 天天干2019| 一块操欧美性爱| 一区二区三区黄色片a| 大香蕉中文在线| 一本久久精品中文字| 欧美日韩超碰在线| 日本道久久综合色色| 免费αV在线视频| 欧美天天干| 超碰在线成人电影| 91成人国产综合久久精品蜜月| 欧美99| 亚洲最大无码中文字幕网站| 中文字幕五月婷婷免费| 国产精品剧情| 桑老女人九区| 97热视频在线观看| 四虎免费看黄| 久久欧美1卡2卡3| 五月婷婷综合网| 国产乱伦一二三区| 岛国毛片手机在线观看| 色欲久久久久综合网| 蜜臀久久99精品久久久久久婷婷| 风骚少妇视频中文字幕| 日韩精品午夜操呦呦不卡影院| 色悠久久久av| 日本操逼视频导航| 超碰 国产熟女精品一区| 精品性爱一区二区| 9久9久| 久妇网| 一本久道久久综合狠狠爱一密臀精 | 亚洲一区二区三区AV无码 | 亚洲综合另类欧美久久久| 丁香五月av| 狠狠色婷婷7777久| 久操不卡视频| 亚洲成人精品久久久| 久热69九色熟妇97| 又大又白奶子| 人人人人人人少妇| www.激情| 极品色社| 九九热免费国产视频婷婷伊人| 日韩人妻精品久久久久| 99热这里是精品| 五月婷视频| 色女综合| 日韩天美| 爆乳免费黄网站| 久久久久久久少妇| 亚洲射综合网| 色欲人妻一区二区在线| 韩国女主播青草在线| 狠狠热这里都是精品| 99热导航| 免费成人在线熟妇网| 96久久久精品| 国产AV天美传媒一区二区三区 | 亚洲色图 欧美热图 清纯唯美 另类自拍 | 日韩亚洲中文字幕在线| 三级AV入口| 欧美综合娱乐久久| 人人爱人人操人人性| 曰韩无码777| 亚洲 欧美 天天| 色五月天AV| 国产成人精品一区| 国产精品久久久亚洲第一牛牛_在线观看 | 性综合网| 草草影院最新网址| 亚洲av无线观看| AV大香蕉| 欧洲中文字幕| 亚洲电影91| 久久东京热成人| 人妻性爱一区二区| 国产理论视频在线播放| 久草大| 打av高清| 999九九精品| 中出20p| 亚洲人妻精品一区二区| 国产无马在线| 亚洲AV无码国产精品久久久久 | 日韩美女,国产传媒,视频一区| 日韩八十路老熟女| 久草在线| 国产精品自在自拍视频| 97超碰碰碰| 欲色啪| 国产无码久久高清| 午夜黄色免费在线观看| 熟妇人妻一区二区三区| 粉嫩久久久极品| 91内射| 色欲日韩欧美在线一区| 91色黑人少妇| 久久9久久| AV和黑人在线播放| 成人欧美一区二区三区黑人一| 欧美A√综合网| 久久精品熟妇丰满人妻99| 秋霞蝌科网日本一区| 婷婷综合在线观看| 超碰吊日色| 岛国大片在线观看网站入口| 97WW精品| 日韩青久久| 麻花豆传媒剧国产MV出差| 亚洲精品视频二区| 粉嫩久久久极品| 国产精品99精品视频网站| 六月婷婷综合| 国产久9| 国产免a费看黄片在线| 久久久工口| 中文不卡视频| 精品在线观看视频在线| 国产青视频| 日本操逼视频免费| 久久久一区二区三区四曲免费听| 精品九九九九九九九九九| 伊人影院日本| 97九色人妻| 欧美 亚洲| 99热91| 中文字幕熟女人妻丝袜丝| 欧美黄片免费在线观看视频| 欧美天天谢综合网| 99无码狠狠久久| 国产精品一区人妻精品阁在线| 丝袜美腿91| 亚洲成人久久美女| 人妻大香蕉| 久久高清欧美国产| 夜夜青青无码影院| 久久亚洲AV成人精品无码| 天天影视射综合网| 交换娇妻呻吟声不停中文字幕| 秋霞男人网| 91被操| 欧美日韩国产电影| 人人看人人插| 好看的91视频| AV一起草在线| 九九久久国产精品| 中文乱码字字幕在线第5页| 日日操免费视频| 国产熟女| 成人三一级一片aaa| 天美传媒av一区二区| 欧美性爱免费短视频| 强被迫伦姧在线观看无码网站| 亚洲性综合9| AV色五月天| av在线一区二区三区| 亚洲国产中文字幕| 簧片免费看视频| 男人天堂毛片| 综合熟女| 尤物av网站免费在线播放| 男女打扑克高清网站| a片 xxxx受爽视频| 久久綜合很很很| 黑人操一区二区| 久草久日| 婷婷五月天av| 日本羞羞的视频在线播放| 麻豆av一区二区三区| 中文字幕AV乱伦| 日本加勒比无码专区一二三| 国产免费操逼| 97欧美色综合| 亚洲综合五月天婷婷丁香| 97视频网站| www.99热在线只有精品| 熟女色综合久久| 97伊人网| 九九色色| 中文人妻av高清一区| 中出91视频| 91在线美女| 久久亚洲欧美中文字幕国语| 33044男人的天堂深夜备| 天天影视网综合少妇| 一起草视频在线| 97欧美色资源| 五月丁香影院| 黑人美精品 A片| 国偷自 一区| 欧美精品在线观看| 最新中文字幕在线亚洲| 久草成人| 久久久久久9999| 色婷婷丁香五月| 国产免a费看黄片在线| 欧美色97| 美女黑人91神马| 鲁鲁色综合网| 亚洲第一黄色av网站| av线电影| 91干熟女| 欧美黄色手机在线观看| 激情文学欧美| 我要看免费韩日黄片| 亚洲中文字幕在现观看| 大香蕉色欲AV| 婷婷色网| 麻豆国产精品午夜视频| 中文字日本乱码| 操91| 久久久久久久久成人av解说| AV麻豆免费一区| 综合亚州欧美| 国产亚洲日本| 欧美一区二区在线资源| 丁香六月婷婷久久综合| 老熟女搡BBBB搡BBBB视频| 亚洲欧美黄| 欧美瑟综合| 综合久久99亚洲人妻中文在线| 开心五月激情网| www.人人cao| 久久亚洲AV无码专区首页| 精品国产Av无码久久久亚洲| 麻豆色99999| 2017超碰| 欧美韩国你懂得在线 | 欧美日韩不卡a片| 五月丁香激情四射| 96精品久久久| 青青欧洲黑| 香一区二区三区| 五月天婷婷基地| a级理论午夜日本| 欧美日韩精品一区二区三区高清| 26uuu欧美日韩| 搡老熟女老女人老熟妇免费视频| 99久久99久久免费精品蜜臀| 偷窥自拍亚洲| 伊人午夜福利视频| 亚洲一区制服诱惑| 亚洲精品欧洲精品| 99综合自拍| 97中文字幕色| 亚洲中文字幕日产无码久久| 亚洲不卡AV在线| 91欧美高清| 欧美成人9797| 99re6久热只有精品6在线直播 | 蜜臀aV午夜一区二区三区| 蜜屁Av| 69精品人人人人| 亚洲视频小说| 亚洲国内精品成人不卡| 天天超级碰碰碰| 久久国产99精品72福利| 亚洲青青青视频在线| 91美腿丝袜在线观看| yirendaxiangjiashipin| 日本中文字幕在线视频| www.久久99| 人妻激情另类| 久久嫩草国产成人一区|