PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NGW100 ISI Video



cieks0301
06.08.2008, 15:21
Hallo,

Ich habe NGW100 und CAM-c3188a.
Ich habe neue Kernel 2.6.25.10.atmel.2 auf dem Board kopiert.

Ich habe endlich /dev/video0 und /dev/video1 auf dem Board, nachdem ich die gebrauchten modules geladen habe.

Aber es gibt noch Fehlermeldung:
Failed to open video device: No such device
als ich das Programm capture laufen lasse:
http://www.avr32linux.org/twiki/bin/view/Main/AtmelIsiDriver

Patching habe ich auch schon gemacht.

Hier sind lsmod und dmesg von Board:

lsmod:

Module Size Used by Not tainted
i2c_gpio 2336 0
i2c_algo_bit 4676 1 i2c_gpio
i2c_dev 4740 0
ovcamchip 15208 0
v4l2_common 8800 0
i2c_core 16176 5 i2c_gpio,i2c_algo_bit,i2c_dev,ovcamchip,v4l2_com
mon
v4l2_int_device 2080 0
compat_ioctl32 992 0
atmel_isi 13956 0
videodev 25824 1 atmel_isi
v4l1_compat 10212 1 videodev
xt_state 1888 1
iptable_filter 2432 1
ipt_MASQUERADE 2368 1
iptable_nat 4936 1
nf_nat 12758 2 ipt_MASQUERADE,iptable_nat
nf_conntrack_ipv4 11304 4 iptable_nat,nf_nat
nf_conntrack 42320 5 xt_state,ipt_MASQUERADE,iptable_nat,nf_nat,nf_co
nntrack_ipv4
ip_tables 8208 2 iptable_filter,iptable_nat
vfat 8480 0
fat 35868 1 vfat
nls_base 5696 2 vfat,fat

dmesg:

Linux video capture interface: v2.00
atmel_isi: fbd at 11cf5008 video buffer at phys addr 10c00000
atmel_isi: fbd at 11cf5030 video buffer at phys addr 10c40000
atmel_isi: fbd at 11cf5058 video buffer at phys addr 10c80000
atmel_isi: fbd at 11cf5080 video buffer at phys addr 10cc0000
atmel_isi atmel_isi.0: capture buffer: 962560 bytes at b1f00000 (phys 0x11f00000)
atmel_isi atmel_isi.0: Atmel ISI V4L2 device at 0xfff02c00
ovcamchip: v2.27 for Linux 2.6 : OV camera chip I2C driver

i2c /dev entries driver
i2c-gpio i2c-gpio.0: using pins 6 (SDA) and 7 (SCL)
atmel_isi_capture: opened

Vielen Dank.

Gruss

p_mork
06.08.2008, 16:12
Bist Du sicher, dass Du alle benötigten Module geladen hast? atmel-isi.ko zu laden reicht nicht, Du musst auch den Kamera-spezifischen Treiber miteinbeziehen.

MfG Mark

cieks0301
06.08.2008, 16:26
Hallo,

den Treiber für das Kameramodul habe ich auch geladen (ovcamchip).

Ich habe beim Patchen in /drivers/media/video/Kconfig so gemacht:

if VIDEO_CAPTURE_DRIVERS && VIDEO_V4L2

config VIDEO_AVR32_ISI
tristate "AVR32 video support"
depends on VIDEO_DEV
---help---
This module makes the AVR32 Image Sensor Interface available
as a v4l2 device.

config VIDEO_OVCAMCHIP
tristate "OmniVision Camera Chip support"
depends on VIDEO_AVR32_ISI && I2C
---help---
Support for the OmniVision OV6xxx and OV7xxx series of camera chips.
This driver is intended to be used with the ov511 and w9968cf USB
camera drivers.

To compile this driver as a module, choose M here: the
module will be called ovcamchip.

Ist so richtig? Ist das Kameramodul wahrscheinlich defekt? Ich habe keinen Multitester, und das Kameramodul bisher ist noch nicht getestet.

Gruss

p_mork
06.08.2008, 20:55
"This driver is intended to be used with the ov511 and w9968cf USB
camera drivers. " Hmm, so wie ich das verstehe sind die Treiber für USB gedacht. Soweit ich weiss werden zuzeit ofiziell nur die MT9M112 und die AT76C451BC auf dem AVR32 unterstützt, wenn Du was anderes haben möchtest, musst Du den Treiber selbst (um)schreiben, was nicht allzu schwer sein sollte, da alles schon vorgefertigt ist.

MfG Mark.

cieks0301
07.08.2008, 10:42
Danke für die Info p_mork.

Es ist schlecht für mich, da ich schwach in dieser Programmiersache, aber will trotzdem versuchen.

Gruss

p_mork
07.08.2008, 16:17
Lass Dich nicht so schnell runterkriegen. Füg den Patch für AT76C451BC hinzu und schreib dann die Datei drivers/media/video/at76c451bc.c um. Ist eigentlich ganz easy, Es gibt 4 Funktionen (neben den für die Initialisierung) die in ein atmel_isi_camera struct eingetragen und an den ISI-driver übergeben werden müssen:
get_format - wird vom ISI-driver aufgerufen, um die aktuellen Einstellungen der Kamera wie z.B. Auflösung, Farbraum usw zu bekommen
set_format - zum setzen der Kameraeinstellungen
start_capture - wird immer aufgerufen, wenn ein neues Frame angefordert wird.
stop_capture analog zu start_capture.

Im Anhang findest Du einen selbst geschriebenen Treiber für die C3088, dem Vorganger der C3188. Sie hat eine geringere Auflösung, ist sonst aber sehr änlich zur C3188. Ersetzt auch die atmel-isi.c und atmel-isi.h , da die ofiziellen Dateien teilweise fehlerhaft/verinfacht sind. Schau Dir die ov6620.c an und änder da die Kamera-spezifischen Zeilen in den oben gennanten Funktionen. Um den Code als Modul compilieren zu können, muss in drivers/media/video/Kconfig so in Zeile 22 direkt nach dem VIDEO_AVR32_ISI Absatz folgendes hin:
config VIDEO_OV6620
tristate "OV6620 camera"
default n
depends on VIDEO_AVR32_ISI && I2C
---help---
This will add support for the OV6620 camera.

und in drivers/media/video/Makefile in Zeile 86 nach TUNER_3036 und AVR32_ISI :
obj-$(CONFIG_VIDEO_OV6620) += ov6620.o

Jetzt sollte es möglich sein im menuconfig den ov6620 (so heißt der Chip de C3088) zu wählen.

Probiers einfach mal aus, wenns Probleme gibt kannst Du ja hier schreiben.

MfG Mark

cieks0301
07.08.2008, 16:49
Ich freue mich sehr, vielen Dank p_mork!

Ich werde alles heute so schnell wie möglich zu erledigen. Gerade bin ich noch beschäftigt, den Treiber für OV7670 zu ändern, aber es gibt kein Datenblatt im Internet und ich habe Schwierigkeiten, den Register zu vergleichen.

Vielen Dank nochmal.

MfG.

p_mork
07.08.2008, 18:31
...aber es gibt kein Datenblatt im Internet...
http://groups.google.com/group/microdia/web/OV7670%20Data%20Sheet.pdf

cieks0301
07.08.2008, 21:22
Hallo,

danke Dir für das Datenblatt.
Ich habe den Treiber schon fertig gemacht. Beim kompilieren tritt noch dieser Fehler auf:


CC [M] drivers/media/video/atmel-isi.o
drivers/media/video/atmel-isi.c: In function 'avr32_isi_g_ctrl':
drivers/media/video/atmel-isi.c:999: error: 'V4L2_CID_FRATE' undeclared (first use in this function)
drivers/media/video/atmel-isi.c:999: error: (Each undeclared identifier is reported only once
drivers/media/video/atmel-isi.c:999: error: for each function it appears in.)
drivers/media/video/atmel-isi.c: In function 'avr32_isi_s_ctrl':
drivers/media/video/atmel-isi.c:1015: error: 'V4L2_CID_FRATE' undeclared (first use in this function)
make[3]: *** [drivers/media/video/atmel-isi.o] Error 1
make[2]: *** [drivers/media/video] Error 2
make[1]: *** [drivers/media] Error 2
make: *** [drivers] Error 2


V4L2_CID_FRATE ist nicht in videodev2.h deklariert.
genauso wie
V4L2_CID_I2C_WRITE und V4L2_CID_CLKRC (in ov7620.c)

Anhang ist der Treiber für ov7620. Ich kann mehrere Sache nicht verstehen, z.B.:

Zeile 122 Über CHIP_ID habe ich schon herausgefunden, aber I2C-Adresse für das Kameramodul ist mir noch nicht klar.

Zeile 484 Was macht die Funktion V4L2_CID_I2C_WRITE eigentlich?

Vielen Dank für Deine Hilfe.

MfG

cieks0301
08.08.2008, 11:43
Hallo,

Ich habe probiert, set_control und get_control auszukomentieren, und die originale atmel-isi Dateien benutzen.
So sieht es aus, nachdem ich das Modul geladen habe



/lib/modules/2.6.25.10.atmel.2/kernel/drivers/media/video # modprobe -v ov7620
Loading module i2c-core
Loading module ov7620
Unable to handle kernel paging request at virtual address 78385814
ptbr = 91d7a000 pgd = 00000000
Oops: Kernel access of bad area, sig: 11 [#1]
FRAME_POINTER chip: 0x01f:0x1e82 rev 2
Modules linked in: ov7620(+) i2c_core atmel_isi videodev v4l1_compat xt_state ip
table_filter ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack ip
_tables vfat fat nls_base
PC is at i2c_smbus_xfer+0x8/0x438 [i2c_core]
LR is at i2c_smbus_write_byte_data+0x22/0x2c [i2c_core]
pc : [<c08a9674>] lr : [<c08a9c62>] Not tainted
sp : 91fede00 r12: 78385808 r11: 0000e0a0
r10: 00001ad8 r9 : 00000000 r8 : 00000012
r7 : 91fede6c r6 : c0893480 r5 : 901ed8c0 r4 : 7fbd4e6c
r3 : 901ed8b8 r2 : 00000016 r1 : 78385808 r0 : c0851dbc
Flags: qvNzc
Mode bits: hjmde....g
CPU Mode: Supervisor
Process: insmod [501] (task: 91c17300 thread: 91fec000)
Stack: (0x91fede00 to 0x91fee000)
de00: 00000003 00000000 fffffff9 900c7e0c 91fede50 00000001 9005e2b6 9003db30
de20: 91fede50 00000001 4e6c
de80: 901ed8b8 00000016 c0893300 c0851dbc 00000002 91fede9a 900180ae 91fedeac
dea0: 901e9ef4 02faf080 9001436a 91fedebc 901e9ef4 901ed8c0 7fbd4e6c c0892016
dec0: 91feded0 c0893480 901ed8c0 7fbd4e6c c088006a 91fedee4 c0893480 901ed8c0
dee0: 7fbd4e6c 90036638 91fedf94 91e15da0 901ed8c0 7fbd4e6c 91fedef4 0007f008
df00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
df20: 00000000 00000000 00000000 00000000 00000009 c0852d9c 91d54cc0 c08520dc
df40: c0851fc4 c0851000 00000000 00000070 00000070 c08924c8 c08a9f88 00000016
df60: c0851d04 c0851dbc c085212c c0852104 00000016 00000014 00000000 0000240b
df80: 900514fe 91fedfa4 91c7ef00 c08acda0 00000000 90013132 00000000 00072f70
dfa0: 0000504c 7fbd4e6c 00072a60 7fbd4f17 80000000 91fec000 00000001 2aaf3bac
dfc0: 7fbd4d40 7fbd4d34 0007f018 0000230b 0007f008 0000230b 00000073 0007f008
dfe0: 00072f70 0000504c 7fbd4e6c 00072a60 7fbd4f17 00000002 0005a980 0007f018
Call trace:
[<c08a9c62>] i2c_smbus_write_byte_data+0x22/0x2c [i2c_core]
[<c0892016>] ov7620_write+0xa/0x10 [ov7620]
[<c088006a>] ov7620_init+0x6a/0xa8 [ov7620]
[<90036638>] sys_init_module+0xf8c/0x105c
[<90013132>] syscall_return+0x0/0x12



MfG

p_mork
08.08.2008, 11:52
V4L2_CID_I2C_WRITE und V4L2_CID_CLKRC sind von mir selbt zugefügte Kommandos, um von Anwendungsprogramm das CLKRC -Register beschreiben zu können, bzw jedes beliebige Register(V4L2_CID_I2C_WRITE).

Ich bin gerade nicht zuhause, deshalb kann ich Dir keine videodev2.h schicken, aber irgendwo dort ist per #define eine Konstante Namens V2L_CID_BASE oder änlich definiert, die den Offset für Treiber-spezifische Controls enthält. Schreib da einfach sowas in der Art rein:

#define V4L2_CID_FRATE (V4L2...BASE + 0)
#define V4L2_CID_I2C_WRITE (V4L2...BASE + 1)
#define V4L2_CID_CLKRC (V4L2...BASE + 2)


Zeile 122 Über CHIP_ID habe ich schon herausgefunden, aber I2C-Adresse für das Kameramodul ist mir noch nicht klar.
Datenblatt S. 11: The device slave addresses are 42 for write and 43 for read.

Eventuell musst Du die Adresse duch 2 teilen, da i2c_smbus_write_byte_data und i2c_smbus_read_byte_data einen Adressbereich von 0..127 verlangen.

MfG Mark

cieks0301
08.08.2008, 12:22
Hallo Mark,

achso, deshalb schriebst Du 0x60 statt 0xC0 für ov6620.

videodev2.h habe ich so geändert:
#define V4L2_CID_FRATE (V4L2_CID_BASE+24)
#define V4L2_CID_I2C_WRITE (V4L2_CID_BASE+25)
#define V4L2_CID_CLKRC (V4L2_CID_BASE+26)
#define V4L2_CID_LASTP1 (V4L2_CID_BASE+27) /* last CID + 1 */

Ich werde nochmal kompilieren.
Vielen Dank.

MfG
ciek

cieks0301
08.08.2008, 13:22
Hallo,

tritt fast der gleiche Fehler auf:


Loading module ov7620
Unable to handle kernel NULL pointer dereference at virtual address 000000e0
ptbr = 91eb1000 pgd = 91d40000
Oops: Kernel access of bad area, sig: 11 [#1]
FRAME_POINTER chip: 0x01f:0x1e82 rev 2
Modules linked in: ov7620(+) v4l2_int_device v4l2_common i2c_core compat_ioctl32
atmel_isi videodev v4l1_compat xt_state iptable_filter ipt_MASQUERADE iptable_n
at nf_nat nf_conntrack_ipv4 nf_conntrack ip_tables vfat fat nls_base
PC is at ov7620_init+0xa/0xac [ov7620]
LR is at sys_init_module+0xf8c/0x105c
pc : [<c08ac00a>] lr : [<90036638>] Not tainted
sp : 91ff3ee4 r12: 00000000 r11: c08aa278
r10: c08aa3c0 r9 : ffffffff r8 : c08ac000
r7 : 91ff3ee4 r6 : 91de0fa0 r5 : 901ed8c0 r4 : 7fc0be2c
r3 : 901ed8b8 r2 : 00000016 r1 : c08aa3c0 r0 : c0851e9c
Flags: qvNzC
Mode bits: hjmde....g
CPU Mode: Supervisor
Process: insmod [518] (task: 91c6a600 thread: 91ff2000)
Stack: (0x91ff3ee4 to 0x91ff4000)
3ee0: 90036638 91ff3f94 91de0fa0 901ed8c0 7fc0be2c 91ff3ef4 0007f008
3f00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3f20: 00000000 00000000 00000000 00000000 00000009 c0852ed8 91e4e480 c08521bc
3f40: c08520a4 c0851000 00000000 00000072 00000072 c08a9548 c08a4f88 00000016
3f60: c0851de4 c0851e9c c085220c c08521e4 00000016 00000014 00000000 0000256d
3f80: 900514fe 91ff3fa4 91d61cc0 c08a7da0 00000000 90013132 00000000 00072f70
3fa0: 0000504c 7fc0be2c 00072a60 7fc0bed5 80000000 91ff2000 00000001 2aaf3bac
3fc0: 7fc0bd00 7fc0bcf4 0007f018 0000246d 0007f008 0000246d 00000073 0007f008
3fe0: 00072f70 0000504c 7fc0be2c 00072a60 7fc0bed5 00000002 0005a980 0007f018
Call trace:
[<90036638>] sys_init_module+0xf8c/0x105c
[<90013132>] syscall_return+0x0/0x12

aber trotzdem wurde das Modul geladen



Module Size Used by Tainted: G
i2c_gpio 2336 0
i2c_algo_bit 4676 1 i2c_gpio
i2c_dev 4740 0
ov7620 5632 1
v4l2_int_device 2080 0
v4l2_common 8800 0
i2c_core 16176 5 i2c_gpio,i2c_algo_bit,i2c_dev,ov7620,v4l2_common

compat_ioctl32 992 0
atmel_isi 12200 1 ov7620
videodev 25824 1 atmel_isi
v4l1_compat 10212 1 videodev
xt_state 1888 1
iptable_filter 2432 1
ipt_MASQUERADE 2368 1
iptable_nat 4936 1
nf_nat 12758 2 ipt_MASQUERADE,iptable_nat
nf_conntrack_ipv4 11304 4 iptable_nat,nf_nat
nf_conntrack 42320 5 xt_state,ipt_MASQUERADE,iptable_nat,nf_nat,nf_co
nntrack_ipv4
ip_tables 8208 2 iptable_filter,iptable_nat
vfat 8480 0
fat 35868 1 vfat
nls_base 5696 2 vfat,fat



Ich kann die Fehler noch nicht finden.
Eine Frage noch, ist es richtig so, in /drivers/media/video/Kconfig zu schreiben:



menuconfig VIDEO_CAPTURE_DRIVERS
bool "Video capture adapters"
depends on VIDEO_V4L2
default y
---help---
Say Y here to enable selecting the video adapters for
webcams, analog TV, and hybrid analog/digital TV.
Some of those devices also supports FM radio.

if VIDEO_CAPTURE_DRIVERS && VIDEO_V4L2

config VIDEO_AVR32_ISI
tristate "AVR32 video support"
depends on VIDEO_V4L2
---help---
This module makes the AVR32 Image Sensor Interface available
as a v4l2 device.

config VIDEO_OV7620
tristate "OV7620 camera"
default n
depends on VIDEO_AVR32_ISI && I2C
---help---
This will add support for the OV7620 camera.


Mach es einen Unterschied zwischen VIDEO_V4L2 und VIDEO_DEV?

In ov7620.c
static struct ov7620_reg ov7620_registers[65]{}
welche Adresse soll ich hier eingeben? Ich glaube, ich habe falsch gemacht (2. Variable is t nur name 8-[ )

Danke für das Support.

MfG,
Ciek

p_mork
08.08.2008, 14:26
Der erste Fehler konnte deswegen aufkommen, weil die physikalischen Buffer für die Frames eine konstante Größe von nur 198 kb haben, die Kamera jedoch wahrscheinlich 600kb (640*480*2) liefert und es deshalb zum Bufferoverflow kommt. Ersetzt mal alle 352 durch 640 und alle 288 durch 480 in atmel-isi.c, dann sollte es gehen.

Zu anderen Problemen kann ich Dir leider nichts sagen, bin selbst noch Anfänger.

MfG Mark

cieks0301
08.08.2008, 14:57
Hallo,

Du hast Recht, habe vergessen den Buffer zu ändern.
Aber die gleiche Meldung kommt noch, und beim Ausführen des 'capture' Programms, kommt noch:
Failed to open video device: No such device

Ich habe schon gemessen, das Kameramodul bekommt schon richtig 5V von dem Board, d.h. der Spannungsregler funktioniert eigentlich. Zum Testen, ob es defekt oder nicht ist,weiß ich nicht leider, wie ich das machen soll.

Ich gucke nochmal den ov7620.c, ich glaube der Fehler liegt darin.

Vielen Dank.
MfG,
Ciek

cieks0301
08.08.2008, 16:58
Hallo Mark,

es funktioniert =)
Zum ersten Mal bekomme ich Data =)

Ich habe Clockrate geändert und reset wegmachen (in 0v7620_init Funktion).

Ich weiß noch nicht, wie man diese Kode als Bild übernehmen kann.
Zu Hause kann ich nicht weiter arbeiten, da ich keine serielle Schnitstelle habe und über LAN funktioniert irgendwie nicht mehr.
Ich werde nochmal am Montag mit dem Board weiterspielen und mit der Bildverarbeitung anfangen.

Hast Du Hinweis, wie ich mit openCV programmieren soll?

Danke vielmals.

MfG
Ciek

p_mork
09.08.2008, 15:35
Von OpenCV hab ich (fast) keine Ahnung, wahrscheinlich muss man die Libs lediglich neucompilieren.

Eine serielle Schnittstelle sollte man schon haben, spätestens beim Upgraden des Bootloaders oder wenn man von SD-Karte booten will braucht man die unbedingt. Und was genau funtkioniert nicht - telnte/ssh oder LAN an sich?

MfG Mark

cieks0301
09.08.2008, 16:38
Hallo,

versuche ich über telnet mit dem Board zu verbinden, dann geht es am Anfang. Aber nachdem ich irgendeine Taste eingegeben habe, dann wurde die Verbindung sofort beenden.
Weitere Verbindung ist nicht möglich ohne reboot. Nach reboot, wird es sich wiederholen.

Ich versuchte auch erstmal einen PC über serielle Schnittstelle mit dem Board zu verbinden, dann noch meinen Laptop über telnet zu verbinden, tritt diese Fehlermeldung in hyperterminal auf:

release_dev: ptm0: read/write wait queue active!
release_dev: ptm0: read/write wait queue active!
release_dev: ptm0: read/write wait queue active!
release_dev: ptm0: read/write wait queue active!
usw..

Im Forum las ich, dass der Script avr32 gcc 4.2.2 (zusammen mit kernel 2.6.25.10) noch diesen Bug haben.

Ich probiere jetzt ein kleines Program zu erstellen und ab Montag nochmal mit der Datenausgabe vom Kameramodul zu beschäftigen.

Vielen Dank.

MfG

cieks0301
11.08.2008, 10:08
Hallo,

es gibt noch Fehler im Treiber und die Daten sind kein richtiges ppm Format, meiner Meinung nach. Dieses capture-Programm nimmt eigentlich nur ein Bild auf oder? Beim Ausführen kommt das Programm nicht zum Ende.

Meldung in dmesg:

Linux video capture interface: v2.00
atmel_isi: fbd at 11cf5008 video buffer at phys addr 10c00000
atmel_isi: fbd at 11cf5030 video buffer at phys addr 10d00000
atmel_isi: fbd at 11cf5058 video buffer at phys addr 10e00000
atmel_isi: fbd at 11cf5080 video buffer at phys addr 10f00000
atmel_isi atmel_isi.0: capture buffer: 614400 bytes at b1f00000 (phys 0x11f00000
)
atmel_isi atmel_isi.0: Atmel ISI V4L2 device at 0xfff02c00
i2c /dev entries driver
i2c-adapter i2c-0: sendbytes: NAK bailout.
OV7620 Image Sensor at i2c-gpio0:0x21
i2c-gpio i2c-gpio.0: using pins 6 (SDA) and 7 (SCL)
atmel-isi: v4l2 ioctl VIDIOC_QUERYCAP, dir=r- (0x80685600)
atmel-isi: driver=atmel-isi, card=Atmel Image Sensor Interface, bus=, version=0x
00000100, capabilities=0x05000001
atmel-isi: v4l2 ioctl VIDIOC_S_FMT, dir=rw (0xc0cc5605)
atmel-isi: type=video-cap
atmel-isi: width=320, height=240, format=VYUY, field=any, bytesperline=0 sizeima
ge=0, colorspace=0
atmel-isi: v4l2 ioctl VIDIOC_QUERYCAP, dir=r- (0x80685600)
atmel-isi: driver=atmel-isi, card=Atmel Image Sensor Interface, bus=, version=0x
00000100, capabilities=0x05000001
atmel-isi: v4l2 ioctl VIDIOC_S_FMT, dir=rw (0xc0cc5605)
atmel-isi: type=video-cap
atmel-isi: width=320, height=240, format=VYUY, field=any, bytesperline=0 sizeima
ge=0, colorspace=0
i2c-adapter i2c-0: sendbytes: NAK bailout.
atmel_isi_capture: v4l2 ioctl VIDIOC_QUERYCAP, dir=r- (0x80685600)
atmel_isi_capture: driver=atmel-isi, card=Atmel Image Sensor Interface, bus=, ve
rsion=0x00000100, capabilities=0x01000001
atmel_isi_capture: v4l2 ioctl VIDIOC_S_FMT, dir=rw (0xc0cc5605)
atmel_isi_capture: type=video-cap
atmel_isi_capture: width=320, height=240, format=VYUY, field=any, bytesperline=0
sizeimage=0, colorspace=0
atmel_isi_capture: v4l2 ioctl VIDIOC_QUERYCAP, dir=r- (0x80685600)
atmel_isi_capture: driver=atmel-isi, card=Atmel Image Sensor Interface, bus=, ve
rsion=0x00000100, capabilities=0x01000001
atmel_isi_capture: v4l2 ioctl VIDIOC_S_FMT, dir=rw (0xc0cc5605)
atmel_isi_capture: type=video-cap
atmel_isi_capture: width=320, height=240, format=VYUY, field=any, bytesperline=0
sizeimage=0, colorspace=0

Ich verwende nur data0 bis data7 für die Kamera. In videodev2.h steh noch kein richtiges Format für diesen Fall oder?

Vielen Dank.

MfG

p_mork
11.08.2008, 15:25
Wie meindt Du das, dass das Programm nicht bis zum Ende kommt? Bricht es einfach ohne Meldung ab oder bleibst es hängen?


Ich verwende nur data0 bis data7 für die Kamera. In videodev2.h steh noch kein richtiges Format für diesen Fall oder?
Das Format hat mit der Anschlussart nichts zu tun.Standartmäßig ist es auf UYVY geschaltet. Die Kamera sollte natürlich dasselbe Format liefern, meine OV6620 ist nach Reset auf 16bit UYVY gestellt und man muss in set_format ein Paar Register ändern, um auf 8-bit YUVU zu kommen. Im Datenblatt sollte stehen wie das geht. Außerdem sollte die durch ioctl VIDIOC_S_FMT angegebene Auflösung auch die Auflösung sein, die die Kamera wirklich liefert.

MfG Mark

cieks0301
11.08.2008, 15:49
Hallo,

Die Register für ov7620 sind gleich mit ov6620 auf diesem Fall.

Es liefert immer die Daten (unbekannte Symbole), und wird nur durch strg+c beenden.

Der Fehler liegt in:

i2c-adapter i2c-0: sendbytes: NAK bailout.

Ich versuche noch den Fehler zu beheben, aber ist noch nicht erfolgreich.

Vielen Dank.
MfG

p_mork
11.08.2008, 18:01
Wahrscheinlich liegt der i2c-Fehler in der Hardware. Verwendest Du das eingebaute Atmel-I2C des Chips oder GPIO-bit-banging? Beim ersteren gibts nämlich (immer noch) einige Bugs.

Mann kann das Catpture-Prog das Bild auch in eine Datei speichern lassen durch -o <filename> und es dann am PC betrachten.

MfG Mark

cieks0301
11.08.2008, 21:54
Es gibt Fehler beim Laden des Atmel-twi-Moduls, also verwende ich i2c-gpio Modul.

Ich habe versucht, das Bild in eine Datei zu speichern, aber weil der Aufnahme nicht zum Ende kommt, reicht der Speicherplatz nicht aus. Die Datei enthält also segmentation fault.

Dieser Fehler
i2c-adapter i2c-0: sendbytes: NAK bailout.
ist von /drivers/i2c/algos/i2c-algo-bit.c

/* A slave NAKing the master means the slave didn't like
* something about the data it saw. For example, maybe
* the SMBus PEC was wrong.
*/
} else if (retval == 0) {
dev_err(&i2c_adap->dev, "sendbytes: NAK bailout.\n");
return -EIO;

Vielen Dank Mark.
MfG

p_mork
12.08.2008, 18:47
Ich habe versucht, das Bild in eine Datei zu speichern, aber weil der Aufnahme nicht zum Ende kommt, reicht der Speicherplatz nicht aus. Die Datei enthält also segmentation fault.
Das Porgramm berechnet die Anzahl der zu lesenden Bytes aus der Größe des Bildes, da man unendlich viele Bytes aus video0/1 lesen kann(es werden einfach immer neue Frames aufgenommen).. Lass Dir mal die Auflösung ausgeben, in dem Du printf("%dx%d: %d bytes\n", image->width,image->height, image->size); ans Ende der init_videodev() Funktion in capture.c schreibst.

Sorry kann Dir nichts zu I2C sagen, bei mir hats es sofort funktionert. Eventuell ist die Kamera falsch an den Bus angeschlossen.


#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>

#define RD_LEN 1

int main(int argc, char *argv[])
{
int fd, i;
struct i2c_rdwr_ioctl_data msgset;
struct i2c_msg msg[2];
unsigned char write = 0x9B; /* subaddress */
unsigned char read[RD_LEN];
long slave_addr = 0x0B;

msg[0].addr = slave_addr;
msg[0].flags = 0;
msg[0].len = 1;
msg[0].buf = &write;

msg[1].addr = slave_addr;
msg[1].flags = I2C_M_RD;
msg[1].len = RD_LEN;
msg[1].buf = read;

msgset.msgs = msg;
msgset.nmsgs = 2;

if((fd = open("/dev/i2c-0",O_RDWR)) < 0) {
perror("could not open device");
return fd;
} else {
printf("opened device i2c-0\n");
}

if(ioctl(fd,I2C_RDWR,&msgset) < 0) {
perror("ioctl");
return -1;
}

for (i = 0; i < RD_LEN; i++)
printf("0x%08x\n", read[i]);

return 0;
}

Wenn dieses Programm anstandslos funktioniert ist es höchswahrscheinlich ein Hardwareproblem.

MfG Mark

cieks0301
13.08.2008, 11:39
Hallo Mark,

jetzt kann ich das Bild mit irfanView sehen, aber sieht nicht gut aus.

Hier ist die ausgabe von Deinem Programm:
opened device i2c-0
0x00000001

Der Fehler tritt nicht mehr, wenn ich video0 verwende. Video1 funktioniert gar nicht.

Vielen Dank.
MfG

p_mork
13.08.2008, 13:33
Das ist ja wunderbar dass jetzt endlich überhaupt ein Bild aufgenommen werden kann. Keine Sorge, bei mir hats am Anfang genauso ausgesehen, Es kommt daher dass die Kamera die Daten im falschen Format mir möglicherweise auch falscher Auflösung liefert. Wie gesagt, die Auflösung der Kamera muss exakt der im Programm angegebenen entsprechen und sollte die Daten im VYUY ausgeben, also V vom ersten Pixel, Takt, Y vom ersten Pixel, Takt, U vom zweiten Pixel, Takt, Y vom zweiten Pixel, Takt, V vom dritten Pixel, Takt usw....

Video1 ist fürs Streaming gedacht und bietet soweit ich mich erinnern kann kein Capture-Interface. Beim Streaming werden mehrere Buffer angelegt (beim atmel-isi immer 4) die dann ins User-Memory gemappt werden und wo dann die Kamara nacheinander dauernd Daten hinschreibt und nach jedem Frame den Buffer wechselt. Dabei können größere Frameraten erziehlt werden als mit Capture.

MfG Mark

cieks0301
14.08.2008, 23:39
Danke für die Info.

Vor 2 Tagen hat Lars Haering, die neue Version von dem ISI-Treiber und Micron Treiber hochgeladen. Vielleicht brauchst Du auch die, um deins zu verbessern oder mit dem zu spielen.

MfG