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