Witam kolegów bardzo serdecznie,
natrafiłem na kosmiczny wręcz problem podczas próby odczytu\zapisu rejestrów kamery OV7670. Mianowicie, wykorzystując
Wzorując się podanym przykładem, aby odczytać dane ustawień (tu akurat pierwsze 20 bajtów) z kamery powinienem napisać :
PORT_USED = 0, gdyż korzystam z I2C0. Powyższy kod nie działa, otrzymuję same 0x00. Gdy jednakże ograniczę się do takiego "prymitywizmu" :
... to te 20 bitów zostaje bez problemu odczytane(od adresu 0x00, domyślny po resecie). Ponadto w większości zgadzają się z datasheetem OV7670(poza pierwszym bajtem, gdzie dostaję 0xFF, zamiast domyślnego w dokumentacji 0x00). Co więcej udaje się to tylko jeden raz po resecie procesora(powyższe operacje + wysłanie oczytanych danych przez terminal wywoływałem cyklicznie w pętli).
Ponadto chcę zaznaczyć, że korzystałem już z tej biblioteki do komunikacji z czujnikiem MPL115A2 czy pamięciami AT24Cxx, i nie miałem żadnych problemów.
Jeżeli chodzi o sprzęt, to I2C0 mam skonfigurowane na P0.27 i P0.28 (piny open-drain), do tego dwa pull-upy 2k2 do +2V8 (Bo I/O kamery chodzi na 2V8). Kamera tak samo jak procesor jest zasilana 3V3, ma stabilizatory 2V8 i 1V8 na własnym PCB. Do nóżki XCLK podłączony jest sygnał z generatora kwarcowego (typowy DIL16 na 5V) 14.31818MHz poprzez dzielnik rezystorowy złożony z dwóch rezystorów 10k (może tutaj jest problem ?). Pin RESET jest oczywiście podłączony do 2V8.
Na forum TI, w dziale o
Czy moje rozumowanie jest poprawne? Gdzie popełniam błąd? Może próba wykorzystania sprzętowego I2C to zły pomysł i powinienem napisać własne software'owe funkcje ?
natrafiłem na kosmiczny wręcz problem podczas próby odczytu\zapisu rejestrów kamery OV7670. Mianowicie, wykorzystując
Cytat:pobranej z tej strony Link nie mogę w żaden sposób dogadać się z kamerą.MCB1700 Sample Code Bundle for LPC1769 Peripherals using LPCXpresso V2.00 (Jan 10, 2011)
Wzorując się podanym przykładem, aby odczytać dane ustawień (tu akurat pierwsze 20 bajtów) z kamery powinienem napisać :
Kod: C / C++
PORT_USED = 0, gdyż korzystam z I2C0. Powyższy kod nie działa, otrzymuję same 0x00. Gdy jednakże ograniczę się do takiego "prymitywizmu" :
Kod: C / C++
... to te 20 bitów zostaje bez problemu odczytane(od adresu 0x00, domyślny po resecie). Ponadto w większości zgadzają się z datasheetem OV7670(poza pierwszym bajtem, gdzie dostaję 0xFF, zamiast domyślnego w dokumentacji 0x00). Co więcej udaje się to tylko jeden raz po resecie procesora(powyższe operacje + wysłanie oczytanych danych przez terminal wywoływałem cyklicznie w pętli).
Ponadto chcę zaznaczyć, że korzystałem już z tej biblioteki do komunikacji z czujnikiem MPL115A2 czy pamięciami AT24Cxx, i nie miałem żadnych problemów.
Jeżeli chodzi o sprzęt, to I2C0 mam skonfigurowane na P0.27 i P0.28 (piny open-drain), do tego dwa pull-upy 2k2 do +2V8 (Bo I/O kamery chodzi na 2V8). Kamera tak samo jak procesor jest zasilana 3V3, ma stabilizatory 2V8 i 1V8 na własnym PCB. Do nóżki XCLK podłączony jest sygnał z generatora kwarcowego (typowy DIL16 na 5V) 14.31818MHz poprzez dzielnik rezystorowy złożony z dwóch rezystorów 10k (może tutaj jest problem ?). Pin RESET jest oczywiście podłączony do 2V8.
Na forum TI, w dziale o
Cytat:w temacie Link (jeśli dobrze zrozumiałem oczywiście) problem może zostać rozwiązany poprzez ustawienie bitu IGNACK w rejestrach I2C. Jednakże w moim User Manualu do LPC17xx nie znalazłem niczego podobnego. Domyślam się, że tak jak czytam w tym dokumencie Link problem polega na tym, że po ostatnim odczycie procesor powinien wysłać NACK, a tego nie robi i OV7670 dalej chce wysyłać dane a procesor przerywa komunikację. Skutkuje to tym, że dalsza komunikacja jest niemożliwa.DaVinci™ Video Processors
Czy moje rozumowanie jest poprawne? Gdzie popełniam błąd? Może próba wykorzystania sprzętowego I2C to zły pomysł i powinienem napisać własne software'owe funkcje ?