Archives du mot-clé Kicad

Troisième circuit- imx233 BGA Kicad – Linux s’obstine à booter!

Nous avons envoyé à la production notre  troisième circuit de carte mère, après de longues heures passées dessus. Il permettra d’avoir 128 Mo de Ram ainsi que le possibilité de brancher directement 2 écrans différents (le sharp, et un TFT couleur). Il a également la particularité d’utiliser du BGA, ce qui est une première pour nous, et rend les choses plus complexes. En particulier nous ne savons pas comment va se passer le soudage.

Cette fois nous avons été obligé de créer nous même la librairie Kicad nécessaire à la imx233 BGA cette dernière n’existant pas. Une source d’erreur potentielle supplémentaire, espérons que non! Nous avons adapté la longueur des pistes vers la RAM grâce à notre branche de Kicad toujours ( içi ). L’ensemble du circuit est bien plus miniaturisé et tient sur une surface de 5cmx5cm.

circuitFinalcircuit2

Une fois le circuit reçu nous décidons de le souder selon la méthode habituelle de la poêle ou presque. En effet, nous avons déjà positionné l’ensemble des composants à l’exception de la imx233 puis chauffé afin que ceux-ci soient fixés et que nous puissions positionner plus aisément la imx233. Nous avons mis du flux sur les pads BGA, puis nous avons positionné le plus précisément possible la imx233, puis réchauffé.

circuitv2circuit2+screen

Une fois le circuit soudé, nous testons son fonctionnement, et là, Ô miracle, tout fonctionne très bien quasiment directement. Linux boote encore et toujours! :) Plus rien ne devrait maintenant nous empêcher d’avoir un nouveau prototype dans les semaines à venir!

Réaliser des circuits BGA avec Kicad et les souder à la maison avec pour seul matériel une Poêle c’est possible! :)

Une fois la deuxième ram soudée (ce qui n’était pas le cas sur la photo ci-dessus), le circuit fonctionne bien avec 128 Mo de ram , mais cela nécessite une configuration spéciale de u-boot par rapport à la configuration Olinuxino (voir https://community.freescale.com/message/457183#457183)

Nous avons malheureusement découvert un petit bug sur le circuit que nous avons corrigé temporairement à la main à l’aide d’un fil. Nous allons corriger le bug sur Kicad avant de publier le circuit.

Annonce du second prototype

Nous sommes actuellement en train de travailler sur un second prototype qui sera nettement plus ergonomique. Le circuit sera nouveau et contiendra une puce BGA, et 128mo de ram. Le circuit, déjà bien commencé, est réalisé grâce à la nouvelle fonctionnalité push& shove de kicad. La conception permettra au clavier d’utiliser toute la surface utile, et donc d’être plus ergonomique. Nous envisageons également d’intégrer éventuellement un écran couleur TFT, qui réduirait l’autonomie sur batterie, mais permettrait d’avoir une taille d’écran un peu plus grande et plus adaptée et de bénéficier des couleurs. Le boîtier sera beaucoup plus travaillé et son design sera bien plus sexy. Nous allons également réaliser une interface graphique pour maxima, afin d’introduire le calcul formel dans notre calculatrice.

Les images ci-dessous sont des documents de travail qui n’ont rien de définitif.

ciruitProto2proto2

Programmer le pic CMS, pour contrôler le clavier

Nous avons utilisé un pickit2 afin de programmer le pic CMS.

pickit

On programme le pic une fois soudé sur le circuit. On positionne le pickit sur les pins de programmation prévues à cet effet sur le pcb du circuit. Je rappelle au passage comment à été câblé le connecteur de programmation en conformité avec la doc du pickit2 : il s’agit du connecteur P2 ci-dessous.picProg1picProg2

 

Afin d’uploader le programme sur le pic, nous avons suivi les instructions présentes sur la documentation ubuntu.

Continuer la lecture

Linux boote!!!

Nous avons reçu et soudé le circuit.

2014-06-15-120902

Dans un premier temps, nous avons réussi à lancer u-boot sur le circuit, ce qui nous a déjà ravis, car nous avions enfin accès à une console, même si ce n’était pas encore une console linux. Par contre, le circuit semblait très instable. En effet u-boot ne bootait qu’une fois sur quinze :

HTLC
HTLC
HTLCLCU-Boot 2014.01 (Mar 07 2014 – 13:42:07)CPU: Freescale i.MX23 rev1.4 at 454 MHz
BOOT: SSP SD/MMC #0
DRAM: 64 MiB
MMC: MXS MMC: 0HTLCL0x80501002
HTLCL0x80501002
HTLCL0x80501002
HTLCL0x80501002
HTLCLCU-Boot 2014.01 (Mar 07 2014 – 13:42:07)CPU: Freescale i.MX23 rev1.4 at 454 MHz
BOOT: SSP SD/MMC #0
DRAM: 64 MiB
HTLCLCU-Boot 2014.01 (Mar 07 2014 – 13:42:07)CPU: Freescale i.MX23 rev1.4 at 454 MHz
BOOT: SSP SD/MMC #0
DRAM: 64 MiB
MMC: MXS MMC: 0
*** Warning – bad CRC, using default environmentIn: serial
Out: serial
Err: serial
Net: Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot: 0
mmc0 is current device
** No partition table – mmc 0 **
** No partition table – mmc 0 **
Booting from net …
(Re)start USB…
USB0: USB EHCI 1.00
scanning bus 0 for devices… 1 USB Device(s) found
scanning usb for storage devices… 0 Storage Device(s) found
scanning usb for ethernet devices… 0 Ethernet Device(s) found
No ethernet found.
Wrong Image Format for bootm command
ERROR: can t get kernel image!
=> help
? – alias for help
base – print or set address offset
bdinfo – print Board Info structure
boot – boot default, i.e., run bootcmd
bootd – boot default, i.e., run bootcmd
bootm – boot application image from memory
bootp – boot image via network using BOOTP/TFTP protocol
clocks – display clocks
cmp – memory compare
coninfo – print console devices and information
cp – memory copy
crc32 – checksum calculation
dcache – enable or disable data cache
dhcp – boot image via network using DHCP/TFTP protocol
echo – echo args to console
editenv – edit environment variable
env – environment handling commands
exit – exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls – list files in a directory (default /)
false – do nothing, unsuccessfully
fatinfo – print information about filesystem
fatload – load binary file from a dos filesystem
fatls – list files in a directory (default /)
fdt – flattened device tree utility commands
go – start application at address addr
gpio – input/set/clear/toggle gpio pins
help – print command description/usage
icache – enable or disable instruction cache
iminfo – print header information for application image
imxtract- extract a part of a multi-image
itest – return true/false on integer compare
led – [0|all] [on|off|toggle]
loadb – load binary file over serial line (kermit mode)
loads – load S-Record file over serial line
loadx – load binary file over serial line (xmodem mode)
loady – load binary file over serial line (ymodem mode)
loop – infinite loop on address range
md – memory display
mm – memory modify (auto-incrementing address)
mmc – MMC sub system
mmcinfo – display MMC info
mw – memory write (fill)
nfs – boot image via network using NFS protocol
nm – memory modify (constant address)
printenv- print environment variables
reset – Perform RESET of the CPU
run – run commands in an environment variable
saveenv – save environment variables to persistent storage
setenv – set environment variables
showvar – print local hushshell variables
sleep – delay execution for some time
source – run script from memory
test – minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
true – do nothing, successfully
usb – USB sub-system
usbboot – boot from USB device
version – print monitor, compiler and linker version
=> pierre
Unknown command pierre – try help
=>

 

Nous avons passé des heures et des heures à dessouder et à ressouder des composants. Nous avons également essayé de booter par USB via mxsldr pour voir ce qu’il se passait. Cela nous a amené à corriger une faiblesse dans mxsldr, qui est désormais présente sur le git officiel.

Continuer la lecture

Second circuit imx233 avec kicad

Étant donné l’échec du précédent circuit, nous avons décidé de recommencer de zéro en suivant les différents conseils qui ont pu nous pu être donnés sur ce thread. Ce nouveau circuit sera en 4 couches afin de faciliter le routage. Nous avons également décidé de passer la ram sur la couche du dessous afin de faciliter le routage.

Nous avons finalement utilisé la même technique qu’olimex concernant les condensateurs de découplage, c’est à dire remplacer les 33uF par plusieurs 22uF qui contrairement à ces derniers se trouvent dans un format 0805.

shemasProto1.2

Cette fois ci, l’adaptation des longueurs de pistes pour la liaison avec la ram a été réalisée grâce au patch de kicad que nous avons nous même développé (voir cette branche kicad , ce rapport de bug kicad, cette vidéo youtube)

Le routage a cette fois ci été réalisé avec beaucoup plus de précautions, notamment :

*Tous les angles sont à 45 degrés.
*Les condensateurs de découplage sont très proches du imx et de la ram et beaucoup mieux agencés.
*Les pistes de puissance sont plus larges là où cela est possible.

La bobine utilisée est désormais une inductance de puissance et non une inductance RF, comme sur l’ancien circuit. Cette fois nous n’avons pas fait l’impasse sur certains condensateurs comme c’était le cas pour le circuit précédent.
circuitProto1.2

Le circuit contient également un clavier de 49 touches, et un PIC 16f722 qui servira de contrôleur clavier. Il sera alimenté par le 3.3v que sort la imx233 et communiquera avec cette dernière en UART. Un interrupteur est tout de même présent entre afin d’isoler le pic du reste du circuit lors de sa phase de programmation.

Nous n’avons pas résisté également à exporter le model 3D généré par les dernières versions de kicad, et faire un rendu avec le tout nouveau moteur de rendu cyclesboard2

Nous envoyons en production. Nous avons hâte de souder ce circuit et espérons de tout notre cœur que linux bootera enfin!

Télécharger les sources du circuit.

Premier circuit linux, avec kicad

Nous allons essayer de réaliser un premier circuit sur lequel linux pourra booter, condition indispensable à la réalisation de notre calculatrice libre.

Nous avons tout d’abord décidé d’utiliser comme logiciel de conception électronique Kicad. Car c’est le logiciel libre le plus performant et le plus utilisé pour réaliser cette tache. Il est de plus dans une phase de développement rapide, car le CERN investit du temps pour son développement, et a proposé notamment une fonctionnalité push and shove des plus prometteuses.

Concernant la conception de notre circuit, nous avons décidé d’utiliser le processeur imx233, car il parait simple à utiliser, il est facile à se procurer,  il existe un package lqfp facile à souder et de nombreux designs de références existent pour ce processeur :

Malheureusement, il n’existe aucun circuit routé et libre d’imx233 utilisant kicad. Ceux de Olimex sont libres mais utilisent Eagle, un logiciel non-libre, ce qui va à l’encontre des principes de ce projet. Il existe par contre une librairie Kicad pour le imx233 réalisée par Opendous. Nous les remercions beaucoup pour cela car ça nous a été très utile.

La première étape a été de réaliser la partie schémas électroniques avec kicad (eeschemas) . Nous relions la ram au processeur grâce à des liens symboliques (sur le schémas, ce sont les rectangles en forme de flèches rouge).

firstCircuitschem1firstCircuitschem2

La partie comptant tous les condensateurs de découplage a été mise dans une autre feuille afin de rendre le schéma principal plus lisible.

Une fois la partie schéma électronique réalisée, on passe à l’association des empruntes.

Nous avons décidé de router ce circuit en deux couches. Cela ne semblait pas être un problème pour le fonctionnement du circuit et cela paraissait plus simple dans un premier temps. N’étant pas électroniciens, c’était la première fois que l’on routait un circuit deux couches. Le routage a été long et un peu compliqué mais nous avons fini par réussir.firstProtoCircuit

Nous avons envoyé le circuit a la production, et l’avons reçu en quatre exemplaires.

Concernant la réalisation du circuit, nous avons eu au début du mal à le souder de manière fiable à la main, puis nous avons trouvé des techniques permettant de le souder facilement chez nous, ne nécessitant pas de matériel spécialisé. Nous écrirons un article à ce sujet dans le futur.

Une fois soudé, nous avons tenté d’alimenter le circuit et de voir ce qui arrivait sur le port UART grâce à un convertisseur usb-uart de type umft230xb. Dans un premier temps sans avoir inséré de carte SD dans le circuit.

Tout d’abord rien ne se passait, ou plutôt il n’y avait sur l’UART que des symboles bizarres. Nous nous sommes rendu compte que nous avions oublié dans les schémas un condensateur de 100nF sur VDDXTAL, qui est donc très important et sans quoi le imx ne fonctionnera pas.

Une fois cela réalisé, nous avons réessayé, toujours sans carte SD insérée. Nous avons alors obtenu sur l’UART  » 0x8020a014 « .

01-circuit

Ensuite nous avons eu du mal à formater la carte SD comme il le fallait afin qu’elle soit reconnue comme bootable par la imx 233. En effet, avec un formatage en MBR tel que celui proposé par Olimex nous obtenions l’erreur  » 0x8020A007 « .

Nous avons trouvé des scripts afin de formater la carte SD correctement. Ces scripts sont disponibles sur la liste de diffusion d’opendous. Afin de formater correctement une carte SD, il convient d’exécuter les scripts dans cet ordre:

perl ./write_bootstream.pl u-boot.sb /dev/mmbclk0
perl ./bootstream_make_bootable.pl u-boot.sb /dev/mmbclk0

Finalement après avoir réussi à formater la carte SD correctement, nous obtenions « HTLC » puis le circuit rebootait avec u-boot.

Nous avons à ce point demandé de l’aide sur le forum de freescale

https://community.freescale.com/thread/320520

Nous somme finalement arrivé à la conclusion, grâce aux personnes qui nous ont aidé sur ce thread, qu’il nous fallait refaire un circuit avec un meilleur routage si nous souhaitions espérer qu’il puisse booter.

Télécharger les sources du circuit non-fonctionel: firstProto.tar