sistemas embebidos, Core dedicado I2C

11
Juan Carlos Moctezuma Eugenio Ciencias Computacionales – INAOE Design Labs based on: Lab 4: Interfaz con el sensor compass CMPS03 (uso del core IIC) Targeting: EDK-Microblaze 13.2 & Spartan-3A Board

description

Se hara uso del protocilo I2C para realizar la comunicacion con un sensor, y asi poder mandar y recibir datos de este, haciendo uso de un core dedicado, este se puede aplicar al uso de memorias I2C, la practica se implantara en una FPGA Xilinx, una spartan 3A

Transcript of sistemas embebidos, Core dedicado I2C

Page 1: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio Ciencias Computacionales – INAOE

Design Labs based on:

Lab 4: Interfaz con el sensor compass

CMPS03 (uso del core IIC)

Targeting: EDK-Microblaze 13.2 & Spartan-3A Board

Page 2: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 Sistemas Empotrados en EDK 4-1 usando IIC IPN – 2012

Lab 4: Interfaz sensor CMPS03 usando el core IIC

Introducción

Este laboratorio guia al asistente a través de las herramientas EDK, XPS y BSB para realizar un

sistema empotrado para FPGAs

Objetivos

Después de completer este laboratorio, el asistente sera capaz de:

• Realizar un diseño base con la herramienta BSB

• Configurar la parte hardware y software del sistema empotrado

• Agregar un nuevo core tipo IIC al sistema

• Aprender a usar los drivers para crear una nueva aplicación software

Descripción del diseño

Realizar un sistema base en BSB, después agregar un periféricos IIC para controlar un sensor

compass CMPS03. Por otro lado se creará una aplicación software en donde se obtenga información

del sensor. El compass o brújula CMPS03 se utiliza para determinar la dirección relativa a los polos

magnéticos de la tierra, este sensor cuenta con una dirección de fábrica 0xC0 y 16 registros para su

funcionamiento. El CMPS03 devuelve el resultado en un rango de [0 3599] o bien de [0 255], ambos

rangos representan 0˚ a 360˚.

Figura A. Diagrama conceptual para el sistema base y modificaciones a realizar

BRAM

LMB

BRAM

Cnttlr

LMB

BRAM

Cnttlr

Microblaze

UART

GPIO Buttons

Stdin/Stdout

IIC Compass CMPS03

lab4.codec

manejo de

drivers

IIC

Page 3: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 usando IIC

Procedimiento

En esta sección el alumno encontrará todos los pasos necesarios para realizar el laboratorio. El procedimiento

incluye los siguientes pasos principales

1. Crear un sistema base usando BSB

2. Agregar un nuevo core

3. Realizar la aplicación software

4. Implementar el sistema en una tarjeta FPGA

Cada paso principal del procedimiento es

instrucciones específicas para alcanzar el objetivo final

Cuando se pida alguna información al asistente o que re

ícono

Paso 1. Crear un diseño base usando BSB

Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realizar un sistema

base usando BSB.

� Abrir la herramienta XPS seleccionando

Suite 13.1 →→→→ EDK →→→→ Xilinx Platform Studio

� A continuación aparece una ventana indicando la forma de iniciar un nuevo proyecto. Seleccionar

Base System Builder wizard

���� New Project …

� En la siguiente ventana, dar el nombre

Lab4 y que se encuentre en el directorio de trabajo

La ruta seleccionada NO debe tener espacios. Activar la casilla

que se usará para estos laboratorios, Click <OK>

Figura 1-1. Crear un nuevo proyecto

?

Juan Carlos Moctezuma Eugenio

Sistemas Empotrados en EDK IPN – 2012

encontrará todos los pasos necesarios para realizar el laboratorio. El procedimiento

guientes pasos principales:

Crear un sistema base usando BSB

Agregar un nuevo core

Realizar la aplicación software

Implementar el sistema en una tarjeta FPGA

Cada paso principal del procedimiento es indicado por el ícono . Cada paso a su vez

instrucciones específicas para alcanzar el objetivo final.

Cuando se pida alguna información al asistente o que responda ciertas preguntas aparecerá el

diseño base usando BSB

Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realizar un sistema

Abrir la herramienta XPS seleccionando Menu Inicio →→→→ Programas →→→→ Xilinx ISE Design

Xilinx Platform Studio

nuación aparece una ventana indicando la forma de iniciar un nuevo proyecto. Seleccionar

Base System Builder wizard. Click <OK>. En caso de que no aparezca esta ventana ir al menú

En la siguiente ventana, dar el nombre system.xmp al proyecto. Crear una nueva carpeta llamada

y que se encuentre en el directorio de trabajo Lab_user,tal y como se muestra en la

La ruta seleccionada NO debe tener espacios. Activar la casilla PLB System, el cual es el tipo de bus

que se usará para estos laboratorios, Click <OK>

Crear un nuevo proyecto

4-2

encontrará todos los pasos necesarios para realizar el laboratorio. El procedimiento

indicado por el ícono . Cada paso a su vez tiene

ciertas preguntas aparecerá el

Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realizar un sistema

Xilinx ISE Design

nuación aparece una ventana indicando la forma de iniciar un nuevo proyecto. Seleccionar

. Click <OK>. En caso de que no aparezca esta ventana ir al menú File

oyecto. Crear una nueva carpeta llamada

,tal y como se muestra en la figura 1-1.

el cual es el tipo de bus

Page 4: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 Sistemas Empotrados en EDK 4-3 usando IIC IPN – 2012

� Posteriormente seleccionar I would create a new design, click <NEXT>. Después seleccionar la

tarjeta Spartan 3A Starter Kit como se muestra en la figura 1-2, click <NEXT>

Figura 1-2. Seleccionar el tipo de tarjeta FPGA que será usada

� En estos momentos comienza la configuración de la plataforma hardware del sistema. Seguir el

siguiente procedimiento:

• Seleccionar Single Processor System, click <NEXT>

• Reference clock frequency: 50 MHz

• Processor : Microblaze

• System clock frequency: 50 MHz

• Local Memory: 16 KB

• Debug Interface: On Chip HW Debug Module, click <NEXT>

El siguiente paso es seleccionar los components hardware del sistema (cores/periféricos), seleccionar

los periféricos de tal forma que en la columna Processor 1 (Microblaze) Peripherals queden

únicamente los siguientes elementos: (Apoyarse de los botones ADD y REMOVE)

• BTNs_4bit: Seleccionar (dejar valores por default)

• RS232_DCE: Seleccionar (dejar valores por default)

• dlmb_ctrl: Seleccionar (dejar valores por default)

• ilmb_ctrl: Seleccionar (dejar valores por default), click <NEXT>

� Finalmente se abre la ventana donde se configura la memoria cache. En este caso NO se utiliza

memoria cache, así que permanecen deseleccionadas las dos opciones. Click <NEXT>, click

<FINISH>

El sistema base ha sido construido usando el BSB, al final en el XPS se deberá visualizar un sistema

como el de la figura 1-3.

Figura 1-3. Sistema empotrado FPGA creado con BSB

Page 5: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 Sistemas Empotrados en EDK 4-4 usando IIC IPN – 2012

Paso 2. Agregar un nuevo core al sistema base

El paso siguiente es agregar un core de Xilinx al sistema base. Xilinx ofrece una

gran variedad de cores que se encuentran disponibles para el usuario.

� En la pestaña IP Catalog, buscar la categoría Communication Low-Speed y dar doble click en

el core XPS IIC Interface, click <YES>, con esto abre una ventana para configurar el core,

dejamos las opciones por defecto, click <OK>. Este nuevo core será el encargado de realizar la

transferencia de la imagen y al mismo tiempo será la entrada/salida estándar para el sistema.

Figura 2-1. Agregar un core XPS UART

� En el System Assembly View, en la pestaña Bus Interface, buscar el core xps_iic_0, cambiar el

nombre a CMPS03. Para cambiar el nombre de los cores, primero seleccione el core, después dar un

click extra sobre el mismo core y aparecerá activado el cursor para cambiar el nombre.

Posteriormente conectar el nuevo core IIC al bus PLB. Al final el sistema debe quedar como en la

figura 2-2.

Figura 2-2. Dar nombre a los nuevos cores y conectarlos al bus PLB

Page 6: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 Sistemas Empotrados en EDK 4-5 usando IIC IPN – 2012

� Dar doble click sobre el core CMPS03 y colocar las siguientes configuraciones

• PLB Bus clock frequency: 50,000,000

• Output frequency : 100,000

• Use 10-bit address: 7-bit addresses

• Width of GPIO: 1

� Cambiarse a la pestaña Ports, desglozar el core CMPS03 ���� (IO_IF) y seleccionar en el campo

Scl���� Make external. De igual manera el puerto Sda���� Make External. Con estas modificaciones

estamos creando puertos externos para el reloj y el puerto de datos del bus IIC. Note que en la opción

External Ports se han agregado estos dos puertos externos (figura 2-4).

Figura 2-4. Agregando puertos externos para los nuevos cores

� Ir ahora a la pestaña Addresss y dar click en el botón Generate Addresses para generar

automáticamente el espacio de memoria para los nuevos periféricos. Por default asigna 64K a cada

periférico

� El paso siguiente es realizar la asignación de pines a los nuevos periféricos en el archivo UCF. En

la pestaña Project dar doble click al archivo system.ucf. Capturar las restricciones para el nuevo core

(figura 2-5). Corroborar esta asignación de pines en el archivo IPNEDK/Datasheet/Spartan3A.pdf

Net CMPS03_Scl LOC=V16 | IOSTANDARD = LVCMOS33 | PULLUP;

Net CMPS03_Sda LOC=W16 | IOSTANDARD = LVCMOS33 | PULLUP;

Figura 2-5. Asignación de pines para los nuevos cores

� Hasta este momento finaliza la configuración del hardware del sistema. El paso final es generar el

archivo bitstream. Seleccionar la opción Menú Hardware ���� Generate Bitstream (este proceso

tarda de 15 min aproximadamente).

Page 7: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 Sistemas Empotrados en EDK 4-6 usando IIC IPN – 2012

Paso 3. Realizar la aplicación software

El siguiente paso es desarrollar la parte software del sistema. En esta parte se utiliza

la herramienta SDK (Software Development Kit) y básicamente se realizan 3

proyectos: la plataforma de información hardware, el BSP (board support package) y

la aplicación de usuario.

� Exportar la información de la plataforma hardware hacia SDK. Click en el botón <EXPORT

HARDWARE DESIGN TO EDK>. Después se visualiza una ventana donde se selecciona “Export &

Launch SDK” (figura 3-1)

Figura 3-1. Exportar la información hardware hacia SDK.

� En el cuadro de diálogo que se muestra a continuación seleccionar la ruta Lab_user\Lab4\SDK

como el directorio workspace (figura 3-2), click <OK>

Figura 3-2. Seleccionar el directorio Workspace

� Una vez que el entorno SDK es abierto, se crea automáticamente un proyecto llamado

hw_platform_0 (parte izquierda en Project Explorer), este proyecto contiene la información hardware

necesaria y se conforma por 3 tipos de archivos: BMM, BIT y XML.

Opcionalmente este proyecto hardware puede ser creado de forma manual desde el menú File ���� New

���� Xilinx Hardware Platform Specification

Page 8: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 Sistemas Empotrados en EDK 4-7 usando IIC IPN – 2012

� El siguiente paso es crear un proyecto para crear el BSP. Ir al menú File ���� New ���� Xilinx

Board Support Package, después aparece la ventana en donde se selecciona el tipo de BSP (o

sistema operativo) a usar, en este caso será un STANDALONE. Se dejan todas las opciones por

defecto y dar click <FINISH> (figura 3-3)

Después se abre la ventana de configuración del BSP en donde se pueden seleccionar algunas librerías

y drivers para cada uno de los periféricos en el sistema. Explorar los diferentes campos y dejar todas

las opciones por defecto, click <OK>. Nuevamente en el Project Explorer se puede visualizar el

nuevo proyecto realizado llamado standalone_bsp_0

Figura 3-3. Configuración del BSP.

� El siguiente paso consiste en crear un proyecto para la aplicación de usuario. Ir al Menú ���� New

���� Xilinx C Project, dar como nombre de proyecto TestApp1 y seleccionar como template Empty

Application. (figura 3-4). Click <NEXT>

En la siguiente ventana seleccionar Target an existing Board Support Package � standalone_bsp_0,

click <FINISH>. (figura 3-4)

Figura 3-4. Creando el proyecto para la aplicación de usuario en C.

Page 9: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 Sistemas Empotrados en EDK 4-8 usando IIC IPN – 2012

� En la ventana Project Explorer, Click DERECHO sobre la carpeta TestApp1 ���� src y

seleccionar Import…

Ir a General ���� File system, click <NEXT>

Click <BROWSE>, Seleccionar la carpeta IPNEDK/Codigos/Lab4, click <OK>

Seleccionar las casillas lab4code.c y lib_compass.h, click <FINISH>

1. Definir las funciones que se encuentran en el archivo lib_compass.h, ¿Para qué son las

funciones tipo “Low Level” y “High Level”?

2. ¿Por qué en el código la dirección que se maneja para el compass es 0x60, siendo que su

dirección de fábrica es 0xC0?

3. Identifique y defina los parámetros para las funciones XIic_Send y XIic_Recv

4. ¿Cuál es el objetivo del siguiente código en la función ReadSensor16_COMPASS?

aux1=data[1];

aux2=data[0]<<8;

res=aux1 + aux2;

?

Page 10: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 Sistemas Empotrados en EDK 4-9 usando IIC IPN – 2012

Paso 4. Implementar el sistema en una tarjeta FPGA

El paso final consiste en juntar las partes hardware y software del sistema en un solo

archivo de configuración BIT para poder programar el FPGA. La herramienta que

logra realizar la fusión es llamada BitInit

� El primer paso es conectar y prender la tarjeta FPGA Spartan 3A para validar el sistema. Tener

conectado también un cable serial-USB a la computadora y al conector serial de la tarjeta FPGA.

Conectar al sensor CMPS03 a los pines de la tarjeta FPGA (verificar UCF y datasheet de la tarjeta

para ver la asignación de pines), conectar también la alimentación del sensor. Recuerde que el sensor

tiene que estar colocado sobre un protoboard y sin mucho movimiento.

� En la pestaña Terminal 1, dar click en <SETTINGS> y configurar la terminal para que se

comporte como un puerto serial de 9600 Baud Rates, (figura 4-1). IMPORTANTE: Note que el

número de puerto debe coincidir con el puerto al que está conectado el convertidor USB-SERIAL.

Finalmente dar click en el botón <CONNECT>

Figura 4-1. Configurando el puerto serial que se comunica con la tarjeta FPGA

� En el siguiente paso se programa la tarjeta FPGA, click en el botón <PROGRAM FPGA>.

Page 11: sistemas embebidos, Core dedicado I2C

Juan Carlos Moctezuma Eugenio

Lab 4: Compass CMPS03 Sistemas Empotrados en EDK 4-10 usando IIC IPN – 2012

En la ventana que aparece a continuación se pude seleccionar con que aplicación inicial será

programado el FPGA, seleccionar TestApp1.elf (figura 4-3), click <PROGRAM>

Figura 4-3. Programar el FPGA con una aplicación inicial (bootloop o ELF)

� Después que el FPGA es programado el resultado de la aplicación se observa en la figura 4-4. Ir

girando el sensor de forma horizontal y verificar las lecturas obtenidas.

NOTA: Para más información del funcionamiento del sensor, el datasheet está disponible en la ruta

IPNEDK/Datasheet/CMPS03.pdf

Figura 4-4. Salida del Test en el Terminal