以前寫了IIC的寫,而且可以用,然后這次需要把一觸摸屏的IC的值給讀出來,調(diào)了幾天,師傅說可能是我的寫有問題,讓我寫個(gè)異常地址比如0xff,結(jié)果寫沒ACK回來,說明我的寫沒有問題; 后來看了一下示波器和手冊,覺得IIC的周期可能小了,才1us,于是改成10us,點(diǎn)觸摸屏后,觸摸IC有值發(fā)生變化,說明IC的IIC周期和我之前配的MCU的IIC的時(shí)鐘不匹配; 可是讀出來的值還是不對,整了幾天,今天再拿代碼重新審視了一遍,把時(shí)序都照著手冊上配了一遍,覺得寫的代碼還是沒有問題,中午看著示波器靈感來了,觸摸按鍵的時(shí)候,發(fā)現(xiàn)讀出來的值和預(yù)想的值差別在于我讀IIC的時(shí)候太快了,周期靠前,所以值是錯(cuò)的,然后改代碼,在寫地址收到ACK后,延遲20us,再讀,OK了; 總結(jié):IIC讀需要注意兩點(diǎn),一、讀取目標(biāo)IC的時(shí)鐘要和自己寫的模擬IIC的時(shí)鐘吻合;二、有的芯片你發(fā)地址過取想讀的時(shí)候,人家沒反應(yīng)這么快,加個(gè)延時(shí)就好了;
|