Forum: Mikrocontroller und Digitale Elektronik AT91SAM7X256 alle IO Pins auf High


von Sergej U. (Firma: HTW) (z0idberg1)


Angehängte Dateien:

Lesenswert?

Hi,

ich entwickel derzeit fuer eine Firma ein System welches einen Spartan6 
LX45 und einen AT91SAM7X256 Controller beinhaltet. Beide sind ueber JTAG 
angebunden. Die Konfiguration des Controllers erfolgt dabei ueber 
OpenOCD. Das Beschreiben des Controller Flashs funktioniert. Das Problem 
ist, dass nach der Konfiguration alle IO Pins High Level (3,3V) fuehren. 
Egal welches Programm auf den Controller geladen wird. Die 
Initialisierung (LowLevelInit) ist soweit "standard", also die die auch 
von Atmel zur Verfuegung gestellt wird. Ebenso das OpenOCD Script. Die 
Beschaltung des Controllers ist soweit auch nicht ungewoehnlich (siehe 
Anhang). Was ich bereits geprueft habe sind die 
Versorgungsspannungspegel (3,3V und 1,8V), diese sind genau so wie sie 
sein sollten, Kurzschluesse habe ich soweit ausgeschlossen. Des weiteren 
habe ich den Quarz vermessen. Dieser schwingt mit 18,432MHz mit einer 
Amplitude von ca. 250mV, allerdings mit einem leichten DC Offset. 
Koennte bereits das dieses Problem verursachen?
So langsam bin ich am Verzweifeln. Meine Annahme ist, dass der 
Controller vielleicht defekt ist, allerdings moechte ich wirklich alles 
ausschliessen bevor ich mich ans Umloeten mache. Waere super wenn Jemand 
mit mehr Erfahrung mit ARM Controllern mir einen Rat geben koennte.

von Stromverdichter (Gast)


Lesenswert?

Ich kenne mich an der Low-Level-Front jetzt auch nicht wirklich aus, 
aber köntest du nicht einfach mal ein einfaches "Blinke"-Skript per 
Samba draufspielen? Die kostenfreie Keil-Version dazu vielleicht 
verwenden, damit kannst du ein paar Kbyte Programmcode in deinen AT91 
schubsen.
Siehst du den an der Debug-Schnittstelle das Romboot?

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Danke fuer die Antwort. Ich habe bisher noch nie SAM-BA benutzt. Vor 
einem Jahr habe ich bereits mit einem AT91SAM7 gearbeitet, damals 
allerdings auf einer nicht selbst entwickelten Leiteprlatte. Habe immer 
direkt ueber JTAG programmiert. Die Entwicklungsumgebung war die selbe 
wie jetzt (selber Rechner). Soweit ich gelesen habe erforder samba auch 
eine Beschaltung die ich nicht implementiert

Die Meldungen der Kofiguration sehen wie folgt aus:
1
**** Build of configuration Default for project pcb_fw ****
2
3
make -k program 
4
Preparing OpenOCD script...
5
Flash Programming with OpenOCD...
6
'C:\OpenOCD\OpenOCD\'openocd-libftdi.exe -f 'C:\OpenOCD\OpenOCD\'olimex-arm-usb-tiny-h.cfg -f 'C:\OpenOCD\OpenOCD\'at91sam7x256.cfg
7
Open On-Chip Debugger 0.4.0 (2010-11-23-14:20)
8
Licensed under GNU GPL v2
9
For bug reports, read
10
  http://openocd.berlios.de/doc/doxygen/bugs.html
11
srst_only srst_pulls_trst srst_gates_jtag srst_open_drain
12
jtag_nsrst_delay: 100
13
jtag_ntrst_delay: 100
14
10000 kHz
15
Info : max TCK change to: 30000 kHz
16
Info : clock speed 10000 kHz
17
Info : JTAG tap: Spartan_6.cpu tap/device found: 0x44008093 (mfg: 0x049, part: 0x4008, ver: 0x4)
18
Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
19
Info : Embedded ICE version 1
20
Info : sam7x256.cpu: hardware has 2 breakpoint/watchpoint units
21
Info : JTAG tap: Spartan_6.cpu tap/device found: 0x44008093 (mfg: 0x049, part: 0x4008, ver: 0x4)
22
Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
23
Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset.
24
target state: halted
25
target halted in Thumb state due to debug-request, current mode: Supervisor
26
cpsr: 0x600000b3 pc: 0x00200b02
27
Warn : NOTE! DCC downloads have not been enabled, defaulting to slow memory writes. Type 'help dcc'.
28
Warn : NOTE! Severe performance degradation without fast memory access enabled. Type 'help fast'.
29
cleared protection for sectors 0 through 15 on flash bank 0
30
at91sam7 gpnvm <bit> <set | clear>
31
#0 : at91sam7 at 0x00100000, size 0x00040000, buswidth 4, chipwidth 0
32
  #  0: 0x00000000 (0x4000 16kB) not protected
33
  #  1: 0x00004000 (0x4000 16kB) not protected
34
  #  2: 0x00008000 (0x4000 16kB) not protected
35
  #  3: 0x0000c000 (0x4000 16kB) not protected
36
  #  4: 0x00010000 (0x4000 16kB) not protected
37
  #  5: 0x00014000 (0x4000 16kB) not protected
38
  #  6: 0x00018000 (0x4000 16kB) not protected
39
  #  7: 0x0001c000 (0x4000 16kB) not protected
40
  #  8: 0x00020000 (0x4000 16kB) not protected
41
  #  9: 0x00024000 (0x4000 16kB) not protected
42
  # 10: 0x00028000 (0x4000 16kB) not protected
43
  # 11: 0x0002c000 (0x4000 16kB) not protected
44
  # 12: 0x00030000 (0x4000 16kB) not protected
45
  # 13: 0x00034000 (0x4000 16kB) not protected
46
  # 14: 0x00038000 (0x4000 16kB) not protected
47
  # 15: 0x0003c000 (0x4000 16kB) not protected
48
49
 at91sam7 driver information: Chip is AT91SAM7X256
50
 Cidr: 0x275b0942 | Arch: 0x0075 | Eproc: ARM7TDMI | Version: 0x002 | Flashsize: 0x00040000
51
 Master clock (estimated): 48054 KHz | External clock: 18432 KHz
52
 Pagesize: 256 bytes | Lockbits(16): 0 0x0000 | Pages in lock region: 0 
53
 Securitybit: 0 | Nvmbits(3): 0 0x0
54
55
dcc downloads are enabled
56
fast memory access is enabled
57
background polling: on
58
TAP: sam7x256.cpu (enabled)
59
target state: halted
60
target halted in Thumb state due to debug-request, current mode: Supervisor
61
cpsr: 0x600000b3 pc: 0x00200b02
62
flash 'at91sam7' found at 0x00100000
63
auto erase enabled
64
auto unlock enabled
65
wrote 229376 bytes from file main.BIN in 28.546875s (7.847 kb/s)
66
Info : JTAG tap: Spartan_6.cpu tap/device found: 0x44008093 (mfg: 0x049, part: 0x4008, ver: 0x4)
67
Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
68
background polling: on
69
TAP: sam7x256.cpu (enabled)
70
target state: running
71
background polling: on
72
TAP: sam7x256.cpu (enabled)
73
target state: running
74
shutdown command invoked
75
Flash Programming Finished.

Der Flash wird also gefunde nund auch beschrieben...

Resultierend aus meinem OpenOCD Configurations Script:
1
#use combined on interfaces or targets that can't set TRST/SRST separately
2
reset_config srst_only srst_pulls_trst #srst_gates_jtag srst_open_drain none separate
3
#jtag init
4
if { [info exists CHIPNAME] } {
5
   set _CHIPNAME $CHIPNAME
6
} else {
7
   set _CHIPNAME sam7x256
8
}
9
10
if { [info exists ENDIAN] } {
11
   set _ENDIAN $ENDIAN
12
} else {
13
   set _ENDIAN little
14
}
15
16
if { [info exists CPUTAPID] } {
17
   set _CPUTAPID $CPUTAPID
18
} else {
19
  
20
  #set _CPUTAPID 0x44008093
21
    set _CPUTAPID 0x3f0f0f0f
22
}
23
24
#adapter_nsrst_delay 100
25
jtag_nsrst_delay 100
26
jtag_ntrst_delay 100
27
jtag_khz 10000
28
29
#jtag init
30
31
#jtag newtap Spartan_6 cpu -irlen 6 -ircapture 0x9 -irmask 0x3f -expected-id 0x44008093
32
jtag newtap Spartan_6 cpu -irlen 6 -ircapture 0x1 -irmask 0xf -expected-id 0x44008093
33
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
34
#jtag newtap AAA cpu -irlen 32 -ircapture 0x1 -irmask 0x3 -expected-id $_CPUTAPID
35
36
37
38
set _TARGETNAME $_CHIPNAME.cpu
39
target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi
40
41
42
43
$_TARGETNAME configure -event reset-init {
44
  # disable watchdog
45
  mww 0xfffffd44 0x00008000
46
  # enable user reset
47
  mww 0xfffffd08 0xa5000001
48
  # CKGR_MOR : enable the main oscillator
49
  mww 0xfffffc20 0x00000601
50
  sleep 10
51
  # CKGR_PLLR: 96.1097 MHz
52
  mww 0xfffffc2c 0x00481c0e
53
  sleep 10
54
  # PMC_MCKR : MCK = PLL / 2 ~= 48 MHz
55
  mww 0xfffffc30 0x00000007
56
  sleep 10
57
  # MC_FMR: flash mode (FWS=1,FMCN=60)
58
  mww 0xffffff60 0x00480100
59
  sleep 100
60
}
61
62
63
# this procedure writes an image file to the processor
64
# edit the name of the file!!
65
proc program_device () {
66
  # halt the processor
67
  halt
68
  wait_halt
69
70
  # write file to flash memory
71
  arm7_9 dcc_downloads enable
72
  arm7_9 fast_memory_access enable
73
  sleep 10
74
  poll
75
  flash probe 0
76
  #flash write_image erase unlock "AT91SAM7_H256.BIN" 0x00100000
77
  
78
  flash write_image erase unlock "main.BIN" 0x00100000
79
  sleep 100
80
81
  #start execution of the program just downladed
82
  reset run
83
  sleep 10
84
  
85
  #exit OpenOCD
86
  #shutdown
87
}
88
89
90
91
$_TARGETNAME configure -work-area-phys 0x00200000 -work-area-size 0x4000 -work-area-backup 0
92
93
#flash bank <driver> <base_addr> <size> <chip_width> <bus_width> <target_number> [<target_name> <banks> <sectors_per_bank> <pages_per_sector> <page_size> <num_nvmbits> <ext_freq_khz>]
94
set _FLASHNAME $_CHIPNAME.flash
95
flash bank $_FLASHNAME at91sam7 0 0 0 0 $_TARGETNAME 0 0 0 0 0 0 0 18432
96
97
init
98
reset init
99
flash protect 0 0 15 off
100
at91sam7 gpnvm 0 2 set
101
flash info 0
102
103
sleep 1000
104
105
#soft_reset_halt
106
program_device ()
107
108
poll
109
sleep 1000
110
poll
111
shutdown

Die LowlevelInit ist diese hier:
1
#include "MainHeader.h"
2
3
4
//  ----------------------------------------------------------------------------
5
//           ATMEL Microcontroller Software Support  -  ROUSSET  -
6
//  ----------------------------------------------------------------------------
7
//   The software is delivered "AS IS" without warranty or condition of any
8
//   kind, either express, implied or statutory. This includes without
9
//   limitation any warranty or condition with respect to merchantability or
10
//   fitness for any particular purpose, or against the infringements of
11
//   intellectual property rights of others.
12
//  ----------------------------------------------------------------------------
13
//   File Name           : Cstartup_SAM7.c
14
//   Object              : Low level initializations written in C for IAR tools
15
//   1.0   08/Sep/04 JPP : Creation
16
//   1.10  10/Sep/04 JPP : Update AT91C_CKGR_PLLCOUNT filed
17
//  ----------------------------------------------------------------------------
18
19
20
// The following functions must be written in ARM mode - they are called directly by exception vector
21
extern void AT91F_Spurious_handler(void);
22
extern void AT91F_Default_IRQ_handler(void);
23
extern void AT91F_Default_FIQ_handler(void);
24
25
//*----------------------------------------------------------------------------
26
//* \fn    AT91F_LowLevelInit
27
//* \brief This function performs very low level HW initialization
28
//*        this function can be use a Stack, depending the compilation
29
//*        optimization mode
30
//*----------------------------------------------------------------------------
31
32
void LowLevelInit(void)
33
{
34
   int            i;
35
   AT91PS_PMC     pPMC = AT91C_BASE_PMC;
36
37
    // Set Flash Wait state to 1
38
  // MCLK = 48054857.14 -> 72.08 -> use: 73 cycles per 1.5 us
39
  AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(73 << 16)) | AT91C_MC_FWS_1FWS;
40
41
42
    // watchdog:
43
  //  AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;  // Disable Watchdog
44
45
  AT91C_BASE_WDTC->WDTC_WDMR= 0x11FF21FF;        // watchdog enabled (halted in debug)
46
                            // interval -> about 2s
47
48
  AT91C_BASE_WDTC->WDTC_WDCR=0xA5000001;      //reset wd
49
50
51
  // Enable the Main Oscillator:
52
  // fstart = 32.768kHz -> Start up time = 8 * 100 / fstart = 800 / 32.768e3 = 24.41 ms
53
  pPMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x64 << 8) | AT91C_CKGR_MOSCEN ));
54
55
  // Wait the startup time:
56
  while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
57
58
  // PMC Clock Generator PLL setup:
59
  // DIV = 14, (MUL+1) = 73,  PLLCOUNT = 10, OUT = 0 (not used)
60
  pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 14) |
61
                      (AT91C_CKGR_PLLCOUNT & (10<<8)) |
62
                      (AT91C_CKGR_MUL & (72<<16)));          //Actual Mult Factor = MUL + 1 !!!!!!!!
63
64
  // Wait the startup time (until PMC Status register LOCK bit is set)
65
   while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
66
67
  // PMC Master Clock (MCLK) setup
68
  // The PMC_MCKR register must not be programmed in a single write operation!!
69
  // if PLLCLK then first: PRES then CSS - wait for MCKRDY everytime!
70
  // CSS  = 3  (PLLCK), PRES = 1  (MCLK=PLLCK/2) = 48054857.14 Hz
71
72
  pPMC->PMC_MCKR =  AT91C_PMC_PRES_CLK_2;
73
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));            // Wait for MCKRDY
74
  pPMC->PMC_MCKR = AT91C_PMC_CSS_PLL_CLK | AT91C_PMC_PRES_CLK_2;
75
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));            // Wait for MCKRDY
76
77
  // Set up the default interrupt handler vectors
78
  AT91C_BASE_AIC->AIC_SVR[0] = (int) AT91F_Default_FIQ_handler;
79
  for (i=1;i <= 31; i++)
80
  {
81
      AT91C_BASE_AIC->AIC_SVR[i] = (int) AT91F_Default_IRQ_handler;
82
  }
83
  AT91C_BASE_AIC->AIC_SPU  = (int) AT91F_Spurious_handler;
84
85
86
  AT91C_BASE_AIC->AIC_ICCR = 0xFFFFFFFF;  // Clear all interrupts
87
  AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;  // Disable all interrupts
88
89
  AT91C_BASE_RSTC->RSTC_RMR = (((unsigned int) 0xA5 << 24) | AT91C_RSTC_URSTEN );    // allow user reset
90
91
  //enable clocks for pioa and piob
92
  pPMC->PMC_PCER = (1<<AT91C_ID_PIOA);
93
  pPMC->PMC_PCER = (1<<AT91C_ID_PIOB);
94
95
}


Ich weiss das es viel Code zum durchsehen ist. Waere wirklich nett wenn 
jemand sich das mal antut :) Vielleicht uebersehe ich in meiner 
Betriebsblindheit ja eine Kleinigkeit. Aber ist es trotz aller 
Konfiguration nicht sehr merkwuerdig das wirklich alle IOs auf High 
gehen?

von Stromverdichter (Gast)


Lesenswert?

Also ich komme mit den Startup-Skripten nie zurecht, ich kann die 
einfach nicht richtig lesen. Daher nur so ein Schuss ins Blaue.
Nach dem Reset sind alle IOs als Input mit aktiviertem Pullup 
beschaltet. Hast du dich nur wegen der Pullups vermessen?
Die Programme, die du geladen hast, setzen die auch die 
Input/Output-Register? Ich sehe im Startup nichts, was die IOs als 
Ausgang/Low initialisiert. Das könnte man doch mal testen? Oder einfach 
die Pullups ausschalten.
Hoffentlich erzähle ich keinen Mist, das ist wirklich noch nicht mein 
Fachgebiet;-)

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Das ist definitiv kein Mist. Das die Pullups nach dem Reset aktiv sind 
war mir nicht bewusst. Ich werde es heute im Laufe des Tages auf jeden 
fall ausprobieren und die Ergebnisse hier schreiben. Besten Dank!

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Leider hat der Tip mit dem Deaktivieren der internen Pull Up 
Widerstaende nicht geklappt. Hier die derzeitige Main Funktion bzw. 
Datei.
1
#include "MainHeader.h"        // Board hardware definitions
2
3
4
//------------------------------------------------
5
// global arm vars:
6
7
volatile AT91PS_PMC    pPMC   = AT91C_BASE_PMC;  
8
volatile AT91PS_USART   pUS0   = AT91C_BASE_US0;  
9
volatile AT91PS_PIO    pPIOA   = AT91C_BASE_PIOA;  
10
volatile AT91PS_PIO    pPIOB   = AT91C_BASE_PIOB;
11
volatile AT91PS_AIC    pAIC   = AT91C_BASE_AIC;
12
volatile AT91PS_TCB   pTCB   = AT91C_BASE_TCB;
13
volatile AT91PS_TC     pTC0  = AT91C_BASE_TC0;
14
volatile AT91PS_TC     pTC1   = AT91C_BASE_TC1;
15
volatile AT91PS_TC     pTC2   = AT91C_BASE_TC2;
16
volatile AT91PS_RSTC    pRSTC   = AT91C_BASE_RSTC;
17
volatile AT91PS_MC    pMC   = AT91C_BASE_MC;  
18
19
20
21
//--------------------------------------------------------------------------------
22
23
24
int main (void)
25
{
26
27
28
  LowLevelInit();
29
30
31
  pTCB->TCB_BCR = 0;    // no SYNC trigger
32
  pTCB->TCB_BMR = 0x15;    // no external clocks
33
34
  while(1) 
35
  {
36
    
37
    AT91C_BASE_WDTC->WDTC_WDCR=0xA5000001;              // reset watchdog
38
39
40
41
42
    // no pullups:
43
    pPIOA->PIO_PPUDR  = 0xffff;
44
    pPIOB->PIO_PPUDR  = 0xffff;
45
46
    // pins are input
47
    pPIOA->PIO_ODR=0xffff;
48
    pPIOB->PIO_ODR=0xffff;
49
50
    pPIOA->PIO_PER=0xffff;
51
    pPIOB->PIO_PER=0xffff;
52
53
  }
54
55
}
56
57
// end main

Somit sollten doch zumindest die Pullups auf allen Pins deaktiviert 
werden und die Pins als EIngaenge definieren...

von Achim (Gast)


Lesenswert?

> Leider hat der Tip mit dem Deaktivieren der internen Pull Up
> Widerstaende nicht geklappt.

PIO-Clock aktivierten.

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Abend :)

Steht "leider" schon als letzte Zeilen in der LowLevelInit Funktion 
welche durch die Main aufgerufen wird
1
  //enable clocks for pioa and piob
2
  pPMC->PMC_PCER = (1<<AT91C_ID_PIOA);
3
  pPMC->PMC_PCER = (1<<AT91C_ID_PIOB);

von Achim (Gast)


Lesenswert?

Sieht bei mir so aus (PIOA):

 *AT91C_PMC_PCER = (1 << AT91C_ID_PIOA);

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Probier ich sofort aus :) Danke!

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Leider immer noch das gleiche Ergebnis.. Alle Pins sind auf 3,3V.

von Stromverdichter (Gast)


Lesenswert?

Wie Achim schon erwähnte den Clock aktivieren.
Zusätzlich würde ich mir in der Main einen Ausgang toggeln lassen. Da 
hängst du dann eine LED dran. Somit siehst du immer, ob dein Prozessor 
noch läuft. Ich habe auch immer gerne eine serielle Debug-Schnittstelle. 
Da gebe ich mir die Debug-Meldungen der einzelnen Tasks aus. Ich würde 
an deiner Stelle versuchen erst einmal ein fertiges kleines Programm zu 
laden. Funktionieren die Sourcen von Atmel für OpenOCD? Dann hättest du 
die Sicherheit, dass deine Startup.s nicht die Ursache ist.

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Ich kann leider keine LED dran haengen da es ein eigenes Layout und kein 
Entwicklungsboard ist. Ich messe an Testpads mit dem Oszilloskop die 
Signalpegel. Die Main Funktion sieht nun so aus. PA25 sollte jetzt sehr 
schnell toggeln.
1
  pPMC->PMC_PCER = (1<<AT91C_ID_PIOA);  //IO CLOCK PA
2
  pPMC->PMC_PCER = (1<<AT91C_ID_PIOB);  //IO CLOCK PB
3
4
  AT91C_BASE_PIOA->PIO_PER = AT91C_PIO_PA25; //ENABLE PA25
5
  AT91C_BASE_PIOA->PIO_OER = AT91C_PIO_PA25; // PA25 as 'peripheral manager' controlled pin
6
  AT91C_BASE_PIOA->PIO_PPUDR = AT91C_PIO_PA25; //Disable PA25 Pull Up resistors
7
8
9
  while(1) 
10
  {
11
    AT91C_BASE_WDTC->WDTC_WDCR=0xA5000001;              // reset watchdog
12
    AT91C_BASE_PIOA->PIO_SODR =  AT91C_PIO_PA25;           // Set pin state to 'high
13
    AT91C_BASE_PIOA->PIO_CODR =  AT91C_PIO_PA25;           // Set pin state to 'low
14
15
16
17
18
  }

Leider tut sich nach wie vor garnichts. ALle Pins haben 3,3V. Ich bin 
immer noch recht neu auf dem Gebiet AT91SAM7 und ARM Controller 
ueberhaupt. Welche Sourcen von Atmel für OpenOCD meinst du 
Stromverdichter?

: Bearbeitet durch User
von Stromverdichter (Gast)


Lesenswert?

http://www.atmel.com/tools/AT91SAMSOFTWAREPACKAGE.aspx
Ich meine die Beispiel-Programme aus dem Atmel-Paket. Da ist auch ein 
einfaches Blinke-Programm dabei. Damit kann man anfangen und hat mal ein 
Fuß in der Türe.

von Sergej U. (Firma: HTW) (z0idberg1)


Angehängte Dateien:

Lesenswert?

Vielen Dank fuer den Link. Ich werde es jetet ausprobieren. Worum es mir 
derzeit aber hauptsaechlich geht ist ein Hardware Problem 
Auszuschliessen (Siehe Schaltplan am Anfang im Eroeffnungsbeitrag), also 
ob das Layout oder der Controller selbst vielleicht fehlerhaft sind. 
Koennte es sein das der Takt nicht funktioniert? Ich habe gerade den XIN 
Eingang vermessen und das Oszillogramm angehangen. Die Einstellung ist 
0,05µS/Div Timebase und 100 mV/Div Amplitude. Sollte so ein Taktsignal 
aussehen? Am PLLRC Pin ist nichts zu sehen... CH2 (das 0 Signal) zeigt 
den Nullpunkt an.

von Achim (Gast)


Lesenswert?

Das Oszillogramm sieht gut aus: knapp 19 MHz, 180 mV.

Tipp: Keil Entwicklungsumgebung runter laden, damit kann du 
Mini-Programm (Blinky.c) laden und mit deinem Debugger Schritt für 
Schritt durch das Programm gehen, und sehen was geht und was nicht geht.

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Grossartig, danke! Ich werd es gleich mal runterladen. Noch eine Frage. 
Ich benutze den Olimex USB Tiny H Debugger, wird der von Keil 
unterstuetzt?

von Stromverdichter (Gast)


Lesenswert?

Dein Debugger wird imho nicht von Keil unterstützt. Was funktionieren 
sollte ist der Blinky-Code für IAR. Damit sollte auch dein Debugger 
funktionieren.
http://www.iar.com/Service-Center/Downloads/
Viel Glück.
Vielleicht kannst ja noch ein ICE für Keil auftreiben. Baremetal mit 
Arm7 und Arm9 ist halt schon etwas heftig. Da gibt es nicht viel im 
Netz, und was man so findet ist auch nicht immer alles korrekt. Ein 
Kollege kämpft gerade mit dem arm9G25 in Baremetal. Der hat vielleicht 
geflucht;-)

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Da hast du allerdings recht, ist wirklich nicht ohne... Das lustige ist, 
dass der Spartan6 im CSG384 Package (BGA) auf dem Board hervorragend auf 
anhieb funktioniert und der µC nach fast einer Woche immer noch nicht. 
Soll heissen ich bin auch seit einer ganzen Weile am Fluchen :D Ist halt 
sehr schwierig festzustellen ob es ein Firmware oder Hardwareproblem 
ist... Wobei ich als Entwickler im Hinterkopf irgendwie immer von 
letzterem ausgehe, zumal eine Firmware, welche exakt auf dem gleichen 
Controller und mit der selben Toolchain mal lief auf dieser Hardware 
keinen Muks macht :(

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Und es geht immer weiter :) Habe jetzt IAR Workbench als Freeware Lizenz 
installiert und das Getting Startet Project von hier 
http://www.atmel.com/tools/AT91SAMSOFTWAREPACKAGE.aspx fuer den 
AT91SAM7X256 geflasht. Leider mit dem selben Ergebnis, alle Pins sind 
auf high und nichts passiert... Laut Debugger laeuft das Programm sauber 
durch, aber die IO Pins machen rein garnichts.

: Bearbeitet durch User
von Stromverdichter (Gast)


Lesenswert?

Hallo Sergej,
das ist ja richtig schade, dass dein Board immer-noch nicht laufen will. 
Verstehe ich das richtig, dass laut Debugger das Ausgangsregister mit 
dem blinky.c-Code toggelt, du real aber nichts messen kannst? Die 
Wahrscheinlichkeit eines Hardware-Defektes steigt rasant :-(
Ich denke für dich wäre so ein Referenz-Board wie das von Olimex ganz 
hilfreich.
https://www.olimex.com/Products/ARM/Atmel/SAM7-EX256/
Vielleicht kannst du deinen Arbeitgeber überreden, euch ein solches 
anzuschaffen. Die 60 Euro sind ganz gut investiert. Wenns nix kosten 
soll, gibts hier das Board für 20Euro, frag mich aber nicht wieso
http://www.dontronics-shop.com/sam7-ex-256-development-board-for-or-at91sam7x256-arm7tdmi-s-microcontroller.html

Viel Glück,
garp

von Achim (Gast)


Lesenswert?

Kenne die IAR Workbench nicht.

Kannst du Schritt für Schrit durch das Programm gehen?
Kannst du die Registerinhalte der PIOA lesen und beschreiben?

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Hi Alle zusammen. Es gibt gute Neuigkeiten. Das Toggeln der LEDs lauft 
jetzt. Das ganze funktioniert ueber OpenOCD als GDB Server in 
Kombination mit dem Olimex USB Tiny H Dongle. Habe jetzt die Config 
Files angepasst und bekomme mit IAR Workbench tatsaechlich 
Rechtecksignale auf den Schirm :). So ganz trau ich der Sache noch 
nicht, aber es ist auf jeden Fall ein riesen Fortschritt. Fuer den Fall, 
dass jemand Anders mal so ein Problem mit den Tools haben sollte, haenge 
ich hier noch die OpenOCD Target CFG fuer den AT91SAM7 an, die bei mir 
funktioniert hatte. Ich danke euch allen sehr fuer eure Hilfe, 
hoffentlich laeuft die Sache jetzt rund!
1
#use combined on interfaces or targets that can't set TRST/SRST separately
2
reset_config srst_only srst_pulls_trst #srst_gates_jtag srst_open_drain none separate
3
#jtag init
4
if { [info exists CHIPNAME] } {
5
   set _CHIPNAME $CHIPNAME
6
} else {
7
   set _CHIPNAME sam7x256
8
}
9
10
if { [info exists ENDIAN] } {
11
   set _ENDIAN $ENDIAN
12
} else {
13
   set _ENDIAN little
14
}
15
16
if { [info exists CPUTAPID] } {
17
   set _CPUTAPID $CPUTAPID
18
} else {
19
  
20
  #set _CPUTAPID 0x44008093
21
    set _CPUTAPID 0x3f0f0f0f
22
}
23
24
#adapter_nsrst_delay 100
25
jtag_nsrst_delay 100
26
jtag_ntrst_delay 100
27
jtag_khz 1000
28
29
#jtag init
30
31
#jtag newtap Spartan_6 cpu -irlen 6 -ircapture 0x9 -irmask 0x3f -expected-id 0x44008093
32
jtag newtap Spartan_6 cpu -irlen 6 -ircapture 0x1 -irmask 0xf -expected-id 0x44008093
33
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
34
#jtag newtap AAA cpu -irlen 32 -ircapture 0x1 -irmask 0x3 -expected-id $_CPUTAPID
35
36
37
set _TARGETNAME $_CHIPNAME.cpu
38
39
target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi
40
$_TARGETNAME configure -event reset-init {
41
        soft_reset_halt
42
        # RSTC_CR : Reset peripherals
43
        mww 0xfffffd00 0xa5000004
44
        # disable watchdog
45
  mww 0xfffffd44 0x00008000
46
  # enable user reset
47
  mww 0xfffffd08 0xa5000001
48
  # CKGR_MOR : enable the main oscillator
49
  mww 0xfffffc20 0x00000601
50
  sleep 10
51
  # CKGR_PLLR: 96.1097 MHz
52
  mww 0xfffffc2c 0x00481c0e
53
  sleep 10
54
  # PMC_MCKR : MCK = PLL / 2 ~= 48 MHz
55
  mww 0xfffffc30 0x00000007
56
  sleep 10
57
  # MC_FMR: flash mode (FWS=1,FMCN=73)
58
  mww 0xffffff60 0x00490100
59
  sleep 100
60
}
61
62
$_TARGETNAME configure -work-area-phys 0x00200000 -work-area-size 0x4000 -work-area-backup 0
63
64
#flash bank <driver> <base_addr> <size> <chip_width> <bus_width> <target_number> [<target_name> <banks> <sectors_per_bank> <pages_per_sector> <page_size> <num_nvmbits> <ext_freq_khz>]
65
set _FLASHNAME $_CHIPNAME.flash
66
flash bank $_FLASHNAME at91sam7 0 0 0 0 0 0 0 0 0 0 0 0 18432
67
68
# For more information about the configuration files, take a look at:
69
# openocd.texi

von Stromverdichter (Gast)


Lesenswert?

Glückwunsch :-)
Freut mich, dass es endlich geklappt hat. Jetzt muss du nur noch 
herausfinden, warum es mit der anderen Toolchain nicht laufen will.

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Und es wird immer besser :) Nachdem ich das Board einmal mit der IAR 
Umgebung beschrieben hatte, habe ich jetzt wieder die andere 
Entwicklungsumgebung getestet ohne was daran zu aendern und siehe da, es 
funktioniert auf einmal. Sehr mysterioes.... wirklich sehr, aber es 
funktioniert nun wie es soll :) Frage mich nur was das gewesen sein 
koennte, fuer das naechste mal.

von Stromverdichter (Gast)


Lesenswert?

Manchmal wollen die Kisten einfach, dass sich jemand um sie kümmert. Hat 
man genug Herzschmerz hineingesteckt, laufen sie wieder ein paar 
Wochen;-)

von Sergej U. (Firma: HTW) (z0idberg1)


Lesenswert?

Hey Leute ich melde mich mal wieder mit interessanten Neuigkeiten. Ich 
denke das Problem gefunden zu haben warum das System nicht funktioniert 
hatte. Der AT91SAM7 hat nvmbits, das zweite entscheidet ueber die boot 
selection und muss gesetzt werden, wenn SAM-BA nicht benutzt wird. Ich 
dachte auch dies getan zu haben da es ja in der OpenOCD Config 
eingetragen ist. Jetzt habe ich die Programmiermeldungen ausgewertet. 
Als es noch nicht funktioniert hatte stand da:

 Pagesize: 256 bytes | Lockbits(16): 0 0x0000 | Pages in lock region: 0
 Securitybit: 0 | Nvmbits(3): 0 0x0

Anscheinend hat das setzten des Bits also nicht geklappt. IAR Workbench 
hat es wohl richtig gemacht. Jetzt wo es funktioniert, sieht die Meldung 
wie folgt aus:

 Pagesize: 256 bytes | Lockbits(16): 0 0x0000 | Pages in lock region: 0
 Securitybit: 0 | Nvmbits(3): 0 0x4

Die 0x4 ist entscheidend, jetzt ist das Bit offensichtlich gesetzt 
worden.
Ich danke euch Allen nochmals fuer die grossartige Hilfe. Vielleicht 
hilft dieser Thread mal jemandem weiter.

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.