1、事情的起因
這段時間一直在忙活自己的畢設(shè),由于畢設(shè)里面要用到MPU6050當(dāng)作姿態(tài)傳感器,因此在淘寶上買了一批MPU6050自己來焊接。
但是當(dāng)我寫代碼的時候,使用的時候出現(xiàn)了一個很大的問題。
設(shè)備的ID讀取并沒有問題,由于使用的是硬件I2C,這里發(fā)現(xiàn)讀到的設(shè)備ID是0x98,然后因此并沒有進入初始化階段。
說實話這就遇到了非常頭疼的問題就是能通訊,但是讀出來的東西不對。如果通訊出了問題,那么功夫就要可以花在檢查電路等硬件問題上。但是如果是讀出來的內(nèi)容有問題,那么就很頭疼了。
后來查詢資料過程中發(fā)現(xiàn),這個問題在國內(nèi)外技術(shù)論壇中出現(xiàn)過很多次,并且MPU6050的模塊層次不齊,甚至有20個模塊中將近一般出現(xiàn)設(shè)備ID是0x98的情況。
而大部分人認(rèn)為,這是假的MPU6050(Fake chip)幾乎所有的解決方法都是:換一個模塊。
但是由于博主回家沒帶熱風(fēng)槍,并且說實話QFN的封裝確實惡心,還是想著能不能找到解決辦法。
2、轉(zhuǎn)機
把這件事情定義為黑心商家用其他芯片來替代MPU6050的話,那么解決辦法就是搞清楚這塊芯片到底是哪塊芯片。
要確定具體是哪塊芯片的話,其實范圍還比較小,首先是和MPU6050 是 pin to pin兼容的,并且連設(shè)備地址就是一樣的,且設(shè)備ID是0x98的芯片。
然后看到了一塊這個芯片,ICM-20689,它的器件地址和寄存器地址幾乎和MPU6050一模一樣,封裝也完全相同,而且居然是MPU6050原廠設(shè)計的芯片。
并且原本MPU6050的設(shè)備識別碼寄存器的地址是0x75,存放的值是0x68。
而ICM-20689的0x75寄存器也是設(shè)備識別碼,但是存放的值是0x98.
這段話的描述和MPU6050幾乎是一樣的,甚至仔細(xì)查看芯片手冊,ICM-20689的性能不輸MPU6050甚至超過MPU6050,并且支持SPI傳輸,而不像MPU6050僅支持I2C, 像是MPU6000+MPU6050的融合版。
3、解決方案
由于寄存器地址和內(nèi)容完全相同,因此實際上ICM-20689和MPU6050的用法完全相同。
這件事情可能就是一個較大的烏龍,甚至芯片商家可能都沒有搞清楚ICM-20689和MPU6050的區(qū)別,將MPU6050和ICM-20689混為一談(其實我認(rèn)為也可以)。
而在我們使用的過程中也是因為代碼中有檢查設(shè)備識別碼這個步驟,而如果去掉這個步驟,那么也不會發(fā)生這個問題。
互聯(lián)網(wǎng)中搜到的關(guān)于這個問題,很多的解決辦法都是換一個模塊。
在ID檢查中添加ICM20689的設(shè)備ID即可正常使用。因此,這是塊假的MPU6050嘛?或許是,但是我認(rèn)為更像是一場烏龍~