i.mx6 - Wie Registerzugriff per JTAG

Gast #5999758
Lesenswert?

Guten Morgen

Ich habe einen i.mx6, auf dem Linux läuft.
Leider funktioniert ein Teil der Peripherie nicht korrekt.
Ich habe eine falsche Konfiguration in Verdacht.
Daher wollte ich, wie ich es von den kleinen STM32 her kenne, die 
REgister der Peripherie auslesen und überprüfen, ob diese richtig 
gesetzt sind.

Dafür habe ich einen JLink per JTAG verbunden.
Ich habe gewartet bis das Linux system gestartet ist und dann per 
jlink.exe die Verbindung als "generic-A9" hergestellt.
Der Core wurde erkannt. Per halt konnte ich ihn auch anhalten und die 
CPU register auslesen.
Das Problem ist nun, dass ich keinen Zugriff bekomme.
Im uboot konnte ixh mit "mem 100 10" noch etwas lesen. Sobald Linux 
gestartet ist, erscheint ein Fehler "Could not read memory".
Sowohl unter Linux als im uboot kann das Peripherieregister 0x020E0008 
nicht gelesen werden.

Gibt es etwas, was freigeschaltet werden muss?

Vielen Dank
Gast #5999778
Lesenswert?

Danke für die schnelle Antwort
Ich habe exakt die Bezeichnung ausgewählt, die auf dem Chip steht: 
MCIMX6U7...
Der Chip scheint auch erkannt zu werden:
1
AP[0]: AHB-AP (IDR: 0x44770001)
2
AP[1]: APB-AP (IDR: 0x24770002)
3
AP[2]: JTAG-AP (IDR: 0x14760010)
4
Iterating through AP map to find APB-AP to use
5
AP[0]: Skipped. Not an APB-AP
6
AP[1]: APB-AP found
7
ROMTbl[0][0]: CompAddr: 82141000 CID: B105900D, PID:04-003BB907 ETB
8
ROMTbl[0][1]: CompAddr: 82142000 CID: B105900D, PID:04-002BB906 CTI
9
ROMTbl[0][2]: CompAddr: 82143000 CID: B105900D, PID:04-004BB912 TPIU
10
ROMTbl[0][3]: CompAddr: 82144000 CID: B105900D, PID:04-001BB908 CSTF
11
ROMTbl[0][4]: CompAddr: 8214F000 CID: B105100D, PID:04-000BB4A9 ROM Table
12
ROMTbl[1][0]: CompAddr: 82150000 CID: B105900D, PID:04-000BBC09 Cortex-A9
13
Found Cortex-A9 r2p10
14
6 code breakpoints, 4 data breakpoints
15
Debug architecture ARMv7.0
16
Data endian: little
17
Main ID register: 0x412FC09A
18
I-Cache L1: 32 KB, 256 Sets, 32 Bytes/Line, 4-Way
19
D-Cache L1: 32 KB, 256 Sets, 32 Bytes/Line, 4-Way
20
System control register:
21
  Instruction endian: little
22
  Level-1 instruction cache enabled
23
  Level-1 data cache enabled
24
  MMU enabled
25
  Branch prediction enabled
26
Memory zones:
27
  [0]: Default (Default access mode)
28
  [1]: AHB-AP (AP0) (DMA like acc. in AP0 addr. space)
29
  [2]: APB-AP (AP1) (DMA like acc. in AP1 addr. space)
30
Cortex-A9 identified.

Speicher auslesen klappt trotzdem nicht. Ich vermute, es hat was mit der 
MMU zu tun, ich weiß es aber leider nicht.
Gast #5999784
Lesenswert?

Martin schrieb:
> Ich vermute, es hat was mit der
> MMU zu tun, ich weiß es aber leider nicht.

IIRC nutzt Linux auch im Kernel-Space ein Mapping via MMU. Man muss sich 
also diesen IO-Bereich irgendwo in den Adressraum mappen lassen. 
Allerdings ist die Frage, ob die MMU für JTAG-Zugriff überhaupt relevant 
ist und das nicht direkt auf den Bus geht... Spannend ;-)
Gast #5999809
Lesenswert?

Wenn du den Prozessor im Kernel Space anhältst (d.h. der Processor Mode 
ist nicht "User") und dann über das SCTLR.M bit die MMU (und damit 
auch den Cache) abschaltest, den Register-Zugriff durchführst, und dann 
SCTLR.M sofort wieder einschaltest vor der weiteren Programmausführung 
könnte es vielleicht gehen... Oder desaströs abstürzen :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren