Projet de système embarqué sur ARM avec bus CAN


Je n’ai pas une idée très précise de l’application de mon système embarqué…????

C’est génant, mais…

Le but principal est de faire de la programmation sur ARM

Mais aussi de pouvoir piloter des modules OpenCAN, via un bus CAN.

On trouve des modules CAN avec des entrées sortie TOR, des convertissures analogiques/numérique.

Le bus CAN permet de travailler sur de longues distances, et il a une forte immunité aux parasites.

Le système de bus CAN ouvre la porte à de multiples applications en domotique , avec beaucoup de souplesse.

Il suffit de rajouter des modules CAN, sur le bus ainsi on est pas limités en nombre d’entrées sorties.

Aussi ce n’est pas très génant, de ne pas avoir une idée précise de l’application.

Un exemple de module CAN

http://www.esd-electronics.com/german/products/CAN/can-cbx-dio8_e.htm

Des modules de qualité industrielle, qui garantissent un isolement entre le bus et les autres circuits. C’est un exemple avant de faire un billet sur le CAN

L’autre intéret du bus CAN est de ne pas avoir à ramener par des câbles tous les capteurs et commandes sur un rack d’entrés sorties, près de la carte à microprocesseur.. et qu ‘il suffit d ‘ajouter des modules et de les raccorder sur le bus , selon ses besoins. ( et ensuite d’adapter le logiciel )

Le bus CAN c’est seulement trois fils torsadés, de petite section qui fait les tour des appareils, il a été inventé par Bosch pour réduire le faisceau électrique et le poids de cuivre dans les automobiles.

Ainsi dans une maison, un module CAN peut être intégré à la commande du portail, un autre à la commade de la porte du garage, un autre pour la commande automatique de l’arrosage, d’autres pour piloter des volets roulants, l’éclairage, le chauffage.

Ethernet :

Aujourd’hui toutes les cartes embarquées sont équipées d’une prise ethernet, qui permet de les raccorder en réseau local, et éventuellement sur un Livebox, ce qui permet de faire de la télésurveillance sans avoir à garder un PC allumé.

Il existe des serveurs http très légers pour les cartes embarquées

Avec un téléphone 3G on doit pouvoir se connecter sur sa carte

Les cartes ayant des prises USB, il sera facile d’ajouter une ou plusieurs webcam.

Bus I2C :

Les cartes sont équipées de bus I2C :
qui permet par exemple de piloter un afficheur en mode caractères qu ‘on peut mettre sur le boitier:

http://www.lextronic.fr/P55-afficheur-4-x-20-caracteres-retro-eclaire-bleu.html

il suffira de rajouter un petit module IR infrarouge /I2C pour envoyer des ordres à la carte microprocesseur avec une télécommande infrarouge dédiée.

Si on trouve le module inverse : bus I2C /infrarouge , la carte pourra éventuellement piloter un poste TV, magnétoscope

Evolutions possibles :

Module GSM : il peut permettre d’envoyer des téléalarmes par SMS, la carte étant alimentée sur batterie, cela permet au système d’être autonome, en cas de vandalismes ( cables coupés )

Modules Zeegbee : ce sont des mini modules radio. ainsi il est possible de faire une télécommande radio avec une mini télécommande, qui permet d’ouvrir le portail à distance lorsqu ‘on arrive en voiture.

Réseau radio

Un autre interet des modules zigbee, est de construire un réseau radio, ( il faut plusieurs cartes, bien sur. ) pour transmettre des ordres , des données, voire des petits fichiers, entre les divers postes du réseau. Le zigbee permet de couvrir des distances assez importantes..

L’autre interet est de faire le protocole de communication, soit maitre-esclave , soit maitre – maitre , et de faire un protocole très sécurisé, ce qui n’est pas le cas du TCP/IP.

Un protocole maitre maitre semble plus adpaté, qu’un protocle maitre esclave ou le maitre devrait interroger cycliquement tous les postes, ce qui pourrait perturber le voisinage. Plus facile à pirater aussi, avec le coté répétitif..

Ce protocole sera surement un peu lourd ( nombre de bits utiles par rapport au nombre de bits transmis ) mais il doit être sur et dans un usage domestique, le traffic n’est pas énorme.

Les applications sont multiples, dès que la distance devient importante, ou lorsqu ‘il faut traverser la voie publique ou une autre propriété, ou pour communiquer avec un appareil mobile, pour faire communiquer deux cartes embarquées , ou ramener les données d’un capteur éloigné : dans ce cas une minicarte processeur pourrait suffire et être alimentée par pile.

Un autre exemple dans les métiers du spectacle, pour les régies lumières placées au milieu du public, il y a toujours des cables… bien qu ‘ils utilisent le bus dédié DBX ( mais on peut très bien passer les commandes par radio et transformer en DBX avec une minicarte pour piloter le bus DBX des projecteurs.

La carte de dévelopement qui conviendrait chez Calao systems serait celle ci : MOB-TNY-A9260-C01 ( la seule à avoir une sortie CAN )

MOB-TNY-A9260-C01

http://www.calao-systems.com/articles.php?lng=fr&pg=5956

à la quelle il faut rajouter la carte processeur : TNY-A9263-C02
le seul processeur qui gère le CAN

TNY-A9263

http://www.calao-systems.com/articles.php?lng=fr&pg=5940

Pour l’instant je passe sur les modules GSM et Zigbee

La carte est équipée d’un microprcesseur ATMEL AT91SAM9263 @ 200MHz

Dont la documentation se trouve ici :

http://www.atmel.com/dyn/products/product_card.asp?part_id=4056

La documentation d’ Atmel est vraiment très complète , j’ai déjà eu l’occasion de l’étudier.

Là il y a deux options

– avec l ‘OS Linux

– tout programmer en assembleur

Il est évident que si on veut utiliser l’USB , mettre un mini http sur la prise ethernet, il faut installer l’ OS Linux.

On a plusieurs sources d’approvisionnement en soft pour Linux :

– celle de calao systems ou la carte doit être configurée.

– celle d’ Atmel ( qu ‘a du reprendre Calao ) , qui ne sera pas configuré pour la carte, mais celà vaut la peine de jeter un oeil sur les outil proposés par Atmel

– celle du site de ARM

http://www.arm.com/community/software-enablement/linux.php

– la méthode de Free electrons , basée sur LFS avec les sources du kernel, qu ‘il faudra compiler sur un PC.

Avec la méthode LFS on a deux options :

– soit configurer et recompiler son gcc pour faire de la cross compilation sur i386 pour ARM ( sinon la compil du kernel ARM sortira plein d’erreurs, mais le père Casteyde, une référence pour Linux , explque que le compilateur des distros est souvent compilé pour la distro, et qu ‘il faut systématiquement le recompiler pour avoir un gcc plus universel )

– soit de compiler un gcc avec la tool chain de ARM si bien qu ‘on aura deux gcc.

– Calao :

http://www.calao-systems.com/repository/DEVELOPMENT%20BOARDS/MOB-TNY-A9263-XXX/C02/

Calao nous fournit un ensemble complet, d’où mon choix pour ce fabricant de cartes grenoblois, sérieux : une société qui se développe depuis quelques années, et qui appartient au pole d’excellence Minatec, où j’ai retouvé le LETI..

hélas pour cette carte il est vide !!

( belle démonstration ! je pense qu ‘ils n’ont pas eu le temps de le mettre dans les divers répertoires, et cette société est très accessible par mail , elle répond et il ya aussi le forum où la questiona du déjà être posée , ça donne l’occasion de voir les autres méthodes )

Sources du Kernel : http://www.kernel.org/

~/Downloads/linux-2.6.36/arch/arm$ ls
Kconfig mach-bcmring mach-iop13xx mach-msm mach-orion5x mach-s3c64xx mach-stmp37xx plat-nomadik
Kconfig-nommu mach-clps711x mach-iop32x mach-mv78xx0 mach-pnx4008 mach-s5p6440 mach-tegra plat-omap
Kconfig.debug mach-cns3xxx mach-iop33x mach-mx25 mach-pxa mach-s5p6442 mach-u300 plat-orion
Makefile mach-davinci mach-ixp2000 mach-mx3 mach-realview mach-s5pc100 mach-ux500 plat-pxa
boot mach-dove mach-ixp23xx mach-mx5 mach-rpc mach-s5pv210 mach-versatile plat-s3c24xx
common mach-ebsa110 mach-ixp4xx mach-mxc91231 mach-s3c2400 mach-s5pv310 mach-vexpress plat-s5p
configs mach-ep93xx mach-kirkwood mach-netx mach-s3c2410 mach-sa1100 mach-w90x900 plat-samsung
include mach-footbridge mach-ks8695 mach-nomadik mach-s3c2412 mach-shark mm plat-spear
kernel mach-gemini mach-lh7a40x mach-ns9xxx mach-s3c2416 mach-shmobile nwfpe plat-stmp3xxx
lib mach-h720x mach-loki mach-nuc93x mach-s3c2440 mach-spear3xx oprofile plat-versatile
mach-aaec2000 mach-imx mach-lpc32xx mach-omap1 mach-s3c2443 mach-spear6xx plat-iop tools
mach-at91 mach-integrator mach-mmp mach-omap2 mach-s3c24a0 mach-stmp378x plat-mxc vfp

Les ARM sont fabriqués par de multiples fabricants de chips, certains ont des usages pour un domaine spécifique, pour ATMEL on va prendre le répertoire at91 dans lequel on trouve :

– des boards : c’est à dire les cartes dont la configuration qui dépend des circuits de la carte et du schéma a été transmise et intégrée dans les sources du kernel. A première vue il n’y a rien qui correspond à Calao, mais on pourra s’en servir pour configuer notre carte, et la créer dans le source du kernel.

– les divers processeurs d’ Atmel de la série AT91

on trouve deux fichiers pour le at91sam9263

at91sam9263.c

at91sam9263_devices.c

et un fichier de carte :

board-usb-a9263.c

Ce dernier doit correspondre aux minicartes USB de calao, très diffusées et qui ont été transmises aux développeurs du kernel.

cd mach-at91
knoppix@Microknoppix:~/Downloads/linux-2.6.36/arch/arm/mach-at91$ ls
Kconfig at91sam9263.c board-carmeva.c board-picotux200.c board-yl-9200.c
Makefile at91sam9263_devices.c board-cpu9krea.c board-qil-a9260.c clock.c
Makefile.boot at91sam926x_time.c board-cpuat91.c board-sam9-l9260.c clock.h
at572d940hf.c at91sam9g45.c board-csb337.c board-sam9260ek.c cpuidle.c
at572d940hf_devices.c at91sam9g45_devices.c board-csb637.c board-sam9261ek.c generic.h
at91cap9.c at91sam9rl.c board-dk.c board-sam9263ek.c gpio.c
at91cap9_devices.c at91sam9rl_devices.c board-eb01.c board-sam9g20ek-2slot-mmc.c include
at91rm9200.c at91x40.c board-eb9200.c board-sam9g20ek.c irq.c
at91rm9200_devices.c at91x40_time.c board-ecbat91.c board-sam9m10g45ek.c leds.c
at91rm9200_time.c board-1arm.c board-eco920.c board-sam9rlek.c pm.c
at91sam9260.c board-afeb-9260v1.c board-ek.c board-snapper9260.c pm.h
at91sam9260_devices.c board-at572d940hf_ek.c board-kafa.c board-stamp9g20.c pm_slowclock.S
at91sam9261.c board-cam60.c board-kb9202.c board-usb-a9260.c sam9_smc.c
at91sam9261_devices.c board-cap9adk.c board-neocore926.c board-usb-a9263.c sam9_smc.h

le fichier : arch/arm/mach-at91/at91sam9263.c concerne la gestion de l’horloge , du GPIO et des interruptions.

le fichier : at91sam9263_devices.c concerne la gestion des perihps internes : l ‘USB, Ethernet, I2C, le son AC97 ( qui ne semble pas utlisé sur cette carte ), le CAN, l ‘I2C et les E/S série, plus un controle de LCD

Il est possible qu ‘il n’y ait rien à configurer au niveau carte, ces sorties étant sur des pins prédéfinies du chip du microprocesseur et reprises sur la carte de développement. ( à vérifier , à confirmer )

seules 4 sorties GPIO ( voir photo de la carte et schéma ) seront peut être a configurer.

mais il ne semble pas que des GPIO, attaquent des crcuits spécifiques sur la carte de développement. A vérifier sur le scéma de la carte.

idem pour le controle du panel LCD, qui se trouve sur une carte d’extension, et donc les fils sont disponibles sur le connecteur d’extension du processeur, sur lequel viendrait s’embrocher la carte d’extension avec l’écran LCD.

La carte d’extension pourrait servir par exemple à faire une platine de lecture de la mémoire ou des registres, avec un jeu de clés et de leds … Puis si on veut faire
des petits progs en assembleur pour tester

On retrouvera , je pense , au moment de la conf du kernel, un option LCD.

Les souvenirs que j’ai de la lecture du datasheet des ARM Atmel AT9SAM926x, et qu ‘on peut affecter les I/O soit en E ou en S tor , soit sur une fonction interne, par exemple le controleur de panel LCD.

Après pour des modules spécifiques comme le Frisbee ou le GPS, il faudra vérifier sur quelles PIN d’ I/O ils sont connectés pour animer avec l’application correspondante ( qu ‘on doit écrire ou récupérer chez calao ).

Idem si on monte quelque chose sur une carte d’extension de développement prévue pour s’embrocher, ce qui nous laisse pas mal de liberté…

Par exemple commander un panel LCD qui serait cablé en LVDS ( des paires torsadées ). J’en ai un récupéré sur un vieux portable en 17 “, mais ce n’est pas tellement le but du jeu..

On a apparemment ce qu ‘il faut dans le kernel et pas trop d’E/S à configuer pour cette carte.

On aussi un fichier dans le répertoire include :

at91sam9263_matrix.h qui concerne la mémoire.

Boot : Reste le boot ( qui doit être commun avec d’autres circuits )

dans le répertoire arm, on a un fichier boot qui contient quelques trucs à découvrir, on verra plus tard. .

Makefile bootp compressed install.sh

Trouvé un synoptique sur le boot :

synoptique boot

classique : on charge le bootstrap , un chargeur ( uboot ) , et le kernel

reste à voir ce qu’est bootp dans les source du kernel

Le fichier de config du kernel por ce processeur :

On peut déjà y réfléchir, avant de se lancer dans la compil du kernel.

le touchscreen est configuré à yes, ce ne sera pas utile avec notre carte..

CONFIG_EXPERIMENTAL=y
# CONFIG_LOCALVERSION_AUTO is not set
# CONFIG_SWAP is not set
CONFIG_SYSVIPC=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_BLK_DEV_INITRD=y
CONFIG_SLAB=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_IOSCHED_DEADLINE is not set
# CONFIG_IOSCHED_CFQ is not set
CONFIG_ARCH_AT91=y
CONFIG_ARCH_AT91SAM9263=y
CONFIG_MACH_AT91SAM9263EK=y
CONFIG_MTD_AT91_DATAFLASH_CARD=y
# CONFIG_ARM_THUMB is not set
CONFIG_ZBOOT_ROM_TEXT=0×0
CONFIG_ZBOOT_ROM_BSS=0×0
CONFIG_CMDLINE=”mem=64M console=ttyS0,115200 initrd=0×21100000,3145728 root=/dev/ram0 rw”
CONFIG_FPE_NWFPE=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_LRO is not set
# CONFIG_INET_DIAG is not set
# CONFIG_IPV6 is not set
CONFIG_UEVENT_HELPER_PATH=”/sbin/hotplug”
CONFIG_MTD=y
CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_DATAFLASH=y
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_ATMEL=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_ATMEL_SSC=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_MULTI_LUN=y
CONFIG_NETDEVICES=y
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
CONFIG_MACB=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_KEYBOARD_ATKBD is not set
CONFIG_KEYBOARD_GPIO=y
# CONFIG_INPUT_MOUSE is not set
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_ADS7846=y
# CONFIG_SERIO is not set
CONFIG_SERIAL_ATMEL=y
CONFIG_SERIAL_ATMEL_CONSOLE=y
CONFIG_HW_RANDOM=y
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_GPIO=y
CONFIG_SPI=y
CONFIG_SPI_ATMEL=y
# CONFIG_HWMON is not set
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_NOWAYOUT=y
CONFIG_AT91SAM9X_WATCHDOG=y
CONFIG_FB=y
CONFIG_FB_ATMEL=y
# CONFIG_VGA_CONSOLE is not set
# CONFIG_USB_HID is not set
CONFIG_USB=y
CONFIG_USB_DEVICEFS=y
CONFIG_USB_MON=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_STORAGE=y
CONFIG_USB_GADGET=y
CONFIG_USB_ZERO=m
CONFIG_USB_GADGETFS=m
CONFIG_USB_FILE_STORAGE=m
CONFIG_USB_G_SERIAL=m
CONFIG_MMC=y
CONFIG_MMC_AT91=m
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_AT91SAM9=y
CONFIG_EXT2_FS=y
CONFIG_INOTIFY=y
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
CONFIG_JFFS2_FS=y
CONFIG_CRAMFS=y
CONFIG_NFS_FS=y
CONFIG_ROOT_NFS=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_ISO8859_1=y
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_USER=y
CONFIG_DEBUG_LL=y

D’autres documents spécifiques au 9263 et à toute la série AT91

http://www.atmel.com/dyn/products/app_notes.asp?family_id=605#Development_Tools/Kits

Reste à voir aussi la toolchain ARM pour notre gcc, qui contient le jeu d’instruction

il serait disponible sur le site de arm : pour le moment attente inscription pour les downloads.

Le data sheet du 9263 :

http://www.atmel.com/dyn/resources/prod_documents/doc6249.pdf

1100 pages à lire..:))

C’est plus qu ‘un 6502, mais c’est beaucoup moins qu ‘un athlon 64 et les autres..

Schéma de la carte de développement :

http://www.atmel.com/dyn/resources/prod_documents/doc6249.pdf

Schéma de la carte processeur :

http://www.calao-systems.com/repository/pub/EMBEDDED%20COMPUTERS/TNY-A9263-XXX/C01/HARDWARE/SCH-00041-A01.pdf

Cout de la carte de développement : 204 € HT
carte processeur : 136 € HT
alimentation : 25 € HT
_________________________________________

TOTAL 365 € HT ~ 400 € TTC

Outils logiciels :

Codesourcery , propose quelque chose de payant.

leur FAQ sur ARM

http://www.codesourcery.com/sgpp/lite/arm/portal/target_arch?@action=faq&target_arch=arm

on trouve assembleur débogueur

un autre site : yagarto

http://frank.harvard.edu/~coldwell/toolchain/

à suivre….

Publicités
Cet article a été publié dans Mes Projets. Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s