基於BQ40Z50晶元的暫存器讀寫

2021-09-10 12:00:22 字數 693 閱讀 2559

前兩天專案需要實現以下功能:使用微控制器讀取電池電量資訊,電池管理晶元為ti的bq40z50,當時lian連續除錯了3天才完成,各種原因無法一一訴說,今天閒來無事總結下,供自己以後查閱。

微控制器使用的stm32f207,使用模擬i2c讀取bq40z50晶元暫存器。

單獨使用此模擬i2c時序讀取at24c02,光模組均可正常工作,但是讀取bq40z50就不可以。

(1)查晶元手冊如下

嘗試對0x16暫存器的0x44寫入0x21 0x00,使用示波器觀察發現0x44無應答,然後更改為0x00等均無應答,不知道什麼原因;

(2)查smb時序與i2c時序的不同,發現其速率為10k-100k,不可過低或者過高,更改模擬i2c**,固定時序為40k左右,發現暫存器位址有應答,但是讀取的數值不對一直為0xff;

(3)嘗試讀取操作0x16 0x0d,得到電池電量,一直沒有進展;

(4)使用開發板飛線,用微控制器自身i2c core生成的時序訪問bq40z50,發現竟然可以成功讀取;

(5)確認為模擬i2c問題,使用示波器抓取波形分析,發現微控制器自身i2c波形和模擬i2c波形在寫完讀時序後的狀態不一致,更改模擬i2c波形與自身i2c波形一致後問題解決。

總結:不要隨便造時序,因為你不知道其通用性到底如何。

hi3531晶元的標識暫存器

晶元的標識暫存器 0xee0 0xee4 0xee8 0xeec 基址是0x2005 0000 系統控制器提供了晶元標識 id 暫存器sc sysid。這個標識暫存器是乙個概念上 的32bit 的標識唯讀暫存器,實際上由4 個8bit 標識暫存器組成 sc sysid3 sc sysid2 sc s...

基於OHCI的USB主機 暫存器(其它)

usb 埠關電 對 usb埠進行關電處理的目的主要有兩個,一是安全拔下 u盤,防止帶電插拔造成資料丟失或錯誤,另乙個是為了再次開電,對 u盤內部程式進行復位。斷開usb 埠的供電 shortohciharddisable void 清除中斷狀態 該程式在中斷程式中被呼叫,在 ohci 規範中,設定中...

ARM11訪問晶元內部的暫存器空間

arm1136jzf s把memory和peripheral介面分開了,你需要在初始化時告訴cpu,哪些位址範圍是屬於peripheral的,否則它就當memory訪問,當然就訪問不到屬於peripheral 區間的io口暫存器。可以通過arm11的協處理器cp15來告訴cpu外設暫存器的位址,在a...