Forum: Mikrocontroller und Digitale Elektronik Probleme mit ADS7846 beim NGW100


von terrordaddy (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend zusammen,

ich habe ein Problem mit dem Betrieb des Hantouch HT043A Touchpanels am 
NGW100. Sobald ich durch das Touchscreen einen Interrupt auslöse (Das 
Panel berühre) scheint sich der Kernel aufzuhängen.

Mein Boot:
1
Starting kernel at 90000000 (params at 11f71008)...
2
3
Linux version 2.6.27.6.atmel.1 (root@user-desktop) (gcc version 4.2.2-atmel.1.1.3.buildroot.1) #2 Tue Jul 21 14:54:31 CEST 2009
4
CPU: AT32AP700x chip revision C
5
CPU: AP7 [01] core revision 0 (AVR32B arch revision 1)
6
CPU: MMU configuration: Shared TLB
7
CPU: features: dsp simd ocd perfctr java
8
CPU: Running at 140.000 MHz
9
Physical memory:
10
  10000000-11ffffff
11
Reserved memory:
12
  10000000-101907a1: Kernel code
13
  101907a2-1022bb57: Kernel data
14
  1022c000-102c1fff: Framebuffer
15
Exception vectors start at 90014000
16
CPU: Paging enabled
17
Node 0: start_pfn = 0x10000, low = 0x12000
18
Node 0: mem_map starts at 902c4000
19
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128
20
Kernel command line: console=ttyS0 root=/dev/mmcblk0p1 rootwait fbmem=600k
21
PID hash table entries: 128 (order: 7, 512 bytes)
22
avr32_comparator: irq 0, 140.000 MHz
23
console [ttyS0] enabled
24
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
25
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
26
Memory: 29656k/29656k available (1521k kernel code, 3112k reserved, 112k data, 80k init)
27
SLUB: Genslabs=10, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
28
Calibrating delay using timer specific routine.. 281.84 BogoMIPS (lpj=563689)
29
Mount-cache hash table entries: 512
30
net_namespace: 756 bytes
31
smc smc.0: Atmel Static Memory Controller at 0xfff03400
32
NET: Registered protocol family 16
33
pdc pdc.0: Atmel Peripheral DMA Controller enabled
34
at32_eic at32_eic.0: External Interrupt Controller at 0xfff00100, IRQ 19
35
at32_eic at32_eic.0: Handling 4 external IRQs, starting with IRQ 64
36
AVR32 AP Power Management enabled
37
dw_dmac.0: DesignWare DMA Controller, 3 channels
38
NET: Registered protocol family 2
39
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
40
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
41
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
42
TCP: Hash tables configured (established 1024 bind 1024)
43
TCP reno registered
44
NET: Registered protocol family 1
45
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
46
msgmni has been set to 57
47
io scheduler noop registered
48
io scheduler cfq registered (default)
49
atmel_lcdfb atmel_lcdfb.0: 600KiB frame buffer at 1022c000 (mapped at b022c000)
50
atmel_lcdfb atmel_lcdfb.0: fb0: Atmel LCDC at 0xff000000 (mapped at ff000000), irq 1
51
atmel_usart.0: ttyS0 at MMIO 0xffe01000 (irq = 7) is a ATMEL_SERIAL
52
MACB_mii_bus: probed
53
eth0: Atmel MACB at 0xfff01800 irq 25 (00:04:25:1c:81:80)
54
eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=0:01, irq=-1)
55
MACB_mii_bus: probed
56
eth1: Atmel MACB at 0xfff01c00 irq 26 (00:04:25:1c:81:81)
57
eth1: attached PHY driver [Generic PHY] (mii_bus:phy_addr=1:03, irq=-1)
58
physmap platform flash device: 00800000 at 00000000
59
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
60
 Amd/Fujitsu Extended Query Table at 0x0041
61
number of CFI chips: 1
62
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
63
RedBoot partition parsing not available
64
Using physmap partition information
65
Creating 3 MTD partitions on "physmap-flash.0":
66
0x00000000-0x00020000 : "u-boot"
67
0x00020000-0x007f0000 : "root"
68
0x007f0000-0x00800000 : "env"
69
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xffe00000 (irq 3)
70
atmel_spi atmel_spi.0: Using bounce buffer at 0x24000000 len 4096
71
mtd_dataflash spi0.0: AT45DB642x (8448 KBytes) pagesize 1056 bytes
72
atmel_usba_udc atmel_usba_udc.0: MMIO registers at 0xfff03000 mapped at fff03000
73
atmel_usba_udc atmel_usba_udc.0: FIFO at 0xff300000 mapped at ff300000
74
ads7846 spi0.1: touchscreen, irq 64
75
input: ADS784x Touchscreen as /class/input/input0
76
at32ap700x_rtc at32ap700x_rtc.0: rtc core: registered at32ap700x_rtc as rtc0
77
at32ap700x_rtc at32ap700x_rtc.0: Atmel RTC for AT32AP700x at fff00080 irq 21
78
at32_wdt at32_wdt.0: AT32 WDT at 0xfff000b0, timeout 2 sec (nowayout=0)
79
atmel_mci atmel_mci.0: Atmel MCI controller at 0xfff02400 irq 28, 1 slots
80
Registered led device: sys
81
Registered led device: a
82
Registered led device: b
83
TCP cubic registered
84
Initializing XFRM netlink socket
85
NET: Registered protocol family 10
86
IPv6 over IPv4 tunneling driver
87
NET: Registered protocol family 17
88
NET: Registered protocol family 15
89
RPC: Registered udp transport module.
90
RPC: Registered tcp transport module.
91
cpufreq: AT32AP CPU frequency driver
92
at32ap700x_rtc at32ap700x_rtc.0: setting system clock to 1970-01-01 00:07:53 UTC (473)
93
Waiting for root device /dev/mmcblk0p1...
94
mmc0: new SD card at address 9b42
95
mmcblk0: mmc0:9b42 SD02G 1966080KiB
96
 mmcblk0: p1
97
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
98
VFS: Mounted root (ext2 filesystem).
99
Freeing init memory: 80K (90000000 - 90014000)
100
init started: BusyBox v1.13.1 (2009-07-21 13:59:33 CEST)
101
Mounting virtual filesystems:
102
  /proc mounted
103
  /sys mounted
104
  /dev mounted
105
  /dev/pts directory made
106
  /dev/pts mounted
107
  /dev/shm directory made
108
  /config mounted
109
  /tmp mounted
110
  /var/run mounted
111
  /var/log mounted
112
Setting up mdev: done
113
Setting hostname: 'ngw.example.net'
114
Starting syslogd: done
115
Log messages to syslog: done
116
Starting klogd: done
117
Probing modules:
118
Starting portmap: done
119
Mounting local filesystems: done
120
Network interfaces: udhcpc (v1.13.1) started
121
Sending discover...


Der Fehler der angezeigt wird wenn ich das Touch berühre:
1
/usr/bin # ts_finddev /dev/input/event0 20
2
Probe device /dev/input/event0, Please Touch Screen Anywhere in 20 seconds! ...
3
Unable to handle kernel paging request at virtual address 00200200
4
ptbr = 91d84000 pgd = 91dc7000
5
Oops: Kernel access of bad area, sig: 11 [#1]
6
FRAME_POINTER chip: 0x01f:0x1e82 rev 2
7
Modules linked in: xt_state iptable_filter ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack ip_tables
8
PC is at atmel_spi_work+0x2ba/0x2e8
9
LR is at queue_work+0xc/0x10
10
pc : [<900f732a>]    lr : [<90028ac0>]    Not tainted
11
sp : 91cf7f4c  r12: 00000000  r11: 91cfc958
12
r10: 91c3eb1c  r9 : 91c3eaf0  r8 : 00200200
13
r7 : 91cf7f6c  r6 : 00000000  r5 : 91cfc928  r4 : 00000000
14
r3 : 91c3eab4  r2 : 91c3ead0  r1 : 24000000  r0 : 91c89400
15
Flags: qvNzC
16
Mode bits: hjmde....G
17
CPU Mode: Supervisor
18
Process: atmel_spi.0 [188] (task: 91c56f00 thread: 91cf6000)
19
Stack: (0x91cf7f4c to 0x91cf8000)
20
7f40:                            11c3e83e 00000002 00000008 003d08ba 4d780300
21
7f60: 902189d8 9018eefe 91cf7f90 90028650 91cf7f90 91c798c0 900f7070 00000000
22
7f80: 901db72c 901c0bcc 901c0b94 91c19db0 900289a8 91cf7fc8 91cf6000 91cf6000
23
7fa0: 00000000 91c798c0 ffffe000 9002a8c0 91c19db0 00000000 91c56f00 9002aae8
24
7fc0: 91cf7fc0 91cf7fc0 9002a8ec 91cf7fec 91c798c0 90028900 00000000 00000000
25
7fe0: 900209e4 9002a8c0 91c19db0 900209e4 00000000 00000000 00000000 00000000
26
Call trace:
27
 [<90028650>] run_workqueue+0x58/0xcc
28
 [<900289a8>] worker_thread+0xa8/0xb4
29
 [<9002a8ec>] kthread+0x2c/0x44
30
 [<900209e4>] do_exit+0x0/0x4c0
31
32
/usr/bin #

Ich hab das Touchpanel nach dem RMT1 Schema angeschlossen. SPI geht an 
SPI0 und der Interrupt geht an PB25 (IRQ - EXTINT0 - DMAC - DMARQ1)

Ich benutze Buildroot 2.3.0
Ich hab mal meine setup.c angehängt.

Bin für jede Hilfe Dankbar

Grüsse

von Gast (Gast)


Lesenswert?

Hast du schon die Dateien atmel_spi.c und atmel_spi.h mit denen von 
hier:
http://git.kernel.org/?p=linux/kernel/git/hskinnemoen/avr32-2.6.git;a=tree;f=drivers/spi
ersetzt?

von terrordaddy (Gast)


Lesenswert?

Hallo und Danke,

ja, das habe ich schon ausprobiert. Leider ohne richtigen Erfolg.
Der Fehler kommt zwar nicht mehr, aber ts_finddev reagiert leider auch 
nicht wenn ich auf dem Touch rumtippe. Kann ich sonst noch irgendwo 
nachsehen ob der Touch arbeitet?

Bin jetzt gerade dabei mein Buildroot komplett neu zu kompilieren.

Grüsse

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

Kopier dir mal die anghängten Datein in den bin Ordner. Versuch es mal 
damit.

von Gast (Gast)


Lesenswert?

> Kann ich sonst noch irgendwo nachsehen ob der Touch arbeitet?
Ja, durch Aufruf von ts-test. Dann gibt er die Werte auf der Konsole 
aus.

von Gast (Gast)


Lesenswert?

übrigens, vor dem neu compilieren, make clean aufrufen, aber das weißt 
du sicher.

von terrordaddy (Gast)


Lesenswert?

Hallo und Danke,

ich hab jetzt Buildroot und den Kernel mit den atmel_spi.c und 
atmel_spi.h aus oben genannter Quelle neu compiliert, das image auf 
SD-Karte gespielt und ts_test ts_finddev ts_calibrate mit denen von Dir 
ersetzt.

leider tut sich immer noch nichts weder ts_finddev noch ts_test geben 
etwas aus. Die Interrupts werden gezählt
1
/proc # cat interrupts
2
           CPU0
3
  0:         44      intc  avr32_comparator
4
  1:          0      intc  atmel_lcdfb
5
  2:          0      intc  dw_dmac
6
  3:      93850      intc  atmel_spi.0
7
  7:       1409      intc  ttyS0
8
 21:          0      intc  rtc
9
 22:      26244      intc  tc_clkevt
10
 25:          0      intc  eth0
11
 26:       1160      intc  eth1
12
 28:      21513      intc  atmel_mci.0
13
 31:          0      intc  atmel_usba_udc
14
 64:        261       eic  ads7846
15
185:          0      gpio  mmc-detect
16
/proc #

Sollte ich den ADS7846 besser als Modul compilieren?

Ich bin echt Ratlos auch wenn meine spi Verdrahtung fliegend ist sollte 
immerhin etwas angezeigt werden.

Güsse

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

> Sollte ich den ADS7846 besser als Modul compilieren?
Nein, fest eincompilieren.
Ich häng mal meine setup.c an, ist aber für einen Grasshopper.

von Gast (Gast)


Lesenswert?

evtl nochmal die SPI-Anschlüsse überprüfen.

von terrordaddy (Gast)


Lesenswert?

Ich weiß nicht an was es liegen könnte...

hab jetzt alle Leitungen überprüft und könnte nichts feststellen.
Die SPI Kommunikation müsste funktionieren. Wenn ich die Interrupts 
aufliste, den Touch berühre und dann nochmal die Interrupts aufliste 
haben sich atmel_spi.0 und ads7846 verändert. Berühre ich den Touch 
nicht bleiben sie auch gleich.

Vor Touch-druck:
1
/proc # cat interrupts
2
           CPU0
3
  0:         44      intc  avr32_comparator
4
  1:          0      intc  atmel_lcdfb
5
  2:          0      intc  dw_dmac
6
  3:      49922      intc  atmel_spi.0
7
  7:        764      intc  ttyS0
8
 21:          0      intc  rtc
9
 22:      10978      intc  tc_clkevt
10
 25:          0      intc  eth0
11
 26:          3      intc  eth1
12
 28:      20936      intc  atmel_mci.0
13
 31:          0      intc  atmel_usba_udc
14
 64:        382       eic  ads7846
15
185:          0      gpio  mmc-detect

Nach Touch-druck:
1
/proc # cat interrupts
2
           CPU0
3
  0:         44      intc  avr32_comparator
4
  1:          0      intc  atmel_lcdfb
5
  2:          0      intc  dw_dmac
6
  3:      58830      intc  atmel_spi.0
7
  7:        774      intc  ttyS0
8
 21:          0      intc  rtc
9
 22:      11363      intc  tc_clkevt
10
 25:          0      intc  eth0
11
 26:          3      intc  eth1
12
 28:      20936      intc  atmel_mci.0
13
 31:          0      intc  atmel_usba_udc
14
 64:        432       eic  ads7846
15
185:          0      gpio  mmc-detect
16
/proc #

Dass der atmel_spi.0 einen Interrupt auslöst müsste doch bedeuten, dass 
eine Kommunikation besteht. Gibt es eine Möglichkeit die Daten, die über 
den SPI Bus gehen zu loggen?

Grüsse

von Gast (Gast)


Lesenswert?

welchen Touch-Controller benutzt du?

von Gast (Gast)


Lesenswert?

Man kann im Kernel den Debug-Modus für SPI einschalten - hängt aber dann 
auch vom Treiber ab, ob man dadurch mehr Informationen erhält. Hast du 
mal probiert nicht über tslib zu arbeiten sondern direkt mit 
/dev/input/event0?
Zum Beispiel mit 'cat /dev/input/event0' überprüfen ob beim Berühren des 
Touchpanels überhaupt Daten ausgegeben werden.

von terrordaddy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich benutze einen ADS7846N.

Also mit 'cat /dev/input/event0' werden mir keinerlei Daten ausgegeben.

Ich habe jetzt mal den SPI Debug mit kompiliert. Ich hab mal einen 
Auszug aus '/var/log/messages' angehängt, der zeigt was beim Tippen(1x) 
auf das Touch passiert. Ich schau noch, wie ich irgendwie an die Ausgabe 
vom ADS7846 rankomme.

Bin auch nochmals meine Platine durchgegangen, an der dürfte es auch 
nicht liegen.

Grüsse

von terrordaddy (Gast)


Angehängte Dateien:

Lesenswert?

Hier nochmal ein auszug aus '/var/log/messages'
Dies mal mit dem Rückgabewert des ADS77846

Irgendwie bekomme ich vom ADS7846 nur 0xffff und 0x0000 zurück.

Grüsse

von Gast (Gast)


Lesenswert?

VREF vom ADS ist auch an 3,3V angeschlossen?

von Gast (Gast)


Lesenswert?

du hast auch hoffentlich keine 1µF an den AD-Eingängen angeschlossen?

von terrordaddy (Gast)


Angehängte Dateien:

Lesenswert?

Hab gerade eben nochmals gemessen.
an VREF liegen 3,3V an, die kommen vom neben liegenden VCC mit nem 10µF 
Elko an Masse. An beiden VCC hab ich 0,1µF Abblock Kondensatoren.
An Y- hab ich nen 470 Ohm Widerstand, an den anderen AD-Eingängen hab 
ich 0 Ohm Widerstände.

Ich hänge mal den Schaltplan mit an. Den negierer (heißt das so?) an DIN 
einfach ignorieren, ist ein umgebautes Symbol :)

von terrordaddy (Gast)


Angehängte Dateien:

Lesenswert?

... und Layout

von Gast (Gast)


Lesenswert?

sieht soweit ok aus, den 470Ohm und die BUSY-Leitung kannst du dir 
schenken.
An welche Pins vom NGW100 gehen denn die SPI Leitungen genau?

von terrordaddy (Gast)


Lesenswert?

Meine Pinbelegung sieht so aus:

NGW100                        ADS7846
J5 Pin1 (3,3V)            ->  +3,3V
J5 Pin2 (GND)             ->  GND
J5 Pin3 (SPI0 - MISO)     ->  DOUT
J5 Pin4 (SPI0 - MOSI)     ->  DIN
J5 Pin5 (SPI0 - SCK)      ->  DCLK
J5 Pin6 (SPI0 - CS0)      ->  N.C.
J5 Pin7 (SPI0 - NPCS1)    ->  CS

J6 Pin25 (IRQ - EXTINT0)  ->  PENIRQ

von Gast (Gast)


Lesenswert?

Nur eine Vermutung:

Du verbindest den ADS mit SPI0, hast aber in deiner setup.c stehen:
1
static struct spi_board_info spi01_board_info[] __initdata = {

"SPI01" kenne ich nicht, könnte aber als SPI1 interpretiert werden.

von Gast (Gast)


Lesenswert?

boah..Asche auf mein Haupt. Lösch mal bitte einer den Scheiß den ich da 
oben geschrieben habe. Ich war wohl noch nicht ganz wach :O

von terrordaddy (Gast)


Lesenswert?

Volltreffer!!!

Jetzt funktioniert es :)
Es lag tatsächlich am SPI01. Da wäre ich im leben nie drauf gekommen.

Dankeschön

Eine Frage noch: Wie kann ich den Touchscreen calibrieren, denn 
ts_calibrate läuft ja nur bei 16 und 32bit lcdc? Ich hab aber durch das 
PSP-LCD 24bit.

Grüsse

von terrordaddy (Gast)


Lesenswert?

Am besten ein Bildchen mit den Kreuzen malen, das Bild auf dem Display 
ausgeben und die Kreuze 'antouchen' oder  gibt es irgendwo eine Config?

Grüsse

von Gast (Gast)


Lesenswert?

Hä? Kannst du mal deine jetzige setup.c posten?

ts_calibrate läuft auch beim 24bit LCD. evtl. ohne Grafik.

von terrordaddy (Gast)


Angehängte Dateien:

Lesenswert?

Ja ts_calibrate läuft aber da ich kein Bild sehe kann ich den Touch auch 
nicht kalibrieren. Ich weiß ja nicht wo hin 'touchen'. Drum dachte ich 
ich mal mir ein Bitmap mit den Referenzkreuzen (links oben, rechts 
oben,...) die man 'touchen' muss. Die werden ja, so denke ich nicht 
genau in der Ecke sein, sodern einen gewissen abstand haben.

ts_test und ts_finddev funktionieren auch.

von Gast (Gast)


Lesenswert?

kannst du so machen.

Dann war meine Vermutung doch richtig, dass spi01_board_info[] falsch 
war. Dass muss ich mir noch mal genauer anschauen. Woher war die setup.c 
?

von terrordaddy (Gast)


Lesenswert?


von terrordaddy (Gast)


Angehängte Dateien:

Lesenswert?

So ich hab jetzt mal alle Dateien in einem Archiv zusammengefasst, damit 
Andere die das Touchpanel benutzen wollen keine Probleme haben.

Die Dateien sind für das NGW100 Buildroot 2.3.0 - linux2.6.27.6.atmel.1

Grüsse

von terrordaddy (Gast)


Angehängte Dateien:

Lesenswert?

So ich hab jetzt mal ein 'Kalibrierbildchen' gemalt
Ich weiss nicht ob es stimmt oder ob jemand etwas damit anfangen kann.
Wäre gut wenn es jemand ausprobiert und feedback gibt.

Das original Bild stammt von hier: 
http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:drivers:ad7879

Grüsse

von Robert K. (murdok)


Lesenswert?

Damit ts_calibrate (und ts_test etc.) bei 24 Bit funktioniert muss in 
der tslib bei den test tools in der Datei fbutils.c eine Anpassung an 
zwei Stellen vorgenommen werden:

- in der Funktion setcolor() ein 'case 3:' zu den beiden cases 2 & 4 
hinzufügen:
1
case 2:
2
case 3:
3
case 4:
4
    red = ....

- in der Funktion __setpixel() ein 'case 3:' zum case 4 hinzufügen:
1
case 3:
2
case 4:
3
    if (xormo....

Robert.

von Max (Gast)


Lesenswert?

Um jetzt nicht jedes Mal, wenn ich den Kernel neu kompiliere die von mir 
verändert ts_xxx rüberkopieren, wo muss ich in Buildroot die .c Dateien 
ändern, dass die bei einem neuen "make" mit kompiliert werden? :)

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich hab mal einen Patch für TSLib gemacht, damit ts_calibrate auch bei 
24bpp funktioniert und man, zusätzlich zu den hier veröffentlichten 
Patches, auch die "Kalibrierkreuze" angezeigt bekommt.


Gruß
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.