ARM Evaluator-7T

Ese post irá fazer um breve descrição da board Evaluator-7T da ARM. Apresentando uma toolchain (GNU) para construção/depuração dos programas. É uma abordagem bem introdutória, com alguns conceitos que aprendi nos últimos dias. Ainda espero escrever mais alguns posts com mais informações.

ARM Samsung S3C4510X01

Processador da Evaluator-7T

.

Introdução

.

Estou fazendo alguns testes na plataforma Evaluator-7T [1] baseado no core ARM (ARM7TDMI) [2]. Minha primeira tentativa foi buscar referências para instalar o Linux nela [3]. Contudo a ausência de uma Unidade de Gerenciamento de Memória (MMU) faz com que seja necessário buscar um kernel adaptado (ucLinux) [4]. Não encontrei muita coisa que permitisse e vejo que um dos fatores mais cruciais é a limitação de memória (512KB) de flash. Nas listas de discussões há uma thread [5] a respeito da instalação do ucLinux em um roteador [6]. O layout da placa mostra não permite uma interação muito grande com o usuário, temos apenas um display de 7-segmentos e 4 LEDs além de um push-button que gera uma interrupção. Embora seja possível agregar mais periféricos ainda não fiz nenhum teste, a intenção é colocar um display LCD e alguns sensores.

.

Layout da Evaluator-7T

.

Os componentes são:.

  • Samsung KS32C50100 microcontroller
  • 512KB flash EPROM
  • 512KB SRAM
  • two 9-pin D-type RS232 connectors
  • reset and interrupt push buttons
  • four user-programmable LEDs and a seven-segment LED display
  • 4-way user input DIP switch
  • Multi-ICE connector
  • 10MHz clock (the processor uses this to generate a 50MHz clock)
  • 3.3V voltage regulator

.

Comunicação

.

Existem duas formas de comunicação com a placa. A primeira pelo cabo serial (RS-232) e a outra através de uma interface Multi-ICE (JTAG) que também não tive tempo de aprender para publicar algo.

Comunicação com o computador

Comunicação com o computador

.

.

Um exemplo

.

Não conesguir “bootar” Linux (kernel) não significa que não possamos executar programas. Para os exemplos desse post estou utilizando o cross compiler fornecido pela GNU ARM [7]. A versão 3.4.3 do gcc e do gdb. Nesse exemplo, o depurador será muito importante, pois além de servir para analisar o fluxo de execução do programa este será utilizado para carregar o programa na placa. Para você verificar se seu depurador suporta tal recurso, entre no depurador e digite “help target”, uma lista será apresentada, sendo importante aparecer a target rdi, pois é através dela que efetuamos a comunicação:

.

(gdb) help target

Connect to a target machine or process.

The first argument is the type or protocol of the target machine.

Remaining arguments are interpreted by the target protocol. For more

information on the arguments for a particular protocol, type

`help target ‘ followed by the protocol name.

.

List of target subcommands:

.

target async — Use a remote computer via a serial line

target exec — Use an executable file as a target

target extended-async — Use a remote computer via a serial line

target extended-remote — Use a remote computer via a serial line

target rdi — Use a remote ARM-based computer; via the RDI library

target rdp — Use a remote ARM system which uses the ARM Remote Debugging Protocol

target remote — Use a remote computer via a serial line

target sim — Use the compiled-in simulator

.

(gdb) help target rdi

Use a remote ARM-based computer; via the RDI library.

Specify the serial device it is connected to (e.g. /dev/ttya).

.

Se verificarmos no BSL (Boot Strap Loader) da Evaluator-7T, temos:

.

ARM Evaluator7T Boot Strap Loader Release 1.01

Press ENTER within 2 seconds to stop autoboot

Type ‘Help’ for help, Type ‘Boot’ to load modules.

Boot: boot

Scanning ROM for modules …

Found module ‘BootStrapLoader’ at 01805390

Found module ‘ProductionTest’ at 01807288

Found module ‘Angel’ at 0181a5d8

.

Portanto quando você inicializa a placa ela “permanece” no último módulo definido, no caso o módulo Angel que utiliza a biblioteca rdi. Você pode testar qualquer programa, mas é interessante fazer alguma coisa que mexa com periféricos. O código abaixo coloca o número 6 no display de 7-segmentos:

.

#include <stdlib.h>
#include <stdio.h>

#include "segment.h"

// Mapemanto do microcontrolador

#define SYSCFG	     0x03ff0000
#define IOPMOD          ((volatile unsigned *)(SYSCFG+0x5000))
#define IOPDATA         ((volatile unsigned *)(SYSCFG+0x5008))

static unsigned int numeric_display [16] =
{
	DISP_0,	DISP_1,	DISP_2,	DISP_3,	DISP_4,	DISP_5,	DISP_6,	DISP_7,	DISP_8,	DISP_9,
    DISP_A,	DISP_B,	DISP_C,	DISP_D,	DISP_E,	DISP_F
};	

int main(void) {

	// inicalização
	*IOPMOD 	|= SEG_MASK;
	*IOPDATA 	|= SEG_MASK;

	unsigned numero = 0x6;

	if ( numero >= 0 & numero <= 0xf )  {
		*IOPDATA 	&= ~SEG_MASK;
		*IOPDATA 	|= (unsigned) numeric_display[numero];
 	}

    return 0;
}

.

Compilando:

# arm-elf-gcc -g segment.c -o segment

.

Agora vamos inicalizar o depurador para carregar o programa:

# arm-elf-gdb segment

.

GNU gdb 6.1

Copyright 2004 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type “show copying” to see the conditions.

There is absolutely no warranty for GDB. Type “show warranty” for details.

This GDB was configured as “–host=i686-pc-linux-gnu –target=arm-elf”…

(gdb) set remotebaud 57600

(gdb) target rdi /dev/ttyS0

Angel Debug Monitor V1.31 (ARM, INC. Evaluator Release v1.01)

Built for ARM7TDMI Serial, IRQ

Built Sep 26 2000

Serial Rate: 57600

RDI_info: internal error, unimplemented message

Connected to ARM RDI target.

(gdb) load

Loading section .init, size 0x1c lma 0x8000

Loading section .text, size 0x2184 lma 0x801c

Loading section .fini, size 0x18 lma 0xa1a0

Loading section .rodata, size 0x8 lma 0xa1b8

Loading section .data, size 0x8e8 lma 0xa2c0

Loading section .eh_frame, size 0x4 lma 0xaba8

Loading section .ctors, size 0x8 lma 0xabac

Loading section .dtors, size 0x8 lma 0xabb4

Loading section .jcr, size 0x4 lma 0xabbc

Start address 0x8110, load size 10944

Transfer rate: 43776 bits/sec, 377 bytes/write.

(gdb) continue

.

Após o load você pode executar/depurar seu programa normalmente, inserir breakpoints, ver informações do registro. Apenas atenção para um detalhe: após o load, para executar o programa é utilizado o comando ‘continue’ ao invés a instrução ‘run’ (como alguns possam pensar). Esta deve ser utilizada apenas se estiver no simulador e não na placa real.

.

Outras abordagens..

  • Esta placa é suportada [8] pelo sistema operacional eCos [9] atualmente desenvolvido pela Red Hat. O eCos não está relacionado com o Linux
  • A Evalutator também é suportada pelo redboot [10], um gerenciador de boot para sistemas embarcados.

.

Conclusões.

  1. A Evaluator-7T é uma placa antiga mas acredito que com ela é possível aprender algums conceitos de sistemas embarcos.
  2. A programação em C facilita a vida.
  3. Cógidos em Assembly podem ser inseridos através da diretiva __asm__ (“”).

Se alguém tiver sugestões, idéias, criticas, etc; fiquem a vontade em deixá-las nos comentários. Espero fazer um texto mais completo acerca dessa placa, com mais exemplos, mas enquanto não sento para escrever vou colocando aqui no blog😉 .

.

Referências:

.

[1] http://infocenter.arm.com/help/topic/com.arm.doc.dui0134a/DUI0134A_evaluator7t_ug.pdf

[2] http://www.arm.com/products/CPUs/ARM7TDMI.html

[3] http://osdir.com/ml/linux.ports.arm.general/2002-04/msg00037.html

[4] http://www.uclinux.org/

[5] http://mailman.uclinux.org/pipermail/uclinux-dev/2004-November/029266.html

[6] http://pages.sbcglobal.net/greghol/routers/compusa_router.html

[7] http://www.gnuarm.com/gcc-3.4.3.tar.bz2

[8] http://ecos.sourceware.org/boards/e7t.html

[9] http://ecos.sourceware.org/about.html

[10] http://sourceware.org/redboot/

4 Respostas

  1. […] News » News News ARM Evaluator-7T2008-07-24 19:27:12byAlgums user-programmable LEDs de sistemas embarcos. A 3.4.3 do registro. Apenas […]

  2. Olá,

    Gostaria de saber como foi feita a comunicação entre a placa e o PC.

    Estou tendo problemas ao usar um cabo conversor de portal serial para porta USB.

    • Oi Rafael,

      No caso desse post eu usei um cabo serial normal, mas não haveria problema nenhum em usar esses cabos conversores. Qual o problema que você está tendo? Lembre-se que você precisa habilitar o suporte no software, se você estiver no GNU/Linux provavelmente você ira precisar carregar o módulo ftdi_sio.ko ou pl2303.ko dependendo do chip que está no seu cabo.

  3. Oi Tiago,

    Eu instalei o GNUARM compilado para Cygwin, versão do GCC 3.4.3, e estou conseguindo conectar e depurar na placa Evaluator-7T usando o GDB. Acontece que não estou conseguindo usar o arm-elf-insight.
    Vc tem alguma dica para isso?

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: