<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>

<channel>
	<title>Association Qu&#233;b&#233;coise de Robotique Amateur</title>
	<link>http://www.aqra.ca/</link>
	<description></description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>



	



	<item>
		<title>Comp&#233;tition Machine des Jeux de G&#233;nie 2010 - Robot Sherbrooke</title>
		<link>http://www.aqra.ca/Competition-Machine-des-Jeux-de</link>
		<guid isPermaLink="true">http://www.aqra.ca/Competition-Machine-des-Jeux-de</guid>
		<dc:date>2010-06-02T13:53:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Fran&#231;ois Duval</dc:creator>

<category domain="http://www.aqra.ca/-Robotique-">Robotique</category>


		<description>Les Jeux de G&#233;nie est la plus grande comp&#233;tition d'ing&#233;nierie du Qu&#233;bec. Chaque ann&#233;e, la comp&#233;tition de la machine en est l'&#233;preuve ma&#238;tresse. Elle consiste en un d&#233;fi commun lanc&#233; trois mois avant la comp&#233;tition. Le d&#233;fi : fabriquer une machine autonome et intelligente qui utilisera un bon nombre de capteurs et de senseurs afin de surmonter les diverses &#233;preuves du parcours donn&#233;. La fabrication de cette machine n&#233;cessite la formation d'&#233;quipes multidisciplinaires qui devront investir beaucoup de temps (...)

-
&lt;a href="http://www.aqra.ca/-Robotique-" rel="directory"&gt;Robotique&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;Les Jeux de G&#233;nie est la plus grande comp&#233;tition d'ing&#233;nierie du Qu&#233;bec. Chaque ann&#233;e, la comp&#233;tition de la machine en est l'&#233;preuve ma&#238;tresse. Elle consiste en un d&#233;fi commun lanc&#233; trois mois avant la comp&#233;tition. Le d&#233;fi : fabriquer une machine autonome et intelligente qui utilisera un bon nombre de capteurs et de senseurs afin de surmonter les diverses &#233;preuves du parcours donn&#233;. La fabrication de cette machine n&#233;cessite la formation d'&#233;quipes multidisciplinaires qui devront investir beaucoup de temps afin d'en arriver &#224; un produit des plus comp&#233;titifs. Cette ann&#233;e, la t&#226;che &#233;tait double. Il fallait concevoir et construire un groupe turbine et g&#233;n&#233;rateur hydraulique en plus d'un robot mobile. Le pr&#233;sent article pr&#233;sente le d&#233;veloppement du robot.&lt;/p&gt; &lt;h2&gt;Description g&#233;n&#233;rale&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Pour commencer, voici la description de la portion robotique du d&#233;fi Machine des Jeux de G&#233;nie 2010. Les informations viennent directement du manuel de r&#232;glements, tel que disponible sur le site officiel des Jeux de G&#233;nie (&lt;a href=&quot;http://www.jeuxdegenie.qc.ca/&quot; class=&quot;spip_out&quot;&gt;http://www.jeuxdegenie.qc.ca/&lt;/a&gt;).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;&quot;On vous demande de concevoir un robot capable de se d&#233;placer dans un parcours fait en tuyau de PVC de 100mm (4'') de diam&#232;tre interne. Le robot doit &#234;tre enti&#232;rement autonome. Les tuyaux seront obstru&#233;s par 4 objets&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; 2 &#233;crous de m&#233;tal&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; 2 embouts de patte de chaise en caoutchouc&lt;/li&gt;&lt;/ul&gt; &lt;p class=&quot;spip&quot;&gt;Lorsqu'un objet est trouv&#233; dans un conduit, vous devrez aller le disposer en dehors des canalisations dans l'une des deux zones d&#233;sign&#233;es &#224; cette fin. Le choix de la zone pour disposer un objet n'a pas d'importance avec le type d'objet. Les zones ont cependant une capacit&#233; limit&#233;e &#224; deux objets. D&#232;s qu'un objet est dispos&#233; dans une zone, une valve du bassin est ferm&#233;e, augmentant ainsi le niveau d'eau mis &#224; la disposition de votre g&#233;n&#233;rateur. La zone de d&#233;p&#244;t est visible sur le plan du parcours. Une fois les canalisations d&#233;sobstru&#233;es de tout objet, votre robot devra retourner au point de d&#233;part afin d'arr&#234;ter le chronom&#232;tre. Votre engin sera jug&#233; sur sa rapidit&#233; d'ex&#233;cution de la t&#226;che, son design et sa capacit&#233; &#224; accomplir correctement la t&#226;che.&quot;&lt;/i&gt;&lt;/p&gt; &lt;h2&gt;Pr&#233;sentation de l'&#233;quipe&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Ce projet a &#233;t&#233; d&#233;velopp&#233; par 7 personnes qui se sont donn&#233; c&#339;ur et &#226;me pendant 4 mois afin de se surpasser et de rehausser les standards de comp&#233;tition. Tous sont &#233;tudiants en G&#233;nie &#224; l'Universit&#233; de Sherbrooke. En ordre alphab&#233;tique :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Julien Boisvert&lt;/strong&gt;, G&#233;nie M&#233;canique : Conception et fabrication m&#233;canique&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Arthur Carr&#233;&lt;/strong&gt;, G&#233;nie Informatique : Programmation&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;J&#233;r&#244;me Demers&lt;/strong&gt;, G&#233;nie &#201;lectrique : Prototypage et fabrication robotique&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Jean-Fran&#231;ois Duval&lt;/strong&gt;, G&#233;nie &#201;lectrique : Responsable de l'&#233;quipe, conception et fabrication &#233;lectronique et m&#233;canique&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Philippe Lavoie&lt;/strong&gt;, G&#233;nie Informatique : Programmation&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Pierre-Luc-St-Yves&lt;/strong&gt;, G&#233;nie M&#233;canique : Conception et fabrication m&#233;canique&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Matthieu Tanguay&lt;/strong&gt;, Ma&#238;trise Robotique : Aide, conseils et fabrication m&#233;canique&lt;/li&gt;&lt;/ul&gt;
&lt;div class='spip_document_709 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_team_1-2.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 74.7 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_team_1-2.jpg' width='520' height='347' alt=&quot;JPEG - 74.7 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;R&#233;sum&#233; de notre cheminement&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Le robot doit pouvoir se d&#233;placer dans un parcours compos&#233; de tuyaux de 10cm qui comporte des virages &#224; 90 degr&#233;s, des T, des ouvertures en hauteur, etc. Le principal d&#233;fi a donc &#233;t&#233; de concevoir une machine autonome capable de se d&#233;placer dans cet environnement, ce qui est plus difficile qu'il ne le semble. Pour pouvoir passer dans les T, le robot doit &#234;tre de taille tr&#232;s r&#233;duite. Malgr&#233; cela, il doit &#234;tre capable de manipuler des objets tr&#232;s lourds et volumineux. R&#233;ussir &#224; garder le robot au fond des tuyaux fut un bon d&#233;fi pour la majorit&#233; des &#233;quipes car les prototypes avaient tendance &#224; s'agripper sur les parois et &#224; perdre leur positionnement.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Apr&#232;s plusieurs essais de m&#233;canismes de locomotions, l'&#233;quipe s'est fix&#233;e sur l'usage de chenilles, ce qui s'est av&#233;r&#233; le m&#233;canisme r&#233;pondant le mieux &#224; nos besoins. La bonne adh&#233;rence nous a permis de pousser plusieurs objets. De plus, en ayant une surface de contact &#233;tendue, nous avons &#233;vit&#233; de rester coinc&#233; dans les jonctions et les formes particuli&#232;res des T. Bien que l'id&#233;e des chenilles &#233;tait accept&#233;e, il nous restait encore &#224; concr&#233;tiser nos id&#233;es. Nous avons donc travaill&#233; avec plusieurs prototypes.&lt;/p&gt; &lt;h3&gt;Le tank en &#171; m&#233;tal lourd &#187;&lt;/h3&gt;
&lt;div class='spip_document_711 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_IMG_4683.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 1.2 Mo'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_IMG_4683.jpg' width='520' height='390' alt=&quot;JPEG - 1.2 Mo&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;Notre premier prototype a &#233;t&#233; bas&#233; sur un jouet t&#233;l&#233;guid&#233;. La douteuse traduction fran&#231;aise du texte de l'emballage nous l'annon&#231;ait comme &#233;tant fait de m&#233;taux lourds... Heureusement, il n'y avait que du plastique ! Ce robot, bien qu'incapable d'entrer dans les tuyaux, nous a permis de tester la premi&#232;re version de l'&#233;lectronique de contr&#244;le ainsi que de commencer la programmation des d&#233;placements et des d&#233;tections d'obstacles.&lt;/p&gt; &lt;div class='spip_document_712 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_elec_v1.png&quot; type=&quot;image/png&quot; title='PNG - 49.7 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-376x543/png_elec_v1-376x543.png' width='376' height='543' alt=&quot;PNG - 49.7 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_714 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_IMG_4522.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 1.4 Mo'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_IMG_4522.jpg' width='520' height='390' alt=&quot;JPEG - 1.4 Mo&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;Cette version de l'&#233;lectronique a &#233;t&#233; con&#231;ue tr&#232;s rapidement et prototyp&#233;e &#224; l'Universit&#233;, ce qui explique la mauvaise qualit&#233; du design et de la r&#233;alisation. Malgr&#233; tout, elle aura permis de tester le dsPIC33FJ128MC202, l'acc&#233;l&#233;rom&#232;tre ADXL335 et le double driver de moteur TB6552, en plus de permettre aux programmeurs de se familiariser avec C30 et l'environnement de d&#233;veloppement de Microchip.&lt;/p&gt; &lt;h3&gt;Le mini tank t&#233;l&#233;command&#233;&lt;/h3&gt;
&lt;div class='spip_document_715 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_IMG_4748.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 1.2 Mo'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_IMG_4748.jpg' width='520' height='390' alt=&quot;JPEG - 1.2 Mo&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;Encore une fois, le robot a &#233;t&#233; construit &#224; partir d'un jouet. Cette fois, nous avons pris un minuscule v&#233;hicule dont les dimensions correspondaient &#224; notre objectif final. Avec ce petit tank, autant en mode t&#233;l&#233;command&#233; qu'en mode semi-autonome et autonome, nous avons pu confirmer que les chenilles &#233;taient une solution gagnante pour se d&#233;placer dans les tuyaux. Par contre, le jouet pr&#233;sentait quelques probl&#232;mes : manque d'adh&#233;rence, manque de puissance (incapable de d&#233;placer les objets) et manque de fiabilit&#233; (les chenilles se d&#233;tachaient tr&#232;s souvent). C'est sur ce robot qu'a &#233;t&#233; test&#233;e la deuxi&#232;me version de notre &#233;lectronique, une version de taille similaire mais beaucoup plus fonctionnelle et de qualit&#233; : PCB 4 couches, correction de bogues, am&#233;lioration de la distribution &#233;lectrique et thermique, meilleure connectique, dsPIC33FJ128MC204 pour avoir plus d'entr&#233;es/sorties, etc.&lt;/p&gt; &lt;div class='spip_document_716 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_elec_v2.png&quot; type=&quot;image/png&quot; title='PNG - 67.3 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_elec_v2.png' width='520' height='551' alt=&quot;PNG - 67.3 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_718 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_pcb_machine_v2.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 747.6 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_pcb_machine_v2.jpg' width='520' height='390' alt=&quot;JPEG - 747.6 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Prototype maison, fabrication traditionnelle&lt;/h3&gt;
&lt;div class='spip_document_722 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_IMG_4758.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 1.4 Mo'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_IMG_4758.jpg' width='520' height='390' alt=&quot;JPEG - 1.4 Mo&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;Ce prototype a &#233;t&#233; fabriqu&#233; &#224; base de plastique et de quelques pi&#232;ces usin&#233;es par un membre de l'&#233;quipe. Sa g&#233;om&#233;trie ne lui permettait pas de bien se d&#233;placer dans les tuyaux : il fallait r&#233;duire sa longueur. Il a toutefois &#233;t&#233; utile pour confirmer le choix et le positionnement des capteurs infrarouges.&lt;/p&gt; &lt;h3&gt;Concept final : StableBot&lt;/h3&gt;
&lt;div class='spip_document_724 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_SBv3_1.png&quot; type=&quot;image/png&quot; title='PNG - 175.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_SBv3_1.png' width='520' height='424' alt=&quot;PNG - 175.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_730 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_IMG_5453.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 1.3 Mo'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_IMG_5453.jpg' width='520' height='390' alt=&quot;JPEG - 1.3 Mo&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;Afin d'optimiser l'usage du faible volume disponible, nous avons mod&#233;lis&#233; les composantes de notre robot sous SolidWorks. Nous avions donc maintenant la possibilit&#233; d'essayer rapidement des agencements et des configurations. Plusieurs dessins ont &#233;t&#233; faits, critiqu&#233;s et modifi&#233;s.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour r&#233;aliser nos prototypes de StableBot, nous avons utilis&#233; une imprimante 3D Stratasys, gracieuset&#233; de l'IntRoLab de l'Universit&#233; de Sherbrooke. Cette technologie nous a permis de concevoir un ch&#226;ssis tr&#232;s complexe, mais pour autant tr&#232;s l&#233;ger et rapide &#224; obtenir. Avec une solution d'usinage classique, nous aurions eu besoin de beaucoup plus de temps pour la conception et la fabrication.&lt;/p&gt; &lt;div class='spip_document_726 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_pcb_v3_machine.png&quot; type=&quot;image/png&quot; title='PNG - 83.5 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_pcb_v3_machine.png' width='520' height='581' alt=&quot;PNG - 83.5 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_728 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_IMG_4834.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 1.4 Mo'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_IMG_4834.jpg' width='520' height='390' alt=&quot;JPEG - 1.4 Mo&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;Nous avons d&#233;velopp&#233; une 3e et derni&#232;re version de notre &#233;lectronique pour ce robot. La connectique a &#233;t&#233; optimis&#233;e, le volume de la carte a &#233;t&#233; r&#233;duit par une modification du positionnement de certaines pi&#232;ces, nous avons ajout&#233; des boutons pour l'utilisateur et retravaill&#233; la forme pour faciliter l'int&#233;gration et le c&#226;blage sur le robot.&lt;/p&gt; &lt;h2&gt;Commanditaires&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Un grand merci aux commanditaires de la Machine, sans qui ce projet aurait &#233;t&#233; impossible &#224; r&#233;aliser !&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Microchip&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; IntRoLab, Universit&#233; de Sherbrooke&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Labo Circuits&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Solarbotics&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Les Industries Rilec Inc.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Poly Alto&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Atelier Pedro&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; D&#233;partement GEGI de l'Universit&#233; de Sherbrooke&lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;Vid&#233;o&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Voici un vid&#233;o du robot tourn&#233; au Capitole de Qu&#233;bec, lors de notre dernier essai avant la comp&#233;tition. Le robot est autonome (aucun contr&#244;le &#224; distance).&lt;/p&gt; &lt;object width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/Z3ERyYSB9WI&amp;hl=en_US&amp;fs=1&amp;&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/Z3ERyYSB9WI&amp;hl=en_US&amp;fs=1&amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://www.aqra.ca/IMG/jpg_IMG_4758-2.jpg" length="1520111" type="image/jpeg" />
		
		<enclosure url="http://www.aqra.ca/IMG/png_SBv3_1-2.png" length="179378" type="image/png" />
		

	</item>



	<item>
		<title>Porter U-Boot sur un Blackfin BF532 sous Ubuntu</title>
		<link>http://www.aqra.ca/Porter-U-Boot-sur-un-Blackfin</link>
		<guid isPermaLink="true">http://www.aqra.ca/Porter-U-Boot-sur-un-Blackfin</guid>
		<dc:date>2009-08-18T20:53:09Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Fran&#231;ois Duval</dc:creator>

<category domain="http://www.aqra.ca/-Linux-">Linux</category>

		<dc:subject>embarqu&#233;</dc:subject>
		<dc:subject>blackfin</dc:subject>
		<dc:subject>u-boot</dc:subject>
		<dc:subject>bf532</dc:subject>
		<dc:subject>icebear</dc:subject>
		<dc:subject>section5</dc:subject>
		<dc:subject>uboot</dc:subject>

		<description>Le pr&#233;sent document explique comment j'ai port&#233; U-Boot sur un Blackfin BF532 en utilisant un JTAG ICEBear et une machine virtuelle sous Ubuntu 9.04.

-
&lt;a href="http://www.aqra.ca/-Linux-" rel="directory"&gt;Linux&lt;/a&gt;

/ 
&lt;a href="http://www.aqra.ca/+-embarque-+" rel="tag"&gt;embarqu&#233;&lt;/a&gt;, 
&lt;a href="http://www.aqra.ca/+-blackfin-+" rel="tag"&gt;blackfin&lt;/a&gt;, 
&lt;a href="http://www.aqra.ca/+-u-boot-+" rel="tag"&gt;u-boot&lt;/a&gt;, 
&lt;a href="http://www.aqra.ca/+-bf532-+" rel="tag"&gt;bf532&lt;/a&gt;, 
&lt;a href="http://www.aqra.ca/+-icebear-+" rel="tag"&gt;icebear&lt;/a&gt;, 
&lt;a href="http://www.aqra.ca/+-section5-+" rel="tag"&gt;section5&lt;/a&gt;, 
&lt;a href="http://www.aqra.ca/+-uboot-+" rel="tag"&gt;uboot&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2&gt;Sommaire&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Version 1.1 de l'article et du document, en date du 21 ao&#251;t 2009.&lt;/p&gt; &lt;h2&gt;Introduction&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Le pr&#233;sent document explique comment j'ai port&#233; U-Boot sur un Blackfin BF532 en utilisant un JTAG ICEBear et une machine virtuelle sous Ubuntu 9.04. Les informations contenues dans ce texte ne sont en aucun cas exclusives ou totalement nouvelles, tout comme je ne suis pas un guru Linux et un ma&#238;tre Blackfin. Le but est plut&#244;t de simplifier la t&#226;che &#224; quelqu'un qui aurait &#224; suivre un parcours similaire au mien et &#224; regrouper les informations et les techniques que j'ai apprises en consultant divers sites, en exp&#233;rimentant et en posant beaucoup de questions.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Initialement, mon d&#233;veloppement s'est fait sous une machine Debian Etch 4.0 (sous VMWare Player) afin d'&#234;tre le plus semblable possible au syst&#232;me de d&#233;veloppement de Section5. Afin de rendre le tout plus accessible, j'ai reproduit ma d&#233;marche sous Ubuntu 9.04 et VirtualBox et j'ai consign&#233; toutes mes &#233;tapes dans ce document. Les utilisateurs exp&#233;riment&#233;s de Linux me trouveront probablement redondant, mais je pr&#233;f&#232;re fournir trop d'informations plut&#244;t que pas assez. Vous y verrez d'ailleurs mes erreurs et la mani&#232;re dont je m'en suis sorti. Je pr&#233;f&#232;re expliquer le cheminement complet plut&#244;t que simplement la solution finale afin d'aider un maximum de personnes &#224; progresser plus rapidement.&lt;/p&gt; &lt;h2&gt;D&#233;finition de quelques termes&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Section5 :&lt;/i&gt; &lt;/strong&gt; Petite compagnie Suisse qui produit et vend certains outils de d&#233;veloppement pour Blackfin. Site web : &lt;a href=&quot;http://section5.ch/&quot; class=&quot;spip_out&quot;&gt;http://section5.ch/&lt;/a&gt; (plus pr&#233;cis&#233;ment : &lt;a href=&quot;http://section5.ch/embedded&quot; class=&quot;spip_out&quot;&gt;http://section5.ch/embedded&lt;/a&gt;). Le responsable est Martin Strubel et peut &#234;tre contact&#233; par leur forum ou par email : strubel-@-section5-.-ch.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;ICEBear :&lt;/i&gt; &lt;/strong&gt; Adaptateur JTAG de Section5.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;BFLoader :&lt;/i&gt; &lt;/strong&gt; Utilitaire permettant de programmer la Flash d'une carte Blackfin (fourni par Section5, sources disponibles).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;GDBProxy+Insight :&lt;/i&gt; &lt;/strong&gt; Outils de d&#233;bogage du Blackfin. Utilis&#233;s avec le ICEBear, ils permettent la programmation et le d&#233;bogage (step-by-step, break point, register dump, etc.) Note : il est important d'utiliser la version disponible sur le site de Section5 et non celle de &#181;CLinux si on veut une compatibilit&#233; avec le ICEBear !&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Gigamodule :&lt;/i&gt; &lt;/strong&gt; Carte &#233;lectronique d&#233;velopp&#233;e par l'&#233;quipe [Robot22], un groupe de finissants de G&#233;nie &#201;lectrique et Informatique de l'Universit&#233; de Sherbrooke et moi. Le Gigamodule v0.1 est simplement compos&#233; d'un Blackfin BF532, d'une RAM parall&#232;le (MT48LC32M16A2, 512Mb), d'une Flash SPI (AT45DB321, 32Mb), d'un convertisseur s&#233;rie USB (FT232) et de quelques p&#233;riph&#233;riques et connecteurs. Elle sert de prototype &#224; un syst&#232;me plus complexe de bus de communication haute-vitesse.&lt;/p&gt; &lt;div class='spip_document_703 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_IMG_3372.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 1.2 Mo'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_IMG_3372.jpg' width='520' height='390' alt=&quot;JPEG - 1.2 Mo&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;Informations sur le syst&#232;me&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;PC utilis&#233; pour mon d&#233;veloppement :&lt;/strong&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Intel Core2Duo T5850 @ 2.16GHz&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; 4.00GB RAM&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Windows Vista 64bits&lt;/li&gt;&lt;/ul&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Version des outils :&lt;/strong&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; U-Boot : 1.1.6-2008R1.5&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; BFLoader : 1.3beta&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; VirtualBox 3.0.4&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Ubuntu 9.04 32bits&lt;/li&gt;&lt;/ul&gt; &lt;p class=&quot;spip&quot;&gt;Une machine virtuelle a &#233;t&#233; cr&#233;&#233;e avec VirtualBox 3.0.4 et Ubuntu 9.04 32bits y a &#233;t&#233; install&#233;. Toutes les informations pr&#233;sentes dans ce document se basent sur ce syst&#232;me.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il est pr&#233;f&#233;rable de travailler comme root pour &#233;viter les probl&#232;mes de permissions. Vous pouvez remarquer par le prompt quand je suis root ou pas ($ = user, # = root). Si vous travaillez comme user, il suffit de mettre sudo devant les commandes importantes.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~$ su Password: root@jfduval-desktop:/home/jfduval#&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Note : Pour les utilisateurs de VirtualBox et d'Ubuntu, si la r&#233;solution de votre &#233;cran ne vous satisfait pas vous pouvez consulter ce site afin de r&#233;gler le probl&#232;me : &lt;a href=&quot;http://www.linuxformat.co.uk/forums/viewtopic.php?t=6438&quot; class=&quot;spip_out&quot;&gt;http://www.linuxformat.co.uk/forums/viewtopic.php ?t=6438&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Nos outils : JTAG ICEBear et logiciels de Section5&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;C'est avec le JTAG ICEBear que nous allons pouvoir transf&#233;rer notre code compil&#233; dans la m&#233;moire du Blackfin. La pr&#233;sente section explique l'installation des outils, le test et la modification de ces outils.&lt;/p&gt; &lt;h3&gt;Installation des logiciels&lt;/h3&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Source principale d'informations :&lt;/strong&gt; le ICEBear Manual (PDF) contient beaucoup d'informations utiles. Une bonne partie des commandes utilis&#233;es dans cette section en sont tir&#233;es.&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Afin de pouvoir utiliser &lt;i class=&quot;spip&quot;&gt;apt-get install&lt;/i&gt; pour t&#233;l&#233;charger et installer les paquets fournis par Section5, il faut modifier &lt;i class=&quot;spip&quot;&gt;/etc/apt/sources.list&lt;/i&gt; :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:/etc/apt$ cd /etc/apt/ jfduval@jfduval-desktop:/etc/apt$ ls apt.conf.d sources.list sources.list.d trusted.gpg secring.gpg sources.list~ trustdb.gpg trusted.gpg~ jfduval@jfduval-desktop:/etc/apt$ sudo gedit sources.list&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On lui ajoute en bas du fichier la ligne suivante :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;deb http://www.section5.ch/debian etch main non-free&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On sauvegarde et ferme. On met &#224; jour la liste des sources disponibles :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:/etc/apt$ apt-get update&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On peut maintenant installer la suite ICEBear :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='15' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~$ sudo apt-get install icebear-gdbproxy Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help resolve the situation: The following packages have unmet dependencies: icebear-gdbproxy: Depends: libbfemu but it is not going to be installed Depends: libftdi0 (&amp;gt;= 0.7) but it is not installable Depends: libbfemu (&amp;gt;= 1.2) but it is not going to be installed E: Broken packages jfduval@jfduval-desktop:~$&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Certaines d&#233;pendances ne sont pas r&#233;solues, on tente de corriger &#231;a :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='21' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~$ sudo apt-get install libbfemu Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help resolve the situation: The following packages have unmet dependencies: libbfemu: Depends: libftdi0 (&amp;gt;= 0.7) but it is not installable E: Broken packages jfduval@jfduval-desktop:~$ sudo apt-get install libftdi0 Reading package lists... Done Building dependency tree Reading state information... Done Package libftdi0 is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package libftdi0 has no installation candidate&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Alors, la solution est d'aller t&#233;l&#233;charger directement le package &lt;i class=&quot;spip&quot;&gt;libftdi0&lt;/i&gt; sur un serveur Debian. On va &#224; l'adresse suivante : &lt;a href=&quot;http://packages.debian.org/etch/i386/libftdi0/download&quot; class=&quot;spip_out&quot;&gt;http://packages.debian.org/etch/i386/libftdi0/download&lt;/a&gt; On double clique ensuite sur le &lt;i class=&quot;spip&quot;&gt;.deb&lt;/i&gt; et on installe (tout se fait en GUI).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Ensuite, &lt;i class=&quot;spip&quot;&gt;libbfemu&lt;/i&gt; s'installe correctement :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='26' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~/Desktop/libftdi-0.16$ sudo apt-get install libbfemu Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: linux-headers-2.6.28-11 linux-headers-2.6.28-11-generic Use 'apt-get autoremove' to remove them. The following NEW packages will be installed: libbfemu 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 62.2kB of archives. After this operation, 225kB of additional disk space will be used. WARNING: The following packages cannot be authenticated! libbfemu Install these packages without verification [y/N]? y Get:1 http://www.section5.ch etch/non-free libbfemu 1.3-2 [62.2kB] Fetched 62.2kB in 1s (41.2kB/s) Selecting previously deselected package libbfemu. (Reading database ... 121361 files and directories currently installed.) Unpacking libbfemu (from .../libbfemu_1.3-2_i386.deb) ... Setting up libbfemu (1.3-2) ... * Stopping kernel event manager... [ OK ] * Starting kernel event manager... [ OK ] Processing triggers for libc6 ... ldconfig deferred processing now taking place jfduval@jfduval-desktop:~/Desktop/libftdi-0.16$&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Deuxi&#232;me tentative d'installation de la suite ICEBear :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='23' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~/Desktop/libftdi-0.16$ sudo apt-get install icebear-gdbproxy Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: linux-headers-2.6.28-11 linux-headers-2.6.28-11-generic Use 'apt-get autoremove' to remove them. The following NEW packages will be installed: icebear-gdbproxy 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 38.4kB of archives. After this operation, 143kB of additional disk space will be used. WARNING: The following packages cannot be authenticated! icebear-gdbproxy Install these packages without verification [y/N]? y Get:1 http://www.section5.ch etch/non-free icebear-gdbproxy 0.8-5 [38.4kB] Fetched 38.4kB in 0s (41.1kB/s) Selecting previously deselected package icebear-gdbproxy. (Reading database ... 121368 files and directories currently installed.) Unpacking icebear-gdbproxy (from .../icebear-gdbproxy_0.8-5_i386.deb) ... Processing triggers for man-db ... Setting up icebear-gdbproxy (0.8-5) ... jfduval@jfduval-desktop:~/Desktop/libftdi-0.16$&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On peut maintenant installer les autres packages :&lt;i class=&quot;spip&quot;&gt; bfinsight&lt;/i&gt;, &lt;i class=&quot;spip&quot;&gt;bfloader&lt;/i&gt;, &lt;i class=&quot;spip&quot;&gt;bfin-elf-toolchain&lt;/i&gt;, &lt;i class=&quot;spip&quot;&gt;libbfemu-dev&lt;/i&gt;. On utilise toujours la m&#234;me commande &lt;i class=&quot;spip&quot;&gt;sudo apt-get install nom_du_paquet&lt;/i&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Note :&lt;/strong&gt; pour &#233;liminer le message d'erreur d'authentification des sources, se r&#233;f&#233;rer &#224; la section B.1 du ICEBear Manual afin de savoir comment installer la cl&#233;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Une fois ces op&#233;rations effectu&#233;es, nous avons une cha&#238;ne compl&#232;te pour utiliser le JTAG.&lt;/p&gt; &lt;h3&gt;Test de la cha&#238;ne JTAG&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Pour utiliser BFLoader, il suffit de taper la commande&lt;i class=&quot;spip&quot;&gt; flashload&lt;/i&gt;. Pour avoir des informations sur la cha&#238;ne, il suffit de faire&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~$ flashload -&#8211;info&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Si vous obtenez :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'&gt;Could not claim USB device, check permissions! Could not open ICEbear. Is it connected? Try replugging and make sure no other program is using it&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;C'est caus&#233; par le syst&#232;me &lt;i class=&quot;spip&quot;&gt;udev&lt;/i&gt; pr&#233;sent dans les derni&#232;res versions de Debian et d'Ubuntu. En se basant sur les informations du ICEBear Manual, on va modifier les acc&#232;s. Premi&#232;rement, on peut t&#233;l&#233;charger le package ICEBear distribution 1.2 sur &lt;a href=&quot;http://www.section5.ch/software&quot; class=&quot;spip_out&quot;&gt;http://www.section5.ch/software&lt;/a&gt;. Ouvrir l'archive, naviguer jusqu'&#224; &lt;i class=&quot;spip&quot;&gt;/ICEbear-linux-1.21beta/udev/&lt;/i&gt; et extraire le fichier 45-icebear.rules ou aller sur &lt;a href=&quot;http://www.section5.ch/forum/viewtopic.php?f=1&amp;t=58&amp;p=169&amp;hilit=ubuntu#p169&quot; class=&quot;spip_out&quot;&gt;http://www.section5.ch/forum/viewtopic.php ?f=1&amp;t=58&amp;p=169&amp;hilit=ubuntu#p169&lt;/a&gt;
et t&#233;l&#233;charger &lt;a href=&quot;http://www.section5.ch/dsp/icebear/45-icebear.rules&quot; class=&quot;spip_out&quot;&gt;http://www.section5.ch/dsp/icebear/45-icebear.rules&lt;/a&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;On copie ensuite ce fichier dans le bon r&#233;pertoire :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~/Desktop$ sudo mv 45-icebear.rules /etc/udev/rules.d/&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;et on red&#233;marre le tout :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~/Desktop$ sudo /etc/init.d/udev restart * Stopping kernel event manager... [ OK ] * Starting kernel event manager... [ OK ] jfduval@jfduval-desktop:~/Desktop$&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Personnellement j'ai encore des messages d'erreur, mais faire &lt;i class=&quot;spip&quot;&gt;sudo&lt;/i&gt; avant &lt;i class=&quot;spip&quot;&gt;flashload&lt;/i&gt; (ou travailler en root) me permet de bien d&#233;tecter ma carte, alors tout est fonctionnel ! Une cha&#238;ne fonctionnelle devrait vous donner au minimum :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'&gt;Number of devices in JTAG chain: 1 JTAG wait cycles: 0 Detected Device: BF-533(531,532) rev:5&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Le reste des informations n'est peut-&#234;tre pas pertinent, tout d&#233;pendant de votre hardware. Il faut en effet utiliser le bon backend pour que les donn&#233;es affich&#233;es soient coh&#233;rentes.&lt;/p&gt; &lt;h3&gt;Atmel SPI Flash&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Normalement, le programme BFLoader permet de charger le fichier .ldr obtenu par la compilation de U-Boot directement dans la Flash, qu'elle soit parall&#232;le (sur le bus m&#233;moire) ou SPI. Par contre, il s'av&#232;re que le driver SPI ne supporte que les Flash ST et compatibles, qui utilisent un protocole standard et des pages de 512 octets. &#201;videmment, afin d'augmenter le d&#233;fi, la carte Gigamodule dispose d'une Flash Atmel qui utilise le protocole Dataflash (commandes plus &#233;volu&#233;es et pages de 528 octets), ce qui rend impossible l'utilisation telle quelle de BFLoader. Le code de BFLoader a &#233;t&#233; modifi&#233; l&#233;g&#232;rement pour d&#233;tecter les Flash Atmel. Par contre, refaire compl&#232;tement le driver n'&#233;tait pas assez n&#233;cessaire pour &#234;tre fait, il existe d'autres possibilit&#233;s pour programmer U-Boot dans la Flash que nous explorerons dans les prochaines sections.&lt;/p&gt; &lt;h3&gt;Modification de BFLoader&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Tel que mentionn&#233; dans le pr&#233;c&#233;dent paragraphe, il est possible de modifier BFLoader pour lui ajouter certaines fonctionnalit&#233;s. Dans mon cas, la modification aura &#233;t&#233; d'ajouter un certain support pour les SPI Flash Atmel. Maintenant, plut&#244;t que de mettre un simple message d'erreur, une AT45DB321D (ou toute autre Flash de la famille AT45DBxxxD) peut &#234;tre d&#233;tect&#233;e et ses caract&#233;ristiques sont affich&#233;es. Les informations qui suivent expliquent comment changer le backend spi_flash.dxe pour lui ajouter des fonctions.&lt;/p&gt; &lt;h3&gt;Obtenir les sources&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;La premi&#232;re &#233;tape est d'obtenir les sources de BFLoader. On peut les t&#233;l&#233;charger ici : &lt;a href=&quot;http://www.section5.ch/dsp/icebear/bfloader-1.3beta.tgz&quot; class=&quot;spip_out&quot;&gt;http://www.section5.ch/dsp/icebear/bfloader-1.3beta.tgz&lt;/a&gt;. Il suffit ensuite de faire Extract Here et on obtient un dossier BFLoader. Dans mon cas, son chemin d'acc&#232;s est &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/bfloader/&lt;/i&gt;.&lt;/p&gt; &lt;h3&gt;Compiler les sources&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Avant de modifier quoi que ce soit, on va compiler pour s'assurer que tous nos outils soient corrects. Une fois plac&#233; dans le r&#233;pertoire &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/bfloader/&lt;/i&gt;, on nettoie :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~$ cd Desktop/bfloader/ jfduval@jfduval-desktop:~/Desktop/bfloader$ make clean&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Puis on compile :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~/Desktop/bfloader$ make all&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;En cas d'erreur de compilation avec un message comme de quoi &lt;i class=&quot;spip&quot;&gt;libelf&lt;/i&gt; ne peut pas &#234;tre trouv&#233;, il faut faire (r&#233;f&#233;rence : &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/bfloader/README&lt;/i&gt;) :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/bfloader# apt-get install libelfg0-dev&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Ensuite, il est possible de compiler sans probl&#232;mes.&lt;/p&gt; &lt;h3&gt;Modifier les sources&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Je vais vous expliquer ici comment j'ai modifi&#233; quelques fichiers afin de changer facilement le backend spi_flash.dxe. Premi&#232;rement, afin de m'assurer que je modifiais bien ma version de BFLoader, j'ai ajout&#233; mon nom dans le string s_version de &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/bfloader/main.c&lt;/i&gt;. Ainsi, je peux confirmer que j'ex&#233;cute bien les sources que je modifie :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/bfloader# ./flashload -&#8211;version bfloader/flashloader Version: 1.3beta (c) 2006, 2007 &amp;lt;hackfin@section5.ch&amp;gt;, modified by JFDuval 2009 root@jfduval-desktop:/home/jfduval/Desktop/bfloader#&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Notez l'usage de l'op&#233;rateur ./ qui me permet de lancer la version locale de &lt;i class=&quot;spip&quot;&gt;flashload&lt;/i&gt; et nom celle plac&#233;e dans &lt;i class=&quot;spip&quot;&gt;/apt/&lt;/i&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Ensuite, on peut modifier le champ AFP_Title de &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/bfloader/boards/spi_flash/main.c&lt;/i&gt; ainsi : *AFP_Title = &quot;SPI flash programmer with limited Atmel support&quot; ; Pour compiler un backend, il suffit de se placer dans son r&#233;pertoire et de faire &lt;i class=&quot;spip&quot;&gt;make&lt;/i&gt;. Il est toujours pr&#233;f&#233;rable de faire un &lt;i class=&quot;spip&quot;&gt;make clean&lt;/i&gt; pr&#233;alablement.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;On teste :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='18' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/bfloader#flashload --info &#8211;-backend=spi_flash.dxe Number of devices in JTAG chain: 1 JTAG wait cycles: 0 Detected Device: BF-533(531,532) rev:5 ------------------------------------------------------------------- Undetected Manufacturer ------------------------------------------------------------------- Driver title: SPI flash programmer for BF5[2,3]7 boards Description: &amp;lt;undetected&amp;gt; Manufacturer Code: 0xffffffff Device Code: 0xffffffff Number of sectors: 0x0 Bus width: 0x8 Buffer size: 0x4000 Flash size: 0x0 Error: Flash chip unsupported Possibly you are using the wrong loader or the chip is not recognized.&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On comprend que la modification n'a pas &#233;t&#233; prise en compte, le Driver Title n'est pas celui qu'on vient de modifier. L'explication se trouve dans le fichier &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/bfloader/main.c&lt;/i&gt;, vers la ligne 189. Le chemin de recherche des backends pointe vers la &#171; version APT &#187; de BFLoader et non vers notre version modifi&#233;e. Il faut donc changer cela par : char prefix[FILESTR_SIZE] = &quot;&lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/bfloader/boards/spi_flash/&lt;/i&gt;&quot; ;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Avant de tester, on nettoie (&lt;i class=&quot;spip&quot;&gt;make clean&lt;/i&gt;) le r&#233;pertoire &lt;i class=&quot;spip&quot;&gt;/spi_flash/&lt;/i&gt; et on supprime les ex&#233;cutables .dxe. Apr&#232;s la compilation (&lt;i class=&quot;spip&quot;&gt;make&lt;/i&gt;), on observe que seul bfloader.dxe sera cr&#233;&#233; dans le dossier. Si vous testez, vous obtiendrez :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/bfloader# ./flashload --info &#8211;backend=spi_flash.dxe Number of devices in JTAG chain: 1 JTAG wait cycles: 0 Detecting device... Detected Device: BF-533(531,532) rev:5 Could not open file /home/jfduval/Desktop/bfloader/boards/spi_flash/spi_flash.dxe Error initializing Flash Loader&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Il existe deux mani&#232;res de r&#233;gler ce probl&#232;me. La premi&#232;re est, apr&#232;s chaque nouvelle compilation, de renommer bfloader.exe par spi_flash.dxe. La seconde mani&#232;re, plus &#233;l&#233;gante &#224; mon avis, est d'&#233;diter le fichier &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/bfloader/bfloader.mk&lt;/i&gt;. On remplace :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;NAME = bfloader&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Par :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre' dir='ltr'&gt;ifdef SPI_FLASH NAME = spi_flash else NAME = bfloader endif&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Les d&#233;tails de l'ajout de la d&#233;tection des Flash Atmel ne seront pas expliqu&#233;s ici. Si cet ajout vous int&#233;resse, vous pouvez consulter directement ma version de main.c. Voici un exemple fonctionnel :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='21' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/bfloader# ./flashload --info --backend=spi_flash.dxe --version bfloader/flashloader Version: 1.3beta (c) 2006, 2007 &amp;lt;hackfin@section5.ch&amp;gt;, modified by JFDuval 2009 Number of devices in JTAG chain: 1 JTAG wait cycles: 0 Detecting device... Detected Device: BF-533(531,532) rev:5 ------------------------------------------------------------ ------------------------------------------------------------ Driver title: SPI flash programmer with limited Atmel support Description : AT45DB321D Manufacturer Code: 0x1f Device Code: 0x1 Number of sectors: 0x200 Bus width: 0x8 Buffer size: 0x4000 Flash size: 0x2000000 ------------------------------------------------------------ Verify is on (default).&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;
&lt;h2&gt;Premi&#232;re application : faire clignoter une DEL !&lt;/h2&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;Source principale d'informations : le ICEBear Manual (PDF)&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;L'exemple qui suit se base sur le code Blinky fourni par Section5. Bien que de faire clignoter une DEL puisse sembler tr&#232;s simple, c'est une &#233;tape importante &#224; accomplir. En effet, c'est ce qui nous permettra de tester notre hardware et nos outils.&lt;/p&gt; &lt;h3&gt;Sources de Blinky et montage &#233;lectronique&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;La premi&#232;re &#233;tape est &#233;videmment de se procurer les sources de Blinky. Pour cela, il suffit de les t&#233;l&#233;charger ici : &lt;a href=&quot;http://www.section5.ch/dsp/blackfin/blinky.tgz&quot; class=&quot;spip_out&quot;&gt;http://www.section5.ch/dsp/blackfin/blinky.tgz&lt;/a&gt;. On extraie ensuite le dossier &lt;i class=&quot;spip&quot;&gt;blinky/&lt;/i&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le montage &#233;lectronique est tr&#232;s simple. Il suffit de mettre une DEL, avec une r&#233;sistance de 300 &#224; 500&#937; en s&#233;rie, entre la pin PF2 et la masse. Le boot mode est 00 (sur le Gigamodule, les 2 jumpers sont mis en place).&lt;/p&gt; &lt;h3&gt;Compiler Blinky&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Pour cet exemple, on va compiler Blinky pour une carte Stamp BF533. On commence par se placer dans le bon r&#233;pertoire :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop# cd blinky&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On nettoie et on compile pour le Stamp :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='8' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/blinky# make clean root@jfduval-desktop:/home/jfduval/Desktop/blinky# make BOARD=EZKIT_BF533 bfin-elf-gcc -x assembler-with-cpp -D__ADSPLPBLACKFIN__ -I../include -DBOARD_EZKIT_BF533 -g -c -o crt0.o crt0.asm bfin-elf-gcc -x assembler-with-cpp -D__ADSPLPBLACKFIN__ -I../include -DBOARD_EZKIT_BF533 -g -c -o auxiliaries.o auxiliaries.asm bfin-elf-gcc -I../include -g -DBOARD_EZKIT_BF533 -DBLINK_AND_WAIT -D__ADSPLPBLACKFIN__ -c -o main.o main.c In file included from /usr/lib/gcc/bfin-elf/4.1.2/../../../../bfin-elf/include/cdefBF533.h:24, from main.c:18: /usr/lib/gcc/bfin-elf/4.1.2/../../../../bfin-elf/include/cdefBF532.h:34:21: error: ccblkfn.h: No such file or directory make: *** [main.o] Error 1&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;La compilation a &#233;chou&#233;, il manque un fichier ccblkfn.h. En effectuant une recherche de fichiers, on peut localiser le fichier &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/bfloader/include/ccblkfn.h&lt;/i&gt;. On en fait une copie dans le r&#233;pertoire Include de la suite d'outils :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/bfloader/include# cp ccblkfn.h /usr/bfin-elf/include/&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On r&#233;essaie la compilation :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='8' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/blinky# make clean rm -f *.o blink.dxe root@jfduval-desktop:/home/jfduval/Desktop/blinky# make BOARD=STAMP_BF533 bfin-elf-gcc -x assembler-with-cpp -D__ADSPLPBLACKFIN__ -I../include -DBOARD_STAMP_BF533 -g -c -o crt0.o crt0.asm bfin-elf-gcc -x assembler-with-cpp -D__ADSPLPBLACKFIN__ -I../include -DBOARD_STAMP_BF533 -g -c -o auxiliaries.o auxiliaries.asm bfin-elf-gcc -I../include -g -DBOARD_STAMP_BF533 -DBLINK_AND_WAIT -D__ADSPLPBLACKFIN__ -c -o main.o main.c bfin-elf-ld -T bftiny.x -o blink.dxe crt0.o auxiliaries.o main.o root@jfduval-desktop:/home/jfduval/Desktop/blinky#&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Et &#231;a fonctionne ! Vous avez maintenant une version compil&#233;e de Blinky. Par contre, d&#233;pendant du hardware sur lequel vous travaillez, il est possible que cette version ne soit pas compatible.&lt;/p&gt; &lt;h3&gt;Modifier Blinky&lt;/h3&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Outil int&#233;ressant :&lt;/strong&gt; Pour calculer les param&#232;tres de la RAM, vous pouvez utiliser cette &lt;a href=&quot;http://docs.blackfin.uclinux.org/lib/exe/fetch.php?media=bfin:bfsdccalculation_release_02.xls&quot; class=&quot;spip_out&quot;&gt;feuille de calcul.&lt;/a&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Originalement, les exemples sont faits pour les cartes Stamp, EZKIT et autres. Pour tester Blinky sur le Gigamodule, j'ai effectu&#233; quelques modifications aux sources. Mon projet modifi&#233; se trouve dans le r&#233;pertoire &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/blinky_mod/&lt;/i&gt;. Je ne justifierai pas tous les changements, car ces informations sont intrins&#232;quement li&#233;es au mat&#233;riel que vous utilisez. Le but est plut&#244;t de vous montrer en gros ce qui peut et doit &#234;tre chang&#233;. Je n'ai pas pris le temps d'ajouter une nouvelle carte. J'ai plut&#244;t trafiqu&#233; le EZKIT pour l'adapter au Gigamodule. Les principales modifications visent &#224; changer le projet pour inclure le BF532, ajuster les fr&#233;quences et ajuster les adresses m&#233;moires. Dans ma version, la DEL clignote &#224; l'infini, plut&#244;t qu'un certain nombre de cycles.&lt;/p&gt; &lt;table class=&quot;spip&quot; summary=&quot;&quot;&gt;
&lt;caption&gt;auxiliaries.asm&lt;/caption&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th scope='col'&gt; &lt;strong class=&quot;spip&quot;&gt;Original&lt;/strong&gt; &lt;/th&gt;&lt;th scope='col'&gt; &lt;strong class=&quot;spip&quot;&gt;Modifi&#233;&lt;/strong&gt; &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class=&quot;row_even&quot;&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;#include &amp;lt;defBF533.h&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;#include &amp;lt;defBF532.h&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_odd&quot;&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;p0.l = LO(0xffa00000); p0.h = HI(0xffa00000);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;p0.l = LO(0xffa08000); p0.h = HI(0xffa08000);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class=&quot;spip&quot; summary=&quot;&quot;&gt;
&lt;caption&gt;config.h&lt;/caption&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th scope='col'&gt; &lt;strong class=&quot;spip&quot;&gt;Original&lt;/strong&gt; &lt;/th&gt;&lt;th scope='col'&gt; &lt;strong class=&quot;spip&quot;&gt;Modifi&#233;&lt;/strong&gt; &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class=&quot;row_even&quot;&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre' dir='ltr'&gt;#if defined(BOARD_EZKIT_BF533) #define MASTER_CLOCK 27000000 #define SCLK_DIVIDER 4 #define VCO_MULTIPLIER 16 #define CCLK_DIVIDER 1&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='6' class='spip_cadre' dir='ltr'&gt;#if defined(BOARD_EZKIT_BF533) //Adapted for Gigamodule BF532 #define MASTER_CLOCK 25000000 #define SCLK_DIVIDER 5 #define VCO_MULTIPLIER 12 #define CCLK_DIVIDER 1&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_odd&quot;&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;#define L1_DATA_SRAM_A 0xff800000&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;#define L1_DATA_SRAM_A 0xff804000&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class=&quot;spip&quot; summary=&quot;&quot;&gt;
&lt;caption&gt;crt0.asm&lt;/caption&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th scope='col'&gt; &lt;strong class=&quot;spip&quot;&gt;Original&lt;/strong&gt; &lt;/th&gt;&lt;th scope='col'&gt; &lt;strong class=&quot;spip&quot;&gt;Modifi&#233;&lt;/strong&gt; &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class=&quot;row_even&quot;&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;#include &amp;lt;defBF533.h&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;#include &amp;lt;defBF532.h&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class=&quot;spip&quot; summary=&quot;&quot;&gt;
&lt;caption&gt;main.c&lt;/caption&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th scope='col'&gt; &lt;strong class=&quot;spip&quot;&gt;Original&lt;/strong&gt; &lt;/th&gt;&lt;th scope='col'&gt; &lt;strong class=&quot;spip&quot;&gt;Modifi&#233;&lt;/strong&gt; &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class=&quot;row_even&quot;&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;#include &amp;lt;defBF533.h&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;#include &amp;lt;defBF532.h&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_odd&quot;&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='22' class='spip_cadre' dir='ltr'&gt;#if defined(BOARD_EZKIT_BF533) #define pFlashA_PortB_Dir	(volatile unsigned char *) 0x20270007 #define pFlashA_PortB_Data	(volatile unsigned char *) 0x20270005 void do_blink(void) { int i; // Initialize EBIU async memory banks *pEBIU_AMBCTL0	= 0x7bb07bb0; *pEBIU_AMBCTL1	= 0x7bb07bb0; *pEBIU_AMGCTL	= 0x000f; // init flash a port b direction *pFlashA_PortB_Dir = 0x3f; i = 0; int leds = 0x15; while (i &amp;lt; 40) { *pFlashA_PortB_Data = leds; delay(); leds ^= 0xff; i++; } }&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;td&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='34' class='spip_cadre' dir='ltr'&gt;#if defined(BOARD_EZKIT_BF533) //#define pFlashA_PortB_Dir	(volatile unsigned char *) 0x20270007 //#define pFlashA_PortB_Data	(volatile unsigned char *) 0x20270005 void do_blink(void) { /* int i; // Initialize EBIU async memory banks *pEBIU_AMBCTL0	= 0x7bb07bb0; *pEBIU_AMBCTL1	= 0x7bb07bb0; *pEBIU_AMGCTL	= 0x000f; // init flash a port b direction *pFlashA_PortB_Dir = 0x3f; i = 0; int leds = 0x15; while (i &amp;lt; 40) { *pFlashA_PortB_Data = leds; delay(); leds ^= 0xff; i++; } */ int i; *pFIO_DIR = 0x001c; *pFIO_FLAG_D = 0x0008; *pFIO_INEN = 0x0160; // enable input for buttons i = 0; while(1){ //while (i &amp;lt; 20) { *pFIO_FLAG_T = 0x001c; delay(); //i++; } }&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt; &lt;p class=&quot;spip&quot;&gt;Vous disposez maintenant d'une version adapt&#233;e de Blinky.&lt;/p&gt; &lt;h3&gt;Faire fonctionner Blinky sur le Blackfin&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Sur une machine Ubuntu r&#233;cente, il est fort probable que de faire :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~$ bfin-elf-insight&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;ne produise aucun r&#233;sultat. Il existe un petit probl&#232;me avec Insight, qu'on contournera en effectuant (source : http://www.section5.ch/forum/viewtopic.php ?f=1&amp;t=70) cette commande :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~$ export GDBTK_LIBRARY=/usr/share/insight1.0 jfduval@jfduval-desktop:~$ bfin-elf-insight&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On a maintenant une fen&#234;tre Insight qui s'ouvre. Maintenant que ce probl&#232;me est r&#233;gl&#233;, on peut fermer Insight et suivre la bonne proc&#233;dure. Il faudra refaire cette exportation &#224; chaque fois qu'une nouvelle console est ouverte.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Dans le r&#233;pertoire &lt;i class=&quot;spip&quot;&gt;blinky_mod/&lt;/i&gt;, j'ai cr&#233;&#233; un fichier texte intitul&#233; cfg.gdbinit qui contient les informations suivantes :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='20' class='spip_cadre' dir='ltr'&gt;file blink.dxe target remote 192.168.1.205:2000 set remotetimeout 999999 set remoteaddresssize 32 source /usr/share/gdbscripts/mmr.gdb source /usr/share/gdbscripts/init.gdb source /usr/share/gdbscripts/dump.gdb echo Initializing Target.. set prompt (bfin-jtag-gdb)\ define init_target set *$EBIU_SDGCTL = 0x809110CD set *$EBIU_SDBCTL = 0x0025 set *$EBIU_SDRRC = 0x01CF monitor reset load blink.dxe end&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Ce fichier a &#233;t&#233; con&#231;u en m'inspirant des exemples du ICEBear Manual et des diff&#233;rentes documentations existant sur le ICEBear, BFLoader et Blinky. Ce script permet d'automatiser certaines t&#226;ches r&#233;p&#233;titives.&lt;/p&gt; &lt;h4&gt;ICEBear sur un second PC&lt;/h4&gt; &lt;p class=&quot;spip&quot;&gt;Il existe plusieurs mani&#232;res de proc&#233;der. &#192; l'origine, j'ai &#233;prouv&#233; certains probl&#232;mes de stabilit&#233; avec les pilotes USB de ma machine virtuelle Debian Etch sous VMWare Player. J'ai donc d&#233;cid&#233; de connecter le ICEBear sur un PC Windows XP, qui est reli&#233; au mien par le r&#233;seau local. Ainsi, GDBProxy se connecte sur le second PC et tout fonctionne. Sur le PC XP, il suffit de t&#233;l&#233;charger la suite &#224; l'adresse &lt;a href=&quot;http://www.section5.ch/dsp/icebear/ICEbear-1.21-setup.exe&quot; class=&quot;spip_out&quot;&gt;http://www.section5.ch/dsp/icebear/ICEbear-1.21-setup.exe&lt;/a&gt; et d'installer le tout. On peut ensuite lancer GDBProxy, qui devrait nous afficher la d&#233;tection d'un Device et pr&#233;ciser qu'il attend sur le port 2000. Notez que vous pouvez aussi utiliser les Demos pour tester votre hardware.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;On commence par se placer dans le bon r&#233;pertoire puis on lance Insight (on a d&#233;j&#224; GDBProxy qui attend sur l'autre machine) :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:~# cd /home/jfduval/Desktop/blinky_mod/ root@jfduval-desktop:/home/jfduval/Desktop/blinky_mod# /usr/bin/bfin-elf-insight blink.dxe&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Portez attention au fait que pour lancer Insight je marque explicitement son chemin. Si on oublie ce &#171; d&#233;tail &#187; il est possible que ce soit la version &#181;CLinux/U-Boot de Insight qui ouvre et, m&#234;me si en apparence c'est le m&#234;me logiciel, elle n'est pas compatible avec le ICEBear.&lt;/p&gt; &lt;div class='spip_document_704 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_insight_1.png&quot; type=&quot;image/png&quot; title='PNG - 29.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_insight_1.png' width='520' height='423' alt=&quot;PNG - 29.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;On a maintenant une fen&#234;tre Insight ouverte. On clique sur Run &gt; Connect to target. On configure ensuite le tout ainsi :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Target :&lt;/strong&gt; Remote/TCP&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Hostname :&lt;/strong&gt; 192.168.1.205&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Port :&lt;/strong&gt; 2000&lt;/li&gt;&lt;/ul&gt;
&lt;div class='spip_document_705 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_insight_2.png&quot; type=&quot;image/png&quot; title='PNG - 28.8 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_insight_2.png' width='520' height='421' alt=&quot;PNG - 28.8 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;La ligne de code surlign&#233;e devrait maintenant &#234;tre verte. On fait ensuite Run &gt; Download. Maintenant, si on appuie sur le bouton Continue, le programme devrait rouler et la DEL clignoter ! Pour explorer les possibilit&#233;s d'Insight/GDB, je vous conseille d'exp&#233;rimenter, tout en vous r&#233;f&#233;rant au ICEBear Manual.&lt;/p&gt; &lt;h4&gt;Tout sur la m&#234;me machine&lt;/h4&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Source principale d'informations :&lt;/strong&gt; le ICEBear Manual (PDF), section Application Notes&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Voici une deuxi&#232;me mani&#232;re de proc&#233;der, beaucoup plus simple et &#233;l&#233;gante, &#224; condition de ne pas avoir de probl&#232;me de connexion avec les p&#233;riph&#233;riques USB sur la machine virtuelle. La combinaison Ubuntu 9.04 et VirtualBox semble beaucoup plus stable sur ce point que Debian et VMWare. La premi&#232;re chose &#224; faire est d'ouvrir un second terminal et d'y lancer GDBProxy :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='13' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:~# gdbproxy bfin Remote proxy for GDB, v0.8.6devel, Copyright (C) 1999 Quality Quorum Inc. Blackfin adaption (C) 2005-2008 Martin Strubel &amp;lt;hackfin@section5.ch&amp;gt; GDBproxy comes with ABSOLUTELY NO WARRANTY; for details use `--warranty' option. This is Open Source software. You are welcome to redistribute it under certain conditions. Use the '--copying' option for details. notice: Detected 1 device(s) notice: Setting clock wait cycle to 0 notice: Selecting CPU 0 notice: gdbproxy: waiting on TCP port 2000&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Dans notre terminal principal, on lance Insight :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:~# cd /home/jfduval/Desktop/blinky_mod/ root@jfduval-desktop:/home/jfduval/Desktop/blinky_mod# /usr/bin/bfin-elf-insight blink.dxe&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On a maintenant une fen&#234;tre Insight ouverte. On clique sur Run &gt; Connect to target. On configure ensuite le tout ainsi :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Target :&lt;/strong&gt; Remote/TCP&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Hostname :&lt;/strong&gt;&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; &lt;strong class=&quot;spip&quot;&gt;Port :&lt;/strong&gt; 2000&lt;/li&gt;&lt;/ul&gt;
&lt;div class='spip_document_706 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_insight_local_1.png&quot; type=&quot;image/png&quot; title='PNG - 31 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_insight_local_1.png' width='520' height='426' alt=&quot;PNG - 31 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;La ligne de code surlign&#233;e devrait maintenant &#234;tre verte. On fait ensuite Run &gt; Download. Maintenant, si on appuie sur le bouton Continue, le programme devrait rouler et la DEL clignoter !&lt;/p&gt; &lt;h2&gt;U-Boot et outils associ&#233;s&lt;/h2&gt;
&lt;h3&gt;Installation de la toolchain&lt;/h3&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;Source principale d'informations : le &lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php-&amp;gt;http://docs.blackfin.uclinux.org/doku.php&quot; class=&quot;spip_out&quot;&gt;Wiki Blackfin Koop&lt;/a&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Il faut commencer par ajouter le r&#233;pertoire des sources de &#181;CLinux et de la toolchain Blackfin &#224; notre chemin de recherche de apt-get :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:/etc/apt/sources.list.d$ sudo 'echo &#8220;deb http://download.analog.com/27516/distros/debian stable main&#8221; &amp;gt; /etc/apt/sources.list.d/blackfin.sources.list' sudo: echo &#8220;deb http://download.analog.com/27516/distros/debian stable main&#8221; &amp;gt; /etc/apt/sources.list.d/blackfin.sources.list: command not found&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;N'ayant pas eu de succ&#232;s, j'ai cr&#233;&#233; le fichier blackfin.sources.list (simple fichier texte cr&#233;&#233; avec gedit) sur mon bureau et y ai mis la ligne &lt;i class=&quot;spip&quot;&gt; deb http://download.analog.com/27516/distros/debian stable main&lt;/i&gt;, puis je l'ai envoy&#233; &#224; la bonne place :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~/Desktop$ sudo mv blackfin.sourpour finces.list /etc/apt/sources.list.d/&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On fait un &lt;i class=&quot;spip&quot;&gt;sudo apt-get update&lt;/i&gt; pour tenir compte des derni&#232;res modifications puis, toujours en suivant les informations du wiki (&lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php?id=toolchain:installing&quot; class=&quot;spip_out&quot;&gt;http://docs.blackfin.uclinux.org/doku.php ?id=toolchain :installing&lt;/a&gt;) on installe le tout :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;jfduval@jfduval-desktop:~/Desktop$ sudo apt-get install blackfin-toolchain-uclinux blackfin-toolchain-linux-uclibc&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Vous poss&#233;dez maintenant tous les outils n&#233;cessaires pour compiler U-Boot. Avant de les utiliser, il ne reste qu'une seule &#233;tape : ajuster la variable d'environnement PATH. En se basant sur &lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php?id=toolchain:installing&quot; class=&quot;spip_out&quot;&gt;http://docs.blackfin.uclinux.org/doku.php ?id=toolchain :installing&lt;/a&gt; on fait :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5# export PATH=$PATH:/opt/uClinux/bfin-uclinux/bin:/opt/uClinux/bfin-linux-uclibc/bin&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;
&lt;h3&gt;Sources de U-Boot&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;T&#233;l&#233;charger les sources de U-Boot ici : &lt;a href=&quot;http://blackfin.uclinux.org/gf/project/u-boot/frs&quot; class=&quot;spip_out&quot;&gt;http://blackfin.uclinux.org/gf/project/u-boot/frs&lt;/a&gt;
On fait clic droit et Extract Here, puis on a un dossier U-Boot avec tous les fichiers n&#233;cessaires. Pour ma part, j'ai utilis&#233; la derni&#232;re version stable, soit la 1.1.6-2008R1.5.&lt;/p&gt; &lt;h3&gt;Compiler U-Boot&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Pour compiler U-Boot, il est conseill&#233; de travailler en root pour &#233;viter les probl&#232;mes de permissions. Pour commencer, il faut se placer dans le bon r&#233;pertoire (U-Boot) :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval# cd Desktop/u-boot-1.1.6-2008R1.5 root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5#&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Il faut maintenant configurer le projet. Pour fin d'exemple, nous allons compiler pour un BF533 Stamp :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5# make bf533-stamp_config Configuring for bf533-stamp board... root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5#&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On peut maintenant nettoyer et compiler :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5# make clean root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5# make&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Si vous obtenez une erreur disant gawk not found, il suffit d'installer gawk :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5# apt-get install gawk&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Si la compilation est un succ&#232;s, un fichier u-boot.ldr sera cr&#233;&#233; dans le r&#233;pertoire principal. C'est ce fichier que nous utiliserons pour programmer le Blackfin.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre' dir='ltr'&gt;[...] Creating LDR u-boot.ldr &#8230; Adding DXE 'u-boot' ... [jump block] [ELF block: 119104 @ 0x01FC0000] [ELF block: 44 @ 0xFFA0000C] [ELF block: 24972 @ 0x01FDD16C] OK! Done! bfin-uclinux-objcopy --gap-fill=0xff -O srec u-boot.ldr u-boot.ldr.srec -I binary bfin-uclinux-objcopy --gap-fill=0xff -O ihex u-boot.ldr u-boot.ldr.hex -I binary root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5#&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;
&lt;h3&gt;Modifier U-Boot&lt;/h3&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Source principale d'informations :&lt;/strong&gt; la section &lt;a href=&quot;http://www.aqra.ca/[http:/docs.blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:porting&quot; class=&quot;spip_out&quot;&gt;Porting U-Boot&lt;/a&gt; du Wiki Blackfin Koop&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Cette section ne d&#233;crira pas en d&#233;tail la modification des fichiers de U-Boot, la documentation existante &#233;tant assez compl&#232;te. Je vais plut&#244;t vous pointer vers les bonnes r&#233;f&#233;rences et vous montrer o&#249; trouver les fichiers &#224; modifier.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour savoir comment modifier le makefile, le fichier de configuration et le r&#233;pertoire de projet, se r&#233;f&#233;rer &#224; la section &lt;i class=&quot;spip&quot;&gt;Porting U-Boot du wiki&lt;/i&gt;. Bien que les informations sur le wiki soient assez claires, je consid&#232;re que ce qu'il manque le plus c'est une liste des modifications possibles. Pour conna&#238;tre ces commandes, il suffit de regarder le fichier README du r&#233;pertoire U-Boot. On y trouve beaucoup d'informations utiles.&lt;/p&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Outil int&#233;ressant :&lt;/strong&gt; Pour calculer les param&#232;tres de la RAM, vous pouvez utiliser cette &lt;a href=&quot;http://docs.blackfin.uclinux.org/lib/exe/fetch.php?media=bfin:bfsdccalculation_release_02.xls&quot; class=&quot;spip_out&quot;&gt;feuille de calcul.&lt;/a&gt;&lt;/div&gt;
&lt;h4&gt;R&#233;pertoires importants&lt;/h4&gt; &lt;p class=&quot;spip&quot;&gt;La version stable actuelle de U-Boot est 1.1.6-2008R1.5. Tout le d&#233;veloppement a &#233;t&#233; effectu&#233; avec cette version. Plusieurs essais ont &#233;t&#233; faits afin de porter U-Boot correctement, j'ai donc cr&#233;&#233; quelques dossiers de projet. Le projet que j'utilise actuellement est le bf532-giga2. La liste des chemins ci-dessous est donc adapt&#233;e &#224; ma version. Le plus simple est de partir d'un projet similaire et de modifier ses sources. Dans mon cas, je me suis bas&#233; sur le Stamp BF533, le Blackfin One, le Minotaur BF537 et le SRV-1.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;U-Boot :&lt;/i&gt; &lt;/strong&gt;&lt;i class=&quot;spip&quot;&gt; /home/jfduval/Desktop/u-boot-1.1.6-2008R1.5_Giga/&lt;/i&gt; : R&#233;pertoire principal de U-Boot. C'est une copie du r&#233;pertoire originale o&#249; se trouvent mes fichiers modifi&#233;s.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;board :&lt;/i&gt; &lt;/strong&gt; &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5_Giga/board/&lt;/i&gt; (dans notre cas, on utilise &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5_Giga/board/bf532-giga2/&lt;/i&gt;) : Fichiers propres &#224; notre projet.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;configs :&lt;/i&gt; &lt;/strong&gt; &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5_Giga/include/configs/&lt;/i&gt; : Fichier de configuration de notre projet (bf532-giga2.h)&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;gdbscripts :&lt;/i&gt; &lt;/strong&gt; &lt;i class=&quot;spip&quot;&gt;/usr/share/gdbscripts&lt;/i&gt; : Scripts pour GDBProxy&lt;/p&gt; &lt;h3&gt;Atmel Dataflash : outil de conversion&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Pour que le Blackfin puisse booter depuis une Flash SPI, il faut qu'elle respecte certains crit&#232;res : adresses de 8, 16 ou 24bits et pages de taille &#171; puissance de 2 &#187;. Ce dernier point est important dans notre cas, car par d&#233;faut les Dataflash utilisent des pages de 528bytes (et non de 512). La datasheet du AT45DB321D explique qu'il est possible de changer la Flash en mode 512bytes en suivant une proc&#233;dure somme toute assez simple. Devant l'absence d'outil dans BFLoader et dans U-Boot pour effectuer ce changement, j'ai &#233;crit la fonction n&#233;cessaire.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le fichier que j'ai modifi&#233; est &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5_Giga/board/bf532-giga2/spi_flash.c&lt;/i&gt;. Dans la fonction eeprom_info(void), tout juste avant SPI_DEINIT() ; il faut ajouter la ligne suivante :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;atmel_po2(flash.sector_size); //Atmel Dataflash vs Power-of-Two&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Ensuite, apr&#232;s la fonction eeprom_info(void) on ajoute cette fonction :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='41' class='spip_cadre' dir='ltr'&gt;//ATMEL Spi Flash Power-of-Two Tool (JFDuval, IntRoLab, 2009) int atmel_po2(int size) { char InData; if(size == 528) { //It's in Dataflash, we can change it printf(&quot;Your FLASH uses 528 bytes pages. It can be converted to 512 bytes\n&quot; &quot;pages. Important: conversion is PERMANENT (no come back). Want to\n&quot; &quot;change it to 512? [y/n]&quot;); InData = getc(); if((InData == 'y')||(InData == 'Y')) { printf(&quot;\nRunning conversion tool...\n&quot;); //Open SPI SPI_ON(); //Send the 4 configuration bytes printf(&quot;Byte: 0x3D\n&quot;); spi_write_read_byte(0x3D); printf(&quot;Byte: 0x2A\n&quot;); spi_write_read_byte(0x2A); printf(&quot;Byte: 0x80\n&quot;); spi_write_read_byte(0x80); printf(&quot;Byte: 0xA6\n&quot;); spi_write_read_byte(0xA6); printf(&quot;Wait a moment than cycle power.\n&quot;); //Close SPI SPI_OFF(); } else printf(&quot;\nNo modifications will be done.\n&quot;); } else if(size == 512) { printf(&quot;This FLASH is in Power-of-Two mode.\n&quot;); } }&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Pour l'utiliser, il suffit de faire rouler U-Boot et de faire la commande &lt;i class=&quot;spip&quot;&gt;eeprom info&lt;/i&gt; (voir &lt;i class=&quot;spip&quot;&gt;Utiliser U-Boot : quelques commandes&lt;/i&gt;). Les instructions seront alors fournies pour modifier correctement votre Flash. &lt;strong class=&quot;spip&quot;&gt;Attention :&lt;/strong&gt; le changement est permanent !&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Exemple de fonctionnement (mon prototype est d&#233;j&#224; en mode puissance de 2) :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre' dir='ltr'&gt;bfin-giga&amp;gt;eeprom info SPI Device: AT45DB321x 0x1F (Atmel) 0x27 0x01 Parameters: num sectors = 8192, sector size = 512, write size = 512 Flash Size: 32 mbit (4 mbyte) Status: 0xB5 This FLASH is in Power-of-Two mode. bfin-giga&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Cet outil n'est seulement disponible que si vous modifiez votre U-Boot avec les changements d&#233;crits dans cette section ou que vous travaillez avec mes sources. Il est possible que cet outil soit ajout&#233; aux prochaines versions de U-Boot, mais ce n'est pas encore le cas.&lt;/p&gt; &lt;h2&gt;Utiliser U-Boot sur votre Blackfin&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Maintenant que vous disposez d'une version compil&#233;e de U-Boot, il est temps de programmer un Blackfin avec ce code et de tester en conditions r&#233;elles si le tout est fonctionnel.&lt;/p&gt; &lt;h3&gt;Charger U-Boot en m&#233;moire&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Normalement, le programme BFLoader permet de charger le .ldr directement dans la Flash, qu'elle soit parall&#232;le (sur le bus m&#233;moire) ou SPI. Par contre, il s'av&#232;re que le driver SPI ne supporte que les Flash ST et compatibles, qui utilisent un protocole standard et des pages de 512 bytes. La carte Gigamodule disposant d'une Flash Atmel qui utilise le protocole Dataflash (commandes plus &#233;volu&#233;es et pages de 528 bytes). On va donc agir comme pour Blinky, on va charger U-Boot dans la RAM, en utilisant le ICEBear et GDBProxy/Insight, et l'ex&#233;cuter. U-Boot &#233;tant capable de s'inscrire en m&#233;moire, nous pourrons atteindre notre but malgr&#233; cet obstacle.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Note :&lt;/strong&gt; plut&#244;t que de r&#233;p&#233;ter des informations, je vous r&#233;f&#232;re aux sections &lt;i class=&quot;spip&quot;&gt;Atmel SPI Flash&lt;/i&gt; et &lt;i class=&quot;spip&quot;&gt;Faire fonctionner Blinky sur le Blackfin&lt;/i&gt;. La d&#233;marche pour U-Boot &#233;tant tr&#232;s semblable &#224; celle pour Blinky, je ne noterai ici que les diff&#233;rences.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Premi&#232;rement, il faut faire tourner GDBProxy avec le JTAG connect&#233; sur la carte. Ensuite, il faut connecter la carte au PC par son interface s&#233;rie. Sur le Gigamodule, on utilise le connecteur USB car un circuit de conversion S&#233;rie&lt;&gt;USB (FT232) est pr&#233;sent sur la carte. On ouvre un terminal RS-232 (voir la section Console RS-232 pour d&#233;tails).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Comme pour Blinky, un fichier de scripts GDB est utilis&#233; afin d'automatiser certaines t&#226;ches. Mon fichier &lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5_Giga/cfg.gdbinit&lt;/i&gt; contient :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='19' class='spip_cadre' dir='ltr'&gt;target remote :2000 set remotetimeout 999999 set remoteaddresssize 32 source /usr/share/gdbscripts/mmr.gdb source /usr/share/gdbscripts/init.gdb source /usr/share/gdbscripts/dump.gdb echo Initializing Target.. set prompt (bfin-jtag-gdb)\ monitor reset set *$EBIU_SDGCTL = 0x809110CD set *$EBIU_SDBCTL = 0x0025 set *$EBIU_SDRRC = 0x01CF load u-boot restore u-boot.bin binary 0x100000&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On se place dans le bon dossier et on lance Insight :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop# cd u-boot-1.1.6-2008R1.5_Giga/ root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5_Giga# /usr/bin/bfin-elf-insight u-boot.ldr&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Je rappelle qu'il est important de sp&#233;cifier le chemin de l'ex&#233;cutable Insight afin que ce soit la version Section5 et non celle &#181;CLinux qui charge !&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Maintenant qu'Insight est lanc&#233;, on peut faire File &gt; Source... &gt; cfg.gdbinit &gt; Open. Quand les ic&#244;nes du d&#233;bogueur deviendront color&#233;es, c'est pr&#234;t &#224; &#234;tre utilis&#233;. Notez que si vous utilisez une connexion r&#233;seau avec un autre PC, le transfert peut prendre quelques minutes. On appuie ensuite sur Continue. Dans la fen&#234;tre de terminal, on devrait lire quelque chose du genre :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='57' class='spip_cadre' dir='ltr'&gt;Early:start.S: Init Registers Early:start.S: Relocate Early:start.S: Lower to 15 Early: NOP Slide Early: Board init flash Early: Init CPLB tables Early: Exceptions setup Early: Turn on ICACHE Early: Turn on DCACHE Early: Init global data Early: IRQ init Early: Environment init Early: Baudrate init Early: Serial init Early: Console init flash Early: End of early debugging U-Boot 1.1.6 (ADI-2008R1.5) (Jul 10 2009 - 17:23:34) CPU: ADSP bf532-0.5 (Detected Rev: 0.5) Board: IntRoLab BF532 GigaModule v2 Clock: VCO: 300 MHz, Core: 300 MHz, System: 60 MHz RAM: Serial Port initialized with Baud rate = 115200 SDRAM attributes: tRCD 3 SCLK Cycles,tRP 3 SCLK Cycles,tRAS 6 SCLK CyclestWR 2 SCLK Cycles,CAS Latency 3 SCLK cycles SDRAM Begin: 0x0 Bank size = 64 MB 64 MB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial gd: 3f9c000 |-flags: 3 |-board_type: 0 |-baudrate: 115200 |-have_console: 1 |-ram_size: 0 |-reloc_off: 0 |-env_addr: 3fa000c |-env_valid: 1 |-jt(3fb0168): 3fc5d50 \-bd: 3f9c028 |-bi_baudrate: 1c200 |-bi_ip_addr: 0 |-bi_enetaddr: 0 0 0 0 0 0 |-bi_boot_params: 0 |-bi_memstart: 0 |-bi_memsize: 4000000 |-bi_flashstart: 0 |-bi_flashsize: 0 \-bi_flashoffset: 0 bfin-giga&amp;gt;#&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Et voil&#224; ! On a maintenant U-Boot qui tourne en RAM sur notre propre carte. Dans les prochaines sections, on verra comment utiliser U-Boot et comment l'&#233;crire dans une Flash SPI.&lt;/p&gt; &lt;h3&gt;Console RS-232&lt;/h3&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Source principale d'informations :&lt;/strong&gt; la section &lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:serial_port_loading_files&quot; class=&quot;spip_out&quot;&gt;Loading Files With U-Boot via The Serial Port&lt;/a&gt;
du Wiki U-Boot &lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;La carte Blackfin Gigamodule &#233;tant munie d'un convertisseur S&#233;rie&lt;&gt;USB FT232, il faut connecter le c&#226;ble USB &#224; un PC. Les drivers du FT232 sont disponibles sur le &lt;a href=&quot;http://www.ftdichip.com/Drivers/VCP.htm&quot; class=&quot;spip_out&quot;&gt;site de FTDI&lt;/a&gt;. Notez que dans les versions r&#233;centes de Linux, les drivers sont d&#233;j&#224; inclus. Il faut ensuite configurer le port s&#233;rie. Pour le Gigamodule, les valeurs ont &#233;t&#233; chang&#233;es dans les sources et sont : 115200 bits/s, 8 bits, No parity, 1 Stop Bit, No Flow Control. Par d&#233;faut, c'est : 57600 bits/s, 8 bits, No parity, 1 Stop Bit, No Flow Control.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Lors du choix d'un programme de terminal, il est important de s'assurer qu'il permette le transfert de fichiers avec le protocole Y-Modem. Il y a deux mani&#232;res de travailler. Vous pouvez ouvrir le terminal sous votre machine h&#244;te, typiquement sous Windows, ou vous pouvez l'ouvrir dans la machine virtuelle, Ubuntu dans notre cas.&lt;/p&gt; &lt;h4&gt;Windows&lt;/h4&gt; &lt;p class=&quot;spip&quot;&gt;Dans mon cas, Hyperterminal a &#233;t&#233; utilis&#233;. Notez qu'il suffit de copier l'ex&#233;cutable et le .dll d'un PC sous XP pour l'avoir sous Vista.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Th&#233;oriquement, U-Boot permet le transfert de fichier par 2 protocoles : Kermit et Y-Modem. M&#234;me si Hyperterminal supporte les 2, il y a un probl&#232;me avec Kermit, les donn&#233;es transf&#233;r&#233;es ne sont pas bonnes. Utiliser Y-Modem permet un bon transfert de l'image. Pour transf&#233;rer une image, il suffit de faire Transfer &gt; Send file... &gt; Filename = u-boot.ldr Protocole = Ymodem &gt; Send.&lt;/p&gt; &lt;h4&gt;Ubuntu 9.04&lt;/h4&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Source principale d'informations :&lt;/strong&gt; les sections &lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:serial_port_loading_files&quot; class=&quot;spip_out&quot;&gt;Loading Files With U-Boot via The Serial Port&lt;/a&gt;
et &lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php?id=terminal_programs&quot; class=&quot;spip_out&quot;&gt;Terminal Programs&lt;/a&gt; du Wiki&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Pour utiliser Ymodem, le Wiki U-Boot recommande l'usage de Minicom. Les informations de la section Terminal Programs d&#233;crivent bien comment l'installer et le configurer. J'ai reproduit ce qui est expliqu&#233; l&#224;, &#224; la diff&#233;rence pr&#232;s que mon port s&#233;rie, obtenu par le FT232, est ttyUSB0. Je vous pr&#233;viens, pour quelqu'un habitu&#233; aux programmes modernes et aux GUI, Minicom est un cauchemar !&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Une fois le programme install&#233; et configur&#233;, on le lance ainsi :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='10' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval# minicom [?3;4l Welcome to minicom 2.3 OPTIONS: I18n Compiled on Oct 24 2008, 06:37:44. Port /dev/ttyUSB0 Press CTRL-A Z for help on special keys&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Si on fait tourner U-Boot en RAM, on obtient bien notre sortie terminale. On doit ensuite appeler &lt;i class=&quot;spip&quot;&gt;loady&lt;/i&gt;. Pour envoyer un fichier avec Minicom, il faut faire 'Ctrl+A', puis appuyer sur 'S' et choisir ymodem. Ensuite, avec les fl&#232;ches on place le curseur sur Goto et on copie le chemin de notre fichier (&lt;i class=&quot;spip&quot;&gt;/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5_Giga/&lt;/i&gt; dans mon cas) puis on met le curseur sur Okay et on appui sur Enter.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Bien que la &#171; fen&#234;tre &#187; de transfert Ymodem apparaissait bien, je n'avais aucun signe de fonctionnement, outre la DEL de r&#233;ception du FT232 qui clignotait une fois aux quelques secondes. Arr&#234;ter la commande m'a donn&#233; plus d'informations, Minicom avait &#233;chou&#233; une vingtaine de tentatives de connexion. Apr&#232;s une courte recherche sur Google, j'ai trouv&#233; &lt;a href=&quot;http://axixmiqui.wordpress.com/2008/05/16/minicom-ymodem-issue/&quot; class=&quot;spip_out&quot;&gt;un site&lt;/a&gt; qui expliquait mon probl&#232;me. J'ai suivi leurs instructions et j'ai install&#233; &lt;i class=&quot;spip&quot;&gt;lrzsz&lt;/i&gt;. Une fois ce programme install&#233;, mon port s&#233;rie est devenu fou, il y avait un transfert incessant de donn&#233;es plus ou moins lisibles... Apr&#232;s avoir red&#233;marr&#233; mon syst&#232;me, le probl&#232;me &#233;tait r&#233;gl&#233; et Minicom permet le transfert d'une image.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voici &#224; quoi ressemble la &#171; fen&#234;tre &#187; d'un transfert r&#233;ussi :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='10' class='spip_cadre' dir='ltr'&gt;+-----------[ymodem upload - Press CTRL-C to quit]------------+ |Retry 0: NAK on sector | |Bytes Sent: 58240 BPS:3963 | |Sending: | |Ymodem sectors/kbytes sent: 0/ 0k | |Transfer complete | | | | READY: press any key to continue... | +-------------------------------------------------------------+&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Apr&#232;s avoir appuy&#233; sur une touche, on peut lire :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre' dir='ltr'&gt;bfin-giga&amp;gt;loady ## Ready for binary (ymodem) download to 0x01000000 at 115200 bps... C## Total Size = 0x0000e334 = 58164 Bytes bfin-giga&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Bref, le transfert semble avoir bien fonctionn&#233;. Dans la section &lt;i class=&quot;spip&quot;&gt;&#201;crire l'image U-Boot en Flash&lt;/i&gt; je d&#233;cris quelques essais qui permettent de confirmer le bon transfert des fichiers.&lt;/p&gt; &lt;h3&gt;Utiliser U-Boot : quelques commandes&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Voici quelques commandes tr&#232;s utiles :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;bfin-giga&gt; help :&lt;/i&gt; &lt;/strong&gt; Affiche toutes les commandes incluses dans votre version de U-Boot. Pour en ajouter/enlever, il suffit de modifier bf532-giga2.h en se basant sur le Readme.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;bfin-giga&gt; bdinfo :&lt;/i&gt; &lt;/strong&gt; Affiche les propri&#233;t&#233;s du syst&#232;me (fr&#233;quences, versions, baudrate, etc.)&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;bfin-giga&gt; eeprom info :&lt;/i&gt; &lt;/strong&gt; Informations sur la Flash. C'est dans ce mode qu'on peut transformer une Flash Atmel en mode Puissance de 2. Note : dans votre version uniquement, mon code n'est pas encore inclus dans le release U-Boot.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;bfin-giga&gt; md.b :&lt;/i&gt; &lt;/strong&gt; Memory Display. Exemple : md.b 0x1000 0x1000 affiche la RAM de l'adresse 0x1000 et 0x1000 de long. md.b StartAdress Length&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;bfin-giga&gt; mw.b :&lt;/i&gt; &lt;/strong&gt; Memory Write. Exemple : mw.b 0x1000000 0xFF 0x10000 &#233;crit des 0xFF &#224; l'adresse 0x1000000 pendant 0x10000. mw.b StartAdress Value Length.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;bfin-giga&gt; eeprom write :&lt;/i&gt; &lt;/strong&gt; Eeprom Write. Exemple : eeprom write 0x1000000 0x0 0xD5B0 &#233;crit l'adresse 0x1000000 de la RAM dans la Flash &#224; l'adresse 0 pendant 0xD5B0 bytes. eeprom write RamStartAddress FlashStartAddress Length&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;bfin-giga&gt; eeprom read :&lt;/i&gt; &lt;/strong&gt; Eeprom Read. Exemple : eeprom read 0x1000000 0x0 0xD5B0 &#233;crit &#224; l'adresse 0x1000000 de la RAM le contenu de la Flash &#224; l'adresse 0 pendant 0xD5B0 bytes. eeprom read RamStartAddress FlashStartAddress Length&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;bfin-giga&gt; loady :&lt;/i&gt; &lt;/strong&gt; Load file with Y-Modem Protocol. Exemple : envoyer la commande loady, puis, dans Hyperterminal Transfert &gt; Send File... &gt; Filename : u-boot.ldr Protocol : Ymodem &gt; OK. Par d&#233;faut, le fichier sera charg&#233; en RAM &#224; l'adresse 0x1000000. Il ne reste ensuite qu'&#224; &#233;crire cette image &#224; l'adresse 0 de la Flash pour booter dessus.&lt;/p&gt; &lt;h3&gt;Booter sur une Flash SPI&lt;/h3&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;Source principale d'informations : les section &lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:serial-flash-eeprom&quot; class=&quot;spip_out&quot;&gt;Serial NOR Flash and U-Boot&lt;/a&gt; et &lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:serial_port_loading_files&quot; class=&quot;spip_out&quot;&gt;Loading Files With U-Boot via The Serial Port &lt;/a&gt; du Wiki U-Boot&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;La m&#233;moire Flash de la carte Gigamodule est une Atmel Dataflash AT45DB321D de 32Mbit. On veut pouvoir booter depuis celle-ci. La premi&#232;re &#233;tape, en se r&#233;f&#233;rant &#224; la datasheet du BF532, est de configurer le bon boot-mode. Pour booter sur un esclave SPI, il faut se placer en mode 11 (sur le Gigamodule, cela &#233;quivaut &#224; enlever les deux jumpers).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;On charge ensuite U-Boot en RAM et on le fait tourner (voir &lt;i class=&quot;spip&quot;&gt;Charger U-Boot en m&#233;moire&lt;/i&gt;). On peut confirmer que notre m&#233;moire est bien d&#233;tect&#233;e avec la commande &lt;i class=&quot;spip&quot;&gt;eeprom info&lt;/i&gt;. On va donc charger une image de U-Boot dans la RAM.&lt;/p&gt; &lt;h4&gt;Charger l'image U-Boot en RAM&lt;/h4&gt; &lt;p class=&quot;spip&quot;&gt;Tel qu'expliqu&#233; ailleurs dans ce document, j'ai eu certains probl&#232;mes avec le transfert de fichiers avec le protocole Kermit et Hyperterminal. Je n'ai pas cherch&#233; &#224; trouver si c'&#233;tait U-Boot ou Hyperterminal qui causait le probl&#232;me car utiliser Ymodem m'a permis de transmettre correctement mon image, r&#233;glant ainsi mon probl&#232;me. Dans le terminal, on appelle la commande &lt;i class=&quot;spip&quot;&gt;loady&lt;/i&gt; :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;bfin-giga&amp;gt;loady ## Ready for binary (ymodem) download to 0x01000000 at 115200 bps...&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Dans notre programme de terminal, on envoie notre fichier u-boot.ldr par le protocole Ymodem :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'&gt;CCCxyzModem - CRC mode, 2(SOH)/57(STX)/0(CAN) packets, 5 retries ## Total Size = 0x0000e334 = 58164 Bytes bfin-giga&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Le transfert est un succ&#232;s. La taille est 0xE334 : nous utiliserons cette valeur bient&#244;t. L'image de U-Boot est donc pr&#233;sente en RAM, &#224; l'adresse 0x01000000. Il est possible de v&#233;rifier facilement la r&#233;ussite de cette &#233;tape en affichant le contenu de la RAM :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='17' class='spip_cadre' dir='ltr'&gt;bfin-giga&amp;gt;md.b 0x1000000 0x100 01000000: 00 80 a0 ff 2c 03 00 00 08 00 66 01 c0 05 50 01 ....,.....f...P. 01000010: 51 01 52 01 53 01 58 01 59 01 5a 01 5b 01 5c 01 Q.R.S.X.Y.Z.[.\. 01000020: 5d 01 5e 01 5f 01 54 01 55 01 56 01 57 01 60 01 ].^._.T.U.V.W.`. 01000030: 61 01 4a e1 c0 ff 62 01 63 01 0a e1 24 04 50 95 a.J...b.c...$.P. 01000040: 21 e1 e1 00 00 48 49 4f 00 60 08 07 49 e1 c0 ff !....HIO.`..I... 01000050: 08 60 10 97 09 e1 0c 04 18 60 08 97 30 00 00 00 .`.......`..0... 01000060: 00 00 24 00 40 00 01 0c 1c 14 48 95 38 4a 08 97 ..$.@.....H.8J.. 01000070: 30 00 00 00 00 00 24 00 40 00 08 61 e2 6e 10 97 0.....$.@..a.n.. 01000080: 00 60 22 6c 10 97 30 00 00 00 00 00 24 00 40 00 .`&quot;l..0.....$.@. 01000090: 48 95 38 4c 08 97 30 00 00 00 00 00 24 00 40 00 H.8L..0.....$.@. 010000a0: 4a e1 c0 ff 20 e1 53 00 0a e1 00 04 10 97 4a e1 J... .S.......J. 010000b0: c0 ff 0a e1 14 04 50 95 30 48 fa 1f 4a e1 c0 ff ......P.0H..J... 010000c0: 0a e1 14 05 20 60 10 97 4a e1 c0 ff 20 e1 42 00 .... `..J... .B. 010000d0: 0a e1 00 04 10 97 4a e1 c0 ff 0a e1 14 04 50 95 ......J.......P. 010000e0: 30 48 fa 1f 4a e1 c0 ff 0a e1 24 01 08 60 10 93 0H..J.....$..`.. 010000f0: 4a e1 c0 ff 20 e1 4c 00 0a e1 00 04 10 97 4a e1 J... .L.......J.&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Que signifient ces informations ? Ce qu'on vient de lire est l'en-t&#234;te de l'image U-Boot, un header de 10 octets, ainsi que les donn&#233;es de l'image. Ce sont les premi&#232;res donn&#233;es que va lire le Blackfin quand il va booter sur la Flash SPI. Selon les informations de l'&lt;a href=&quot;http://www.analog.com/static/imported-files/application_notes/EE-240_Rev4.pdf&quot; class=&quot;spip_out&quot;&gt;Application Note EE-240 ADSP-BF533 Blackfin&#174; Booting Process&lt;/a&gt; on peut d&#233;couper le paquet des 10 premiers octets ainsi : [00 80 a0 ff] [2c 03 00 00] [08 00]. Cela repr&#233;sente en fait [Adress (4bytes)][Count (4bytes)][Flag (2bytes)]. Si vous allez voir dans le datasheet l'organisation m&#233;moire du BF532 vous constaterez que 0xFFA08000 correspond au d&#233;but de la m&#233;moire instructions : on va donc transf&#233;rer les donn&#233;es &#224; la bonne place pour que le code s'ex&#233;cute.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si vous disposez d'un appareil capable d'analyser un bus SPI, comme un oscilloscope Agilent MSO6034A avec les bonnes options, vous pourrez lire ce header de 10 bytes quand le Blackfin d&#233;marre, confirmant ainsi le bon fonctionnement de votre syst&#232;me.&lt;/p&gt; &lt;h4&gt;&#201;crire l'image U-Boot en Flash&lt;/h4&gt; &lt;p class=&quot;spip&quot;&gt;On va maintenant &#233;crire dans la Flash SPI l'image de U-Boot que l'on vient de charger en RAM. Pour ce faire, utilise la fonction &lt;i class=&quot;spip&quot;&gt;eeprom write&lt;/i&gt; :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre' dir='ltr'&gt;bfin-giga&amp;gt;eeprom write 0x1000000 0x0 0x0000e334 EEPROM @0x0 write: addr 01000000 off 0000 count 58164 ... .................... ................................................................................ ................................................................................ ................................................done bfin-giga&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Et voil&#224;, l'image est transf&#233;r&#233;e dans la m&#233;moire Flash. &#192; condition que notre boot-mode soit bien 11, le Blackfin devrait maintenant booter de sa Flash sans probl&#232;me.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Vous voulez confirmer que le transfert s'est bien d&#233;roul&#233;, que l'image est bien &#233;crite dans la Flash ? On commence par effacer (bref, &#224; remplacer par une valeur connue) une portion de la RAM, puis on l'affiche pour s'assurer que c'est correct :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='19' class='spip_cadre' dir='ltr'&gt;bfin-giga&amp;gt;mw.b 0x1000000 0xFD 0x1000 bfin-giga&amp;gt;md.b 0x1000000 0x100 01000000: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 01000010: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 01000020: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 01000030: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 01000040: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 01000050: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 01000060: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 01000070: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 01000080: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 01000090: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 010000a0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 010000b0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 010000c0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 010000d0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 010000e0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ 010000f0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ................ bfin-giga&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On constate bien que toutes les donn&#233;es valent 0xFD. On va maintenant lire la Flash et &#233;crire ce qu'on lit par-dessus tous ces 0xFD :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='21' class='spip_cadre' dir='ltr'&gt;bfin-giga&amp;gt;eeprom read 0x1000000 0x0 0x100 EEPROM @0x0 read: addr 01000000 off 0000 count 256 ... done bfin-giga&amp;gt;md.b 0x1000000 0x100 01000000: 00 80 a0 ff 2c 03 00 00 08 00 66 01 c0 05 50 01 ....,.....f...P. 01000010: 51 01 52 01 53 01 58 01 59 01 5a 01 5b 01 5c 01 Q.R.S.X.Y.Z.[.\. 01000020: 5d 01 5e 01 5f 01 54 01 55 01 56 01 57 01 60 01 ].^._.T.U.V.W.`. 01000030: 61 01 4a e1 c0 ff 62 01 63 01 0a e1 24 04 50 95 a.J...b.c...$.P. 01000040: 21 e1 e1 00 00 48 49 4f 00 60 08 07 49 e1 c0 ff !....HIO.`..I... 01000050: 08 60 10 97 09 e1 0c 04 18 60 08 97 30 00 00 00 .`.......`..0... 01000060: 00 00 24 00 40 00 01 0c 1c 14 48 95 38 4a 08 97 ..$.@.....H.8J.. 01000070: 30 00 00 00 00 00 24 00 40 00 08 61 e2 6e 10 97 0.....$.@..a.n.. 01000080: 00 60 22 6c 10 97 30 00 00 00 00 00 24 00 40 00 .`&quot;l..0.....$.@. 01000090: 48 95 38 4c 08 97 30 00 00 00 00 00 24 00 40 00 H.8L..0.....$.@. 010000a0: 4a e1 c0 ff 20 e1 53 00 0a e1 00 04 10 97 4a e1 J... .S.......J. 010000b0: c0 ff 0a e1 14 04 50 95 30 48 fa 1f 4a e1 c0 ff ......P.0H..J... 010000c0: 0a e1 14 05 20 60 10 97 4a e1 c0 ff 20 e1 42 00 .... `..J... .B. 010000d0: 0a e1 00 04 10 97 4a e1 c0 ff 0a e1 14 04 50 95 ......J.......P. 010000e0: 30 48 fa 1f 4a e1 c0 ff 0a e1 24 01 08 60 10 93 0H..J.....$..`.. 010000f0: 4a e1 c0 ff 20 e1 4c 00 0a e1 00 04 10 97 4a e1 J... .L.......J. bfin-giga&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;On constate que ce sont les m&#234;me valeurs que l'image, donc l'&#233;criture et la lecture sont un succ&#232;s.&lt;/p&gt; &lt;h3&gt;D&#233;boguer avec le JTAG&lt;/h3&gt; &lt;div class=&quot;texteencadre-spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Source principale d'informations :&lt;/i&gt; &lt;/strong&gt; le ICEBear Manual (PDF), section Insight Debugger&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Jusqu'&#224; date nous avons utilis&#233; notre ICEBear et Insight dans l'unique but de charger nos programmes en RAM. Une autre utilisation, tout aussi importante, est le d&#233;bogage. J'utilise un script GDB que j'ai nomm&#233; cfg2.gdbscript :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='19' class='spip_cadre' dir='ltr'&gt;target remote 192.168.1.205:2000 set remotetimeout 999999 set remoteaddresssize 32 source /usr/share/gdbscripts/mmr.gdb source /usr/share/gdbscripts/init.gdb source /usr/share/gdbscripts/dump.gdb echo Initializing Target.. set prompt (bfin-jtag-gdb)\ define init_target set *$EBIU_SDGCTL = 0x809110CD set *$EBIU_SDBCTL = 0x0025 set *$EBIU_SDRRC = 0x01CF monitor reset load blink.dxe end&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Si vous le comparez &#224; cfg.gdbinit, vous constaterez que la version 2 ne charge pas le programme. Pour d&#233;boguer ma version de U-Boot qui s'ex&#233;cute depuis la Flash SPI, j'ai lanc&#233; Insight dans le bon dossier :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='17' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval/Desktop# cd u-boot-1.1.6-2008R1.5_Giga/ root@jfduval-desktop:/home/jfduval/Desktop/u-boot-1.1.6-2008R1.5_Giga# /usr/bin/bfin-elf-insight u-boot.ldr &amp;lt;cadre&amp;gt; Maintenant qu'Insight est lanc&#233;, on peut faire File &amp;gt; Source... &amp;gt; cfg2.gdbinit &amp;gt; Open. Quand les ic&#244;nes du d&#233;bogueur deviendront color&#233;s, c'est pr&#234;t &#224; &#234;tre utilis&#233;. On fait Open &amp;gt; u-boot &amp;gt; Ok. On peut maintenant faire fonctionner le programme en pas-&#224;-pas, le faire ex&#233;cuter jusqu'&#224; la fin, le mettre en pause, etc. Il est possible d'utiliser la console d'Insight et d'appeler des fonctions de d&#233;bogage sous forme de scripts. Ainsi, appeler {dump_ebiu} vous affichera les donn&#233;es de configuration de la RAM, {dump_pll} vous informera de vos diviseurs et multiplicateurs de fr&#233;quence. Pour conna&#238;tre toutes les possibilit&#233;s de d&#233;bogage, je vous conseil de consulter le ICEBear Manual et de lire le code des scripts du dossier {/gdbscripts/}. Vous pourrez alors savoir o&#249; votre programme bloque, quelle est la valeur de vos registres, etc. {{{R&#233;sultats}}} Le travail pr&#233;sent&#233; dans ce document a &#233;t&#233; r&#233;alis&#233; lors de mon stage &#224; l'[IntRoLab-&amp;gt;http://introlab.gel.usherbrooke.ca/], le laboratoire de recherche en robotique mobile et intelligence artificielle de l'Universit&#233; de Sherbrooke. Mon but &#233;tait d'aider l'&#233;quipe [Robot22] &#224; r&#233;aliser leur projet en les avan&#231;ant sur la portion Blackfin. J'ai donc commenc&#233; par analyser et modifier les sch&#233;mas de la carte Gigamodule. J'ai ensuite con&#231;u le circuit imprim&#233; de cette carte, l'ai assembl&#233; et test&#233;. La suite de mon mandat &#233;tait de charger U-Boot dans la flash et ensuite d'y mettre &#181;CLinux. Ma recherche d'outils m'a conduit chez Section5 car la combinaison ICEBear et BFLoader r&#233;pondait &#224; mon besoin de trouver un outil simple, complet et &#233;conomique pour programmer la carte. Tel qu'expliqu&#233; au fil de ce texte, mon parcours n'a pas &#233;t&#233; toujours simple et lin&#233;aire. J'ai vite constat&#233; que la carte Gigamodule &#233;tait subtilement diff&#233;rente de la majorit&#233; des autres cartes Blackfin et que mes outils n'&#233;taient pas tous compatibles entre eux. Ainsi, j'ai pass&#233; un temps consid&#233;rable &#224; modifier mes outils, les exemples de codes et les programmes &#224; utiliser pour les faire fonctionner sur un BF532 et le Gigamodule. Au final, je n'ai pas atteint le point d'avoir U-Boot parfaitement fonctionnel sur le Blackfin, m&#234;me si je suis tr&#232;s pr&#232;s du but. Comme vous avez pu le constater plus haut dans ce document, j'ai r&#233;ussi &#224; faire tourner U-Boot en RAM avec succ&#232;s. Ce fut une grande satisfaction pour moi apr&#232;s tous les efforts d&#233;ploy&#233;s! Par contre, m&#234;me si je peux &#233;crire avec succ&#232;s la Flash et que je sais que le Blackfin la lit au d&#233;part (confirm&#233; &#224; l'analyseur logique), je n'obtiens pas de fonctionnement. Au d&#233;marrage, j'obtiens cela sur le terminal: &amp;lt;cadre&amp;gt; &#214; &#402;])&#228;FIN&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Ce qui ressemble &#224; du &lt;i class=&quot;spip&quot;&gt;garbage&lt;/i&gt; et &#224; un&lt;i class=&quot;spip&quot;&gt; prompt&lt;/i&gt;. Il me semble &#233;vident que la solution est tout pr&#234;t et que j'ai probablement une erreur stupide dans mon travail qui conduit &#224; ce r&#233;sultat. Par contre, j'ai du travailler sur d'autres t&#226;ches plus importantes et mon travail est donc rest&#233; &#224; ce point.&lt;/p&gt; &lt;h3&gt;Observations et pistes de solution possibles&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Bien que je n'ai pas trouv&#233; la solution exacte &#224; mon probl&#232;me, j'ai plusieurs pistes de solution en t&#234;te.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Observation 1 :&lt;/i&gt; &lt;/strong&gt; Lorsque je d&#233;bogue avec le JTAG le programme d&#233;marr&#233; depuis la Flash, il se rend jusqu'&#224; la ligne 204 de serial.h, o&#249; il reste &#233;ternellement. J'ai mon output bidon entre l'initialisation et cette fameuse ligne 204.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Observation 2 :&lt;/i&gt; &lt;/strong&gt; Autant dans mon script GDB que dans U-Boot, j'ai SDGCTL = 0x809110CD. Par contre, un dump_ebiu me retourne 0x80111OCD. Est-ce que ma configuration serait mauvaise ?&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Soup&#231;on 1 :&lt;/i&gt; &lt;/strong&gt; Je soup&#231;onne le ICEBear d'initialiser certains registres diff&#233;remment de U-Boot, ce qui expliquerait que si je charge le programme en RAM il s'ex&#233;cute correctement.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Soup&#231;on 2 :&lt;/i&gt; &lt;/strong&gt; Apr&#232;s avoir consult&#233; la documentation du BlackStamp, il semble qu'un probl&#232;me de mauvaise initialisation de la SDRAM cause exactement ce probl&#232;me. Leur proc&#233;dure n'est pas adapt&#233;e &#224; notre version de U-Boot, il faudra enqu&#234;ter. http://blackfin.uclinux.org/gf/project/blackstamp/frs/&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Piste de solution 1 :&lt;/i&gt; &lt;/strong&gt; Corriger l'erreur de SDGCTL (confirmer les valeurs, s'assurer qu'elles soient programm&#233;es correctement).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Piste de solution 2 :&lt;/i&gt; &lt;/strong&gt; Tester &#224; plus basse fr&#233;quence pour diminuer de potentiels probl&#232;mes li&#233;s au PCB.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt; &lt;i class=&quot;spip&quot;&gt;Piste de solution 3 :&lt;/i&gt; &lt;/strong&gt; Travailler avec la derni&#232;re version de U-Boot, qui incorpore un nouveau syst&#232;me de gestion des Flash SPI.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour le moment, l'&#233;quipe [Robot22] a le projet entre les mains et devrait surpasser cette erreur. Quand la solution sera trouv&#233;e, elle sera ajout&#233;e &#224; ce document. Si vous croyez d&#233;tenir la solution ou une explication &#224; ces probl&#232;mes, je vous serais tr&#232;s reconnaissant de me contacter.&lt;/p&gt; &lt;h2&gt;Sommaire de mon exp&#233;rience&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Mon parcours aura &#233;t&#233; sem&#233; d'emb&#251;ches tout au long de mon d&#233;veloppement. Premi&#232;rement, ma connaissance limit&#233;e de l'environnement Linux et de l'usage de la console m'a fortement ralenti, surtout lorsque j'&#233;tais incapable de suivre les exemples trouv&#233;s en ligne pour cause de probl&#232;mes de d&#233;pendances ou d'incompatibilit&#233;s entre les diff&#233;rentes saveurs et versions de Linux. Mon environnement de d&#233;veloppement initial, compos&#233; de 2 PC et de trois syst&#232;mes d'exploitation n'&#233;tait en aucun point optimal, mais il m'a permis de progresser. Ce n'est que quand j'ai commenc&#233; cette documentation que j'ai r&#233;alis&#233; plusieurs de mes erreurs et que j'ai appris &#224; les surmonter. Je ne vous cacherai pas que de tout faire fonctionner sur Ubuntu est plus compliqu&#233; que sur Debian Etch mais les avantages compensent : un seul syst&#232;me, plus rapide, plus stable et moderne, moins de probl&#232;mes d'&#233;changes de p&#233;riph&#233;riques et simplicit&#233; accrue. Il existe une grande quantit&#233; de documentation en ligne qui couvre la majorit&#233; des sujets trait&#233;s dans ce document. Par contre, d&#232;s que l'on utilise du mat&#233;riel non standard, les informations sont rares ou inexistantes. J'esp&#232;re qu'avec cette documentation je pourrai aider quelques personnes, qui seraient dans une situation similaire &#224; la mienne, &#224; progresser plus rapidement.
Cette exp&#233;rience aura &#233;t&#233; tr&#232;s formatrice pour moi. Bien que je n'ai pas atteint tout &#224; fais mon but, j'ai appris beaucoup sur le d&#233;veloppement sous Linux, sur l'environnement Blackfin et sur les projets open-source U-Boot et &#181;CLinux.&lt;/p&gt; &lt;h2&gt;Annexe A : Sources&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Afin de pouvoir d'analyser les modifications que j'ai effectu&#233;es aux sources des diff&#233;rents programmes modifi&#233;s, il vous est possible des les t&#233;l&#233;charger aux adresses suivantes :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://jfduval.aqra.ca/bf532-files/&quot; class=&quot;spip_out&quot;&gt;R&#233;pertoire principal&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://jfduval.aqra.ca/bf532-files/bfloader_jfd.tar.gz&quot; class=&quot;spip_out&quot;&gt;Sources modifi&#233;s BFLoader&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://jfduval.aqra.ca/bf532-files/blinky_jfd.tar.gz&quot; class=&quot;spip_out&quot;&gt;Sources modifi&#233;s Blinky&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://jfduval.aqra.ca/bf532-files/u-boot.tar.gz&quot; class=&quot;spip_out&quot;&gt;Sources modifi&#233;s U-Boot&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://jfduval.aqra.ca/bf532-files/atmel_po2.tar.gz&quot; class=&quot;spip_out&quot;&gt;Outil de conversion Atmel&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour comparer mes sources modifi&#233;s aux originaux, vous pouvez installer l'excellent logiciel Diffuse qui vous permet de voir deux fichiers et de comparer les diff&#233;rences facilement :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;root@jfduval-desktop:/home/jfduval# apt-get install diffuse&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;
&lt;h2&gt;Annexe B : Documentation et liens&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://introlab.gel.usherbrooke.ca/&quot; class=&quot;spip_out&quot;&gt;IntRoLab&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Documentation JFDuval &#8211; IntRoLab :&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.aqra.ca/Porter-U-Boot-sur-un-Blackfin&quot; class=&quot;spip_out&quot;&gt;Cet article complet sur le web&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://jfduval.aqra.ca/bf532-files/U-Boot-BF532_v1_1.pdf&quot; class=&quot;spip_out&quot;&gt;Cet article complet en PDF&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://jfduval.aqra.ca/bf532-files/&quot; class=&quot;spip_out&quot;&gt;Sources&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Outils Section5 :&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.section5.ch/&quot; class=&quot;spip_out&quot;&gt;Site principal Section5&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.section5.ch/forum/&quot; class=&quot;spip_out&quot;&gt;Forum Section5&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.section5.ch/dsp/icebear/ICEbear-manual.pdf&quot; class=&quot;spip_out&quot;&gt;Manuel ICEBear&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;U-Boot et &#181;CLinux :&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://blackfin.uclinux.org/&quot; class=&quot;spip_out&quot;&gt;Blackfin Koop&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php&quot; class=&quot;spip_out&quot;&gt;Wiki Blackfin Koop&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://docs.blackfin.uclinux.org/doku.php?id=bootloaders:u-boot&quot; class=&quot;spip_out&quot;&gt;Wiki U-Boot&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://blackfin.uclinux.org/gf/project/u-boot/forum/&quot; class=&quot;spip_out&quot;&gt;Forum U-Boot&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Readme U-Boot :. .../u-boot-1.1.6-2008R1.5/README&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.uclinux.org/&quot; class=&quot;spip_out&quot;&gt;&#181;CLinux&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.ucdot.org/archive/tb/tb20020807.shtml&quot; class=&quot;spip_out&quot;&gt;Getting started with &#181;CLinux&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Divers :&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.analog.com/en/embedded-processing-dsp/blackfin/content/index.html&quot; class=&quot;spip_out&quot;&gt;Blackfin&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf&quot; class=&quot;spip_out&quot;&gt;Datasheet BF532&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.analog.com/static/imported-files/processor_manuals/bf533_hwr_Rev3.4.pdf&quot; class=&quot;spip_out&quot;&gt;Manuel BF532&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Projets et produits :&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.cdatas.com/&quot; class=&quot;spip_out&quot;&gt;CData SBC&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.camsig.co.uk/products.htm&quot; class=&quot;spip_out&quot;&gt;Camsig&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://linuxgazette.net/123/jesslyn.html&quot; class=&quot;spip_out&quot;&gt;Blackfin Stamp&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://blog.astfin.org/&quot; class=&quot;spip_out&quot;&gt;Astfin&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Annexe C : Remerciements&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Je tiens &#224; remercier en particulier trois personnes qui m'ont aid&#233; dans mon d&#233;veloppement et qui m'ont permis de progresser vers mon but.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Dominic L&#233;tourneau d'IntRoLab, pour son aide et ses conseils&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Martin Strubel de Section5 pour son support par forum et courriel&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Mike Frysinger pour ses r&#233;ponses sur les forums de U-Boot&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>&#201;tude comparative des algorithmes de connexit&#233; appliqu&#233;s &#224; la d&#233;tection de r&#233;gions dans une image</title>
		<link>http://www.aqra.ca/Etude-comparative-des-algorithmes</link>
		<guid isPermaLink="true">http://www.aqra.ca/Etude-comparative-des-algorithmes</guid>
		<dc:date>2009-03-15T00:45:32Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierre-Luc Bacon</dc:creator>

<category domain="http://www.aqra.ca/-Programmation-">Programmation</category>


		<description>Ce projet a &#233;t&#233; r&#233;alis&#233; en 2008 alors que d&#233;veloppant l'algo de vision pour le robot, je r&#233;alisais &#233;galement un travail d'analyse pour tenter de d&#233;terminer la meilleure approche &#224; adopter pour ce probl&#232;me. Les r&#233;sultats de mes recherches ont &#233;t&#233; rassembl&#233;s dans ce document qui a &#233;t&#233; propos&#233; en &quot;travail de fin d'&#233;tudes&quot; au C&#201;GEP. &lt;br /&gt;Ce document pr&#233;sente les r&#233;sultats d'une &#233;tude comparative visant &#224; d&#233;terminer l'efficacit&#233; d'une implantation r&#233;elle d'algorithmes servant &#224; l'extraction des r&#233;gions d'int&#233;r&#234;t d'apr&#232;s (...)


-
&lt;a href="http://www.aqra.ca/-Programmation-" rel="directory"&gt;Programmation&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src=&quot;http://www.aqra.ca/IMG/arton88.png&quot; alt=&quot;&quot; align=&quot;right&quot; width=&quot;962&quot; height=&quot;570&quot; class=&quot;spip_logos&quot; /&gt;
		&lt;div class='rss_chapo'&gt;Ce projet a &#233;t&#233; r&#233;alis&#233; en 2008 alors que d&#233;veloppant l'algo de vision pour le robot, je r&#233;alisais &#233;galement un travail d'analyse pour tenter de d&#233;terminer la meilleure approche &#224; adopter pour ce probl&#232;me. Les r&#233;sultats de mes recherches ont &#233;t&#233; rassembl&#233;s dans ce document qui a &#233;t&#233; propos&#233; en &quot;travail de fin d'&#233;tudes&quot; au &lt;a href=&quot;http://fr.wikipedia.org/wiki/C%C3%A9gep&quot; class=&quot;spip_out&quot;&gt;C&#201;GEP&lt;/a&gt;.&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;Ce document pr&#233;sente les r&#233;sultats d'une &#233;tude comparative visant &#224; d&#233;terminer l'efficacit&#233; d'une implantation r&#233;elle d'algorithmes servant &#224; l'extraction des r&#233;gions d'int&#233;r&#234;t d'apr&#232;s les composants connect&#233;s d'une image. Nous nous int&#233;ressons plus en d&#233;tails aux techniques d&#233;velopp&#233;es par Bruce et al. (2000) ainsi que (Wu et al., 2005) qui sont toutes deux caract&#233;ris&#233;es par une complexit&#233; en temps lin&#233;aire &lt;i class=&quot;spip&quot;&gt;O(n)&lt;/i&gt;. Une approche th&#233;orique permettra d'abord de pr&#233;ciser les caract&#233;ristiques th&#233;oriques de quelques techniques d&#233;velopp&#233;es pour solutionner ce probl&#232;me alors que des essais pratiques metteront ensuite en lumi&#232;re leur temps d'ex&#233;cution.&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'article en question est t&#233;l&#233;chargeable au bas de cette page.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://www.aqra.ca/IMG/pdf_affiche.pdf" length="1334247" type="application/pdf" />
		
		<enclosure url="http://www.aqra.ca/IMG/pdf_baconEtudeComparative-2008.pdf" length="1972397" type="application/pdf" />
		

	</item>



	<item>
		<title>&#201;tiquetage des composants connect&#233;s et segmentation des couleurs avec CMVision 1.2</title>
		<link>http://www.aqra.ca/Etiquetage-des-composants</link>
		<guid isPermaLink="true">http://www.aqra.ca/Etiquetage-des-composants</guid>
		<dc:date>2009-03-15T00:18:20Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierre-Luc Bacon</dc:creator>

<category domain="http://www.aqra.ca/-Programmation-">Programmation</category>


		<description>Toute &#233;quipe qui doit embarquer une cam&#233;ra sur son robot doit le faire &#224; tout coup. Implanter un algorithme effiace d'&#233;tiquetage des r&#233;gions de couleurs (aka &quot;connected component labeling&quot;) est souvent une &#233;tape complexe qui, si mal r&#233;alis&#233;e peu entra&#238;ner des d&#233;lais de traitement beaucoup trop important. Un choix s'impose alors : tenter une solution &quot;maison&quot; ou utiliser une solution libre d&#233;j&#224; disponible. &lt;br /&gt;OpenCV est souvent choisi dans ce cas. Bien que tr&#232;s perfectionn&#233;e, OpenCV a peut-&#234;tre trop &#224; (...)


-
&lt;a href="http://www.aqra.ca/-Programmation-" rel="directory"&gt;Programmation&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src=&quot;http://www.aqra.ca/IMG/arton87.png&quot; alt=&quot;&quot; align=&quot;right&quot; width=&quot;320&quot; height=&quot;240&quot; class=&quot;spip_logos&quot; /&gt;
		&lt;div class='rss_chapo'&gt;Toute &#233;quipe qui doit embarquer une cam&#233;ra sur son robot doit le faire &#224; tout coup. Implanter un algorithme effiace d'&#233;tiquetage des r&#233;gions de couleurs (aka &quot;connected component labeling&quot;) est souvent une &#233;tape complexe qui, si mal r&#233;alis&#233;e peu entra&#238;ner des d&#233;lais de traitement beaucoup trop important. Un choix s'impose alors : tenter une solution &quot;maison&quot; ou utiliser une solution libre d&#233;j&#224; disponible.&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;OpenCV est souvent choisi dans ce cas. Bien que tr&#232;s perfectionn&#233;e, OpenCV a peut-&#234;tre trop &#224; offrir quand vient le temps d'implanter une solution simple pour un syst&#232;me aux ressources limit&#233;es.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.cs.cmu.edu/~jbruce/cmvision/&quot; class=&quot;spip_out&quot;&gt;CMVision&lt;/a&gt; (c++) s'av&#232;re &#234;tre un choix tout indiqu&#233; pour r&#233;pondre au besoin pr&#233;cis d'&#233;tiquetage des r&#233;gions de couleurs. R&#233;alis&#233; par des &#233;tudiants du &lt;a href=&quot;http://www.cs.cmu.edu/~jbruce/cmvision/papers/CMVision-IROS2000.pdf&quot; class=&quot;spip_out&quot;&gt;MIT&lt;/a&gt; dans le cadre de Robocup, cette librairie utilise plusieurs algorithmes performants pour r&#233;aliser cette op&#233;ration. Les couleurs sont d'abord d&#233;tect&#233;es par un algorithme de seuillage ordinaire &#224; la diff&#233;rence pr&#232;s qu'une astuce permet de d&#233;terminer si un pixel appartient &#224; une classe de couleur (jusqu'&#224; 32) en une seule op&#233;ration binaire plut&#244;t qu'en proc&#233;dant &#224; 6 comparaisons logiques requises par l'approche &quot;na&#239;ve&quot;. L'image seuill&#233;e est ensuite encod&#233;e en &lt;a href=&quot;http://en.wikipedia.org/wiki/Run-length_encoding&quot; class=&quot;spip_out&quot; title=&quot;Run Length Encoding&quot;&gt;s&#233;ries de pixels adjacents&lt;/a&gt; et analys&#233;e dans un algorithme de type &lt;a href=&quot;http://en.wikipedia.org/wiki/Disjoint-set_data_structure&quot; class=&quot;spip_out&quot;&gt;Union- Find&lt;/a&gt; implant&#233; sous forme de listes cha&#238;n&#233;es.&lt;/p&gt; &lt;h2&gt;Utilisation&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Un seul constructeur est fourni dans la version 1.2 pour un objet de type &quot;CMVision&quot;.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;CMVision vis;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;L'utilisateur devra ensuite fournir d'autres param&#232;tres d'initialisation manuellement :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;bool initialize(int nwidth,int nheight);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;et&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;bool loadOptions(char *filename);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Ces m&#233;thodes sont celles qui devront le plus souvent &#234;tre appel&#233;es. loadOptions() prend en argument le nom d'un fichier qui contient une liste de seuils pour chacune des couleurs &#224; d&#233;tecter. Il est format&#233; comme suit :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre' dir='ltr'&gt;[Colors] (255,0, 0) 0.000000 Ball [Thresholds] (100:230, 10:100, 10:130)&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;La section &quot;colors&quot; contient le triplet RGB associ&#233; &#224; la couleur (utile pour le debugging ou pour la partie GUI), la valeur &quot;merge&quot; (non utilis&#233;e ici), et un identifiant texte. La section threshold contient quand &#224; elle les seuils &lt;i class=&quot;spip&quot;&gt;min&lt;/i&gt; et &lt;i class=&quot;spip&quot;&gt;max&lt;/i&gt; pour chacun des 3 canaux de couleur.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Une fois ces quelques m&#233;thodes execut&#233;es, nous sommes d&#233;j&#224; en mesure d'effectuer le traitement sur l'image :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;vis.processFrame(buffer);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Cette m&#233;thode est surcharg&#233;e pour supporter plusieurs arrangement en m&#233;moire possibles de l'image :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'&gt;bool processFrame(image_pixel *image); bool processFrame(unsigned *map); bool processFrame(unsigned char *image);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;o&#249; &lt;i class=&quot;spip&quot;&gt;image_pixel&lt;/i&gt; est un format pr&#233;-d&#233;fini dans cmvision.h qui, selon le &quot;define&quot; utilis&#233; au moment de la compilation, sera d&#233;fini comme une de ces structures :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='11' class='spip_cadre' dir='ltr'&gt;struct yuv{ unsigned char y,u,v; }; struct yuv422{ unsigned char y1,u,y2,v; }; struct uyvy{ unsigned char u,y1,v,y2; };&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Dans la plupart des applications, il sera plus simple de fournir une image de type &quot;unsigned&quot; o&#249; chaque pixel est d&#233;fini un apr&#232;s l'autre par 3 valeurs de canaux cons&#233;cutives. &lt;/cadre&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si l'image contient un certains nombre de r&#233;gions de couleurs tel que pr&#233;cis&#233; dans le fichier de configuration, getRegions() permettra de les acqu&#233;rir via un pointeur de type &quot;region&quot;.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;region *getRegions(int color_id);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;o&#249; color_id et le num&#233;ro associ&#233; &#224; la couleur d&#233;finie dans le fichier de configuration (la num&#233;ration est automatique par ordre de d&#233;finition).&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;int numRegions(int color_id);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;indiquera le nombre de r&#233;gions d&#233;tect&#233;es.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le type &lt;i class=&quot;spip&quot;&gt;r&#233;gion&lt;/i&gt; est d&#233;fini ainsi :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='14' class='spip_cadre' dir='ltr'&gt;struct region{ int color; // id of the color int area; // occupied area in pixels int x1,y1,x2,y2; // bounding box (x1,y1) - (x2,y2) float cen_x,cen_y; // centroid yuv average; // average color (if CMV_COLOR_AVERAGES enabled) int sum_x,sum_y,sum_z; // temporaries for centroid and avg color // int area_check; // DEBUG ONLY region *next; // next region in list // int number; // DEBUG ONLY };&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Connaissant le nombre de couleurs ainsi que le nombre de r&#233;gions d'apr&#232;s numRegions(). nous pourrions alors ex&#233;cuter une boucle pour afficher les informations de la structure &quot;region&quot; pour chaque composant d&#233;tect&#233;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Finalement,&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;void writeColorMap(const std::string &amp;name);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;peut s'av&#233;rer utile pour visualiser les pixels d&#233;tect&#233;s dans la phase de seuillage. Un fichier ppm sera alors cr&#233;&#233; o&#249; chaque pixel prendra la valeur de son identifiant de couleur.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il n'existe pas de documentation officielle pour la librairie CMVision-1.2. Ainsi, les m&#233;thodes pr&#233;sent&#233;es ici ne repr&#233;sentent pas r&#233;ellement toutes celles disponibles. La lecture de cmvision.h suffira bien souvent pour comprendre le fonctionnement de ces autres m&#233;thodes.&lt;/p&gt; &lt;h2&gt;Exemple&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_642 spip_documents spip_documents_center' &gt; &lt;img src='http://www.aqra.ca/IMG/cache-502x502/png_Screenshot-Eurobot_2008_Calibration-1-502x502.png' width='502' height='502' alt=&quot;&quot; /&gt;
&lt;/span&gt;
L'exemple suivant utilise les m&#233;thodes d&#233;crites plus haut de CMVision-1.2, la classe &lt;a href=&quot;http://www.aqra.ca/Capture-d-images-avec-Video-For&quot; class=&quot;spip_out&quot; title=&quot;VideoInput&quot;&gt;VideoInput&lt;/a&gt;, ainsi que les librairies &lt;a href=&quot;http://www.libsdl.org/&quot; class=&quot;spip_out&quot; title=&quot;libsdl&quot;&gt;SDL&lt;/a&gt; et &lt;a href=&quot;http://www.ferzkopp.net/joomla/content/view/19/14/&quot; class=&quot;spip_out&quot; title=&quot;libsdl-gfx&quot;&gt;SDL-gfx&lt;/a&gt; (sudo apt-get install libsdl-gfx1.2-dev).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Une fen&#234;tre SDL affichera en temps r&#233;el les images captur&#233;es par la cam&#233;ra, les pixels seuill&#233;s, et les r&#233;gions d'int&#233;r&#234;ts d&#233;tect&#233;es.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le code de ce programme est disponible au bas de cette page. Pour le compiler, il suffira d'ex&#233;cuter &quot;make&quot; dans le dossier cr&#233;&#233; apr&#232;s d&#233;compression de l'archive.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://www.aqra.ca/IMG/bz2/cmvision-example-baconPierreLuc.tar.bz2" length="16747" type="application/x-bzip2" />
		

	</item>



	<item>
		<title>Capture d'images avec Video For Linux 2</title>
		<link>http://www.aqra.ca/Capture-d-images-avec-Video-For</link>
		<guid isPermaLink="true">http://www.aqra.ca/Capture-d-images-avec-Video-For</guid>
		<dc:date>2009-03-14T19:19:21Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierre-Luc Bacon</dc:creator>

<category domain="http://www.aqra.ca/-Eurobot-2008-">Eurobot 2008</category>


		<description>Bien qu'encore populaire, Video For Linux 1 a fait place &#224; V4L2 il y a bien longtemps alors que le d&#233;veloppement de Linux en &#233;tait &#224; la version 2.5. S'il existe un obstacle &#224; l'adoption de la nouvelle API chez les d&#233;veloppeurs, c'est peut-&#234;tre en raison de sa complexit&#233;. Certes il existe une documentation officielle qui d&#233;taile le fonctionnement de chacune des fonctions mais celle-ci aide peu &#224; saisir l'id&#233;e g&#233;n&#233;rale d'interaction entre elles. &lt;br /&gt;Heureusement, il nous est fourni le fichier capture.c qui (...)


-
&lt;a href="http://www.aqra.ca/-Eurobot-2008-" rel="directory"&gt;Eurobot 2008&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src=&quot;http://www.aqra.ca/IMG/arton86.jpg&quot; alt=&quot;&quot; align=&quot;right&quot; width=&quot;1941&quot; height=&quot;1809&quot; class=&quot;spip_logos&quot; /&gt;
		&lt;div class='rss_chapo'&gt;Bien qu'encore populaire, Video For Linux 1 a fait place &#224; V4L2 il y a bien longtemps alors que le d&#233;veloppement de Linux en &#233;tait &#224; la version 2.5. S'il existe un obstacle &#224; l'adoption de la nouvelle API chez les d&#233;veloppeurs, c'est peut-&#234;tre en raison de sa complexit&#233;. Certes il existe une documentation officielle qui d&#233;taile le fonctionnement de chacune des fonctions mais celle-ci aide peu &#224; saisir l'id&#233;e g&#233;n&#233;rale d'interaction entre elles.&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;Heureusement, il nous est fourni le fichier capture.c qui fait office d'exemple d'implantation. Le code est bien organis&#233; et peut &#234;tre utilis&#233; presque sur-le-champs dans n'importe quelle application. Toutefois, un peu de travail reste &#224; faire pour mieux l'int&#233;grer dans une application plus complexe.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le code suivant a &#233;t&#233; r&#233;alis&#233; lors de notre participation &#224; Eurobot 2008 et visait &#224; obtenir un code simple qui permettrait d'exp&#233;rimenter et de d&#233;ployer rapidement des solutions de traitement d'image.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Prenez note que, bien que fonctionnel, ce code n'a pas la flexibilit&#233; requise pour fonctionner avec n'importe quel type de mat&#233;riel. Nous utilisions la cam&#233;ra Quickcam pro 4000 de Logitech &#224; cette occasion et vous retrouverez quelques valeurs cod&#233;es &quot;en dur&quot; parmis les lignes.&lt;/p&gt; &lt;h2&gt;Survol des fonctions&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;La classe VideoInput peut &#234;tre initialis&#233;e de deux mani&#232;res. Par exemple :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;VideoInput vdo(&quot;/dev/video0&quot;);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Cr&#233;e un objeet VideoInput nomm&#233; &quot;vdo&quot; qui tentera d'acc&#233;der au p&#233;riph&#233;rique V4L2 situ&#233; en &quot;/dev/video0&quot; avec comme valeurs par d&#233;faut : largeur = 320, hauteur = 240 et format de couleur YU12 (fourcc).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Ce premier constructeur est &#233;quivalent au second appel&#233; de cette mani&#232;re :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;VideoInput vdo(320, 240, &quot;YU12&quot;, &quot;/dev/video0&quot;);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Pour saisir une image, il suffit seulement d'appeler la fonction &quot;grab&quot; :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;vdo.grab();&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Aucune valeur n'est retourn&#233;e par cette fonction, mais une image est plac&#233;e dans le buffer &#224; ce moment. Celui-ci peut &#234;tre obtenu par :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;unsigner char *buffer = vdo.getBuffer();&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Prenez note que, par d&#233;faut, chaque appel &#224; la fonction grab() fait aussi appel &#224; une fonction de conversion YUV420p vers RGB &quot;standard&quot;. Pour changer cette op&#233;ration, il faudra adapter la fonction (priv&#233;e) &quot;ReadFrame&quot;.
&lt;/cadre&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il &#233;tait envisag&#233; de faire fournir un m&#233;canisme de conversion automatique &quot;de&quot; et &quot;vers&quot; n'importe quel format d'image. Toutefois, la t&#226;che &#233;tant colossale, le projet n'a pas &#233;t&#233; entam&#233; au sein de code. Une fonctionnalit&#233; de la sorte serait la pi&#232;ce manquante pour ent&#226;mer le d&#233;veloppement d'une librarie d&#233;di&#233;e &#224; la capture d'images pour nos robots. Le temps se faisant pr&#233;cieux, les priorit&#233;es &#233;tant ailleurs, ceci ne verra pas le jours prochainement... Une librairie simple, peu encombrante et flexible, est peut-&#234;tre ce qui manque le plus actuellement. &lt;a href=&quot;http://www.quickcamteam.net/software/libwebcam&quot; class=&quot;spip_out&quot; title=&quot;libwebcam&quot;&gt;Libwebcam&lt;/a&gt; (libre), apparue r&#233;cemment des laboratoires de Logitech, pourrait r&#233;pondre &#224; ce besoin mais elle offre seulement des fonctionalit&#233;s UVC.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si vous voulez supporter V4L1 dans votre application, &lt;a href=&quot;http://antonym.org/libfg/&quot; class=&quot;spip_out&quot; title=&quot;libfg&quot;&gt;Libfg&lt;/a&gt; est probablement ce qui se rapproche le plus de ces objectifs et devrait servir de mod&#232;le d'inspiration dans un projet du genre. Et pourquoi pas porter libfg &#224; V4L2 ? Des volontaires ?&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://www.aqra.ca/IMG/bz2/VideoInput-0.1.tar.bz2" length="4663" type="application/x-bzip2" />
		

	</item>



	<item>
		<title>Projet BOTUS : Robot d'exploration</title>
		<link>http://www.aqra.ca/Projet-BOTUS-Developpement-en</link>
		<guid isPermaLink="true">http://www.aqra.ca/Projet-BOTUS-Developpement-en</guid>
		<dc:date>2009-01-24T22:14:16Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Fran&#231;ois Duval</dc:creator>

<category domain="http://www.aqra.ca/-Robotique-">Robotique</category>


		<description>BOTUS est un robot d'exploration de milieux difficile. Le robot dispose d'une cam&#233;ra et de plusieurs capteurs pour repr&#233;senter son environnement &#224; l'op&#233;rateur qui le contr&#244;le. Du cot&#233; PC, une interface graphique pr&#233;sente la r&#233;alit&#233; per&#231;ue par le robot. Le contr&#244;le des d&#233;placements se fait avec une manette tandis que l'orientation de la cam&#233;ra se fait par commande vocale. &lt;br /&gt;Une image vaut mille mots... &lt;br /&gt;... donc cet article commence par un vid&#233;o du robot compl&#233;t&#233; et quelques images ! &lt;br /&gt;Pour une (...)


-
&lt;a href="http://www.aqra.ca/-Robotique-" rel="directory"&gt;Robotique&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;BOTUS est un robot d'exploration de milieux difficile. Le robot dispose d'une cam&#233;ra et de plusieurs capteurs pour repr&#233;senter son environnement &#224; l'op&#233;rateur qui le contr&#244;le. Du cot&#233; PC, une interface graphique pr&#233;sente la r&#233;alit&#233; per&#231;ue par le robot. Le contr&#244;le des d&#233;placements se fait avec une manette tandis que l'orientation de la cam&#233;ra se fait par commande vocale.&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2&gt;Une image vaut mille mots...&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;... donc cet article commence par un vid&#233;o du robot compl&#233;t&#233; et quelques images !&lt;/p&gt; &lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/cu6KbZIXgxw&amp;hl=fr&amp;fs=1&amp;&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/cu6KbZIXgxw&amp;hl=fr&amp;fs=1&amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;div class='spip_document_689 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_botus_1.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 21.2 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-420x560/jpg_botus_1-420x560.jpg' width='420' height='560' alt=&quot;JPEG - 21.2 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_694 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_botus_6.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 30.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-420x560/jpg_botus_6-420x560.jpg' width='420' height='560' alt=&quot;JPEG - 30.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_696 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_botus_8.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 30.9 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-420x560/jpg_botus_8-420x560.jpg' width='420' height='560' alt=&quot;JPEG - 30.9 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;Pour une description des diff&#233;rentes parties du robot, vous pouvez consulter l'Instructable de Simon St-Hilaire sur notre projet : &lt;a href=&quot;http://www.instructables.com/id/BOTUS-Project&quot; class=&quot;spip_out&quot;&gt;http://www.instructables.com/id/BOTUS-Project&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;&#201;lectronique&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Carte Colibri 101 :&lt;/p&gt; &lt;div class='spip_document_698 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_colibri_1.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 398.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x113/jpg_colibri_1-150x113-150x113.jpg' width='150' height='113' alt=&quot;JPEG - 398.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_699 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_pic18f8722.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 361.9 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x113/jpg_pic18f8722-150x113-150x113.jpg' width='150' height='113' alt=&quot;JPEG - 361.9 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_701 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_colibri_ass.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 394.9 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x113/jpg_colibri_ass-150x113-150x113.jpg' width='150' height='113' alt=&quot;JPEG - 394.9 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;D&#233;veloppement du prototype&lt;/h2&gt;
&lt;div class='spip_document_633 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_modelisation3.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 163.8 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-132x150/jpg_modelisation3-132x150-132x150.jpg' width='132' height='150' alt=&quot;JPEG - 163.8 ko&quot; /&gt;&lt;/a&gt;
&lt;div class='spip_doc_titre' style='width:132px;'&gt;&lt;strong&gt;Mod&#233;lisation&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class='spip_document_628 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_proto_1.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 328.7 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_proto_1.jpg' width='520' height='388' alt=&quot;JPEG - 328.7 ko&quot; /&gt;&lt;/a&gt;
&lt;div class='spip_doc_titre' style='width:150px;'&gt;&lt;strong&gt;Robot de test&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class='spip_document_627 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_proto_elec_1.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 311.4 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x113/jpg_proto_elec_1-150x113-150x113.jpg' width='150' height='113' alt=&quot;JPEG - 311.4 ko&quot; /&gt;&lt;/a&gt;
&lt;div class='spip_doc_titre' style='width:150px;'&gt;&lt;strong&gt;Prototype &#233;lectronique&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class='spip_document_634 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_botus_build_1.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 337.3 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-520x694/jpg_botus_build_1-520x694.jpg' width='520' height='694' alt=&quot;JPEG - 337.3 ko&quot; /&gt;&lt;/a&gt;
&lt;div class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Construction de Botus (1)&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class='spip_document_635 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_botus_build_2.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 289.5 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/jpg_botus_build_2.jpg' width='520' height='390' alt=&quot;JPEG - 289.5 ko&quot; /&gt;&lt;/a&gt;
&lt;div class='spip_doc_titre' style='width:150px;'&gt;&lt;strong&gt;Construction de Botus (2)&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2&gt;Description &quot;scolaire&quot;&lt;/h2&gt;
&lt;h3&gt;Contexte :&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;La session S2 vient de d&#233;buter, avec un nouveau projet pour le trimestre d'hiver. Voici les exigences du corps professorale.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&#171; L'&#233;quipe professorale de S2 vous invite &#224; participer &#224; la conception d'un syst&#232;me hybride de commande vocale pour un logiciel. Sommairement, le syst&#232;me &#224; concevoir est un logiciel d'application avec interface graphique interactive contr&#244;l&#233; par un module de reconnaissance de commandes vocales simples. &#187;&lt;/p&gt; &lt;h3&gt;Description g&#233;n&#233;rale :&lt;/h3&gt;
&lt;h4&gt;G&#233;n&#233;ral :&lt;/h4&gt; &lt;p class=&quot;spip&quot;&gt;Le projet consiste en la conception d'un robot d'exploration. Ce robot, nomm&#233; Botus, aura de nombreuses fonctionnalit&#233;s permettant la navigation en terrain dangereux ou inaccessible. Les commandes donn&#233;es au robot seront transmises par l'interm&#233;diaire d'un contr&#244;leur analogique et &#224; l'aide d'un syst&#232;me de traitement de la voix. Le robot sera contr&#244;l&#233; &#224; distance &#224; l'aide d'un modem double sens, connect&#233; &#224; l'ordinateur.&lt;/p&gt; &lt;h4&gt;Fonctions annexes du robot :&lt;/h4&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; D&#233;placement &#224; l'aide de roues contr&#244;l&#233;es ind&#233;pendamment. &lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Cam&#233;ra amovible dont le flux vid&#233;o appara&#238;t sur l'interface graphique.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Pince contr&#244;l&#233;e, situ&#233;e &#224; l'avant du robot, permettant une saisie d'objets.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; T&#233;l&#233;m&#232;tres infrarouges d&#233;tectant la distance des objets en p&#233;riph&#233;rie du robot.&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Composantes du robot :&lt;/h4&gt; &lt;p class=&quot;spip&quot;&gt;Le robot se d&#233;place sur deux roues ainsi qu'un patin stabilisateur. Cette fonction est contr&#244;l&#233;e avec les manches &#224; balai du contr&#244;leur analogique. La pince motoris&#233;e est command&#233;e &#224; l'aide des interrupteurs du contr&#244;leur analogique. Une cam&#233;ra sans fil est plac&#233;e sur le dessus du robot et est contr&#244;l&#233;e par deux servomoteurs. Cette disposition permet d'obtenir une vision de 180o sur plusieurs angles. C'est alors que l'utilisation de la commande vocale s'av&#232;re l&#233;gitime puisque les deux mains de l'utilisateur sont utilis&#233;es. Ainsi, les commandes vocales sont trait&#233;es afin de permettre une navigation dans les menus de l'interface graphique ainsi que pour la motion de la cam&#233;ra.&lt;/p&gt; &lt;h4&gt;Interface graphique :&lt;/h4&gt; &lt;p class=&quot;spip&quot;&gt;L'interface graphique affiche, en plus du flux vid&#233;o, des informations diverses telles que l'&#233;tat des piles du robot, une repr&#233;sentation graphique de la position du robot relative aux obstacles, une bo&#238;te affichant les commandes de communication robot-PC, des t&#233;moins graphiques associ&#233;s aux phon&#232;mes reconnus et une repr&#233;sentation 2-D de l'environnement dans lequel se trouve le robot.&lt;/p&gt; &lt;h2&gt;Cr&#233;dits :&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Ce projet est d&#233;velopp&#233; par l'&#233;quipe P8, compos&#233;e de :&lt;/p&gt; &lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&quot;row_even&quot;&gt;&lt;td&gt; &lt;strong class=&quot;spip&quot;&gt;&#201;quipe P8 &lt;i class=&quot;spip&quot;&gt;(ordre alphab&#233;tique)&lt;/h2&gt;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_odd&quot;&gt;&lt;td&gt; Alexandre Bolduc &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_even&quot;&gt;&lt;td&gt; Louis-Philippe Brault &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_odd&quot;&gt;&lt;td&gt; Vincent Chouinard &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_even&quot;&gt;&lt;td&gt; Jean-Fran&#231;ois Duval &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_odd&quot;&gt;&lt;td&gt; S&#233;bastien Gagnon &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_even&quot;&gt;&lt;td&gt; Simon Marcoux &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_odd&quot;&gt;&lt;td&gt; Eug&#232;ne Morin &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_even&quot;&gt;&lt;td&gt; Guillaume Plourde &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;row_odd&quot;&gt;&lt;td&gt; Simon St-Hilaire &lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Fichiers de d&#233;veloppement :&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Vous pouvez cliquer sur les vignettes en bas de l'article pour t&#233;l&#233;charger le projet (Microchip C18 + Cadsoft Eagle 5.0).&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://www.aqra.ca/IMG/png_sch1.png" length="70286" type="image/png" />
		
		<enclosure url="http://www.aqra.ca/IMG/png_sch2.png" length="56297" type="image/png" />
		
		<enclosure url="http://www.aqra.ca/IMG/zip_zip_botus.zip" length="49207" type="application/zip" />
		
		<enclosure url="http://www.aqra.ca/IMG/zip_zip_CBOTUS.zip" length="68228" type="application/zip" />
		
		<enclosure url="http://www.aqra.ca/IMG/png_fsch1.png" length="142427" type="image/png" />
		
		<enclosure url="http://www.aqra.ca/IMG/png_fsch2.png" length="127137" type="image/png" />
		
		<enclosure url="http://www.aqra.ca/IMG/png_fsch3.png" length="98419" type="image/png" />
		
		<enclosure url="http://www.aqra.ca/IMG/jpg_botus_2.jpg" length="19681" type="image/jpeg" />
		
		<enclosure url="http://www.aqra.ca/IMG/jpg_botus_3.jpg" length="19898" type="image/jpeg" />
		
		<enclosure url="http://www.aqra.ca/IMG/jpg_botus_4.jpg" length="32536" type="image/jpeg" />
		
		<enclosure url="http://www.aqra.ca/IMG/jpg_botus_5.jpg" length="17611" type="image/jpeg" />
		
		<enclosure url="http://www.aqra.ca/IMG/jpg_botus_7.jpg" length="22408" type="image/jpeg" />
		
		<enclosure url="http://www.aqra.ca/IMG/gif_botus.gif" length="42" type="image/gif" />
		

	</item>



	<item>
		<title>Conception m&#233;canique 2008</title>
		<link>http://www.aqra.ca/Conception-mecanique-2008</link>
		<guid isPermaLink="true">http://www.aqra.ca/Conception-mecanique-2008</guid>
		<dc:date>2008-07-10T21:20:46Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phan Couture</dc:creator>

<category domain="http://www.aqra.ca/-Robotique-">Robotique</category>


		<description>Plusieurs crit&#232;res furent consid&#233;r&#233;s lors de la conception m&#233;canique du robot. &#201;videmment, les restrictions impos&#233;es par les r&#232;glements du concours venaient en t&#234;te de liste. L'exp&#233;rience de l'ann&#233;e derni&#232;re a &#233;galement fournit une ligne directrice aux concepteurs. Plusieurs probl&#232;mes simples purent donc &#234;tre &#233;vit&#233;s, ceci amenant un d&#233;veloppement plus rapide et efficace. &lt;br /&gt;Le document PDF joint pr&#233;sente un r&#233;sum&#233; de mon travail pour Eurobot 2008 : description de la conception et r&#233;alisation (...)


-
&lt;a href="http://www.aqra.ca/-Robotique-" rel="directory"&gt;Robotique&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;Plusieurs crit&#232;res furent consid&#233;r&#233;s lors de la conception m&#233;canique du robot. &#201;videmment, les restrictions impos&#233;es par les r&#232;glements du concours venaient en t&#234;te de liste. L'exp&#233;rience de l'ann&#233;e derni&#232;re a &#233;galement fournit une ligne directrice aux concepteurs. Plusieurs probl&#232;mes simples purent donc &#234;tre &#233;vit&#233;s, ceci amenant un d&#233;veloppement plus rapide et efficace.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_624 spip_documents spip_documents_center' &gt; &lt;img src='http://www.aqra.ca/IMG/cache-520x657/png_robot_alone-520x657.png' width='520' height='657' alt=&quot;Mod&#233;lisation du robot&quot; title=&quot;Mod&#233;lisation du robot&quot; /&gt;
&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le document PDF joint pr&#233;sente un r&#233;sum&#233; de mon travail pour Eurobot 2008 : description de la conception et r&#233;alisation m&#233;canique.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://www.aqra.ca/IMG/pdf_projet_f_meca.pdf" length="210745" type="application/pdf" />
		

	</item>



	<item>
		<title>Conception &#233;lectronique et logicielle [Eurobot OPEN 2008]</title>
		<link>http://www.aqra.ca/Conception-electronique-et</link>
		<guid isPermaLink="true">http://www.aqra.ca/Conception-electronique-et</guid>
		<dc:date>2008-07-10T17:01:08Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Fran&#231;ois Duval</dc:creator>

<category domain="http://www.aqra.ca/-Robotique-">Robotique</category>


		<description>Cette page pr&#233;sente le syst&#232;me &#233;lectronique du robot Eurobot 2008 de l'AQRA. &lt;br /&gt;Sch&#233;ma de haut niveau de l'organisation &#233;lectronique du robot &lt;br /&gt;Cartes du CoreEB2k8 &lt;br /&gt;Le CoreEB2k8 est le c&#339;ur du robot. C'est l'unit&#233; de contr&#244;le principale, qui regroupe toutes les cartes logiques. La communication avec les cartes de puissance se fait toujours par le biais d'un bus de communication I2C ou de lignes logiques d&#233;di&#233;es. &lt;br /&gt;Carte M&#232;re et Interface Homme-Machine &lt;br /&gt;La carte M&#232;re est le cerveau principal du robot. Elle (...)


-
&lt;a href="http://www.aqra.ca/-Robotique-" rel="directory"&gt;Robotique&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;Cette page pr&#233;sente le syst&#232;me &#233;lectronique du robot Eurobot 2008 de l'AQRA.&lt;/p&gt; &lt;h2&gt;Sch&#233;ma de haut niveau de l'organisation &#233;lectronique du robot&lt;/h2&gt;
&lt;div class='spip_document_687 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_elec_final.png&quot; type=&quot;image/png&quot; title='PNG - 581.3 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x92/png_elec_final-150x92-150x92.png' width='150' height='92' alt=&quot;PNG - 581.3 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;Cartes du CoreEB2k8&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Le CoreEB2k8 est le c&#339;ur du robot. C'est l'unit&#233; de contr&#244;le principale, qui regroupe toutes les cartes logiques. La communication avec les cartes de puissance se fait toujours par le biais d'un bus de communication I2C ou de lignes logiques d&#233;di&#233;es.&lt;/p&gt; &lt;h3&gt;Carte M&#232;re et Interface Homme-Machine&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;La carte M&#232;re est le cerveau principal du robot. Elle contient un dsPIC20F4013 qui agit comme gestionnaire des comportements du robot. Toutes les strat&#233;gies de haut niveau du fonctionnement du robot y sont cod&#233;es. Entre autre en &#233;tant le ma&#238;tre du bus I2C, c'est cette carte qui contr&#244;le et coordonne toutes les autres cartes. Sur la carte est aussi pr&#233;sent un petit microcontr&#244;leur PIC18F1320 d&#233;di&#233; &#224; la gestion du Timer90s, la minuterie qui g&#232;re le temps lors d'un match. La carte m&#232;re supporte directement la carte Interface Homme-Machine, qui n'est qu'un support pour son interface avec l'usager. Les boutons, l'afficheur LCD de 4 lignes de 20 caract&#232;res et les afficheurs 7 segments &#224; dels pr&#233;sents servent &#224; la pr&#233;paration des matchs et au d&#233;bogage.
En situation normale de match, suite &#224; sa mise sous tension elle demande &#224; l'op&#233;rateur quelle strat&#233;gie adopter puis elle attend le signal de d&#233;part. D&#232;s que le signal est re&#231;u, elle d&#233;marre la minuterie de 90 secondes et commence son cycle de fonctionnement : questionnements des capteurs de position, questionnement de la cam&#233;ra par le biais de l'ordinateur embarqu&#233;, calcul des actions &#224; effectuer et mouvements.&lt;/p&gt; &lt;div class='spip_document_673 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_main.png&quot; type=&quot;image/png&quot; title='PNG - 164.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x104/png_main-150x104-150x104.png' width='150' height='104' alt=&quot;PNG - 164.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_674 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_main_b.png&quot; type=&quot;image/png&quot; title='PNG - 81.8 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x114/png_main_b-150x114-150x114.png' width='150' height='114' alt=&quot;PNG - 81.8 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_671 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_ihm.png&quot; type=&quot;image/png&quot; title='PNG - 79.5 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_ihm.png' width='520' height='359' alt=&quot;PNG - 79.5 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_672 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_ihm_b.png&quot; type=&quot;image/png&quot; title='PNG - 48.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_ihm_b.png' width='520' height='406' alt=&quot;PNG - 48.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Carte Actionneurs et Barillet&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Cette carte est d&#233;di&#233;e &#224; la manipulation des balles, par le biais de quelques capteurs et plusieurs actionneurs. Deux servos-moteurs1, dont un fonctionnant en miroir2, permettent aux pinces de saisir les balles dans les distributeurs. La turbine permet de les aspirer dans le barillet. Ce barillet, mis en mouvement par un puissant moteur pas-&#224;-pas, peut ensuite tourner et se positionner pr&#233;cis&#233;ment sur l'entr&#233;e des balles, sur le canon ou sur le capteur de couleur. Lorsqu'une balle est mise en position du canon, un servomoteur, le bloqueur, change de position pour lib&#233;rer l'acc&#232;s aux roulettes de propulsion. Un autre servomoteur, le pousseur, frappe la balle et l'envoie entre les deux roues de mousse qui l'exp&#233;dieront dans un conteneur.&lt;/p&gt; &lt;div class='spip_document_653 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_action-2.png&quot; type=&quot;image/png&quot; title='PNG - 159.8 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_action-2.png' width='520' height='349' alt=&quot;PNG - 159.8 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_654 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_action_b.png&quot; type=&quot;image/png&quot; title='PNG - 63.8 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x120/png_action_b-150x120-150x120.png' width='150' height='120' alt=&quot;PNG - 63.8 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Capteurs&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Le robot &#233;volue dans un environnement relativement complexe, en pr&#233;sence d'un autre robot et de plusieurs &#233;l&#233;ments de jeu. Afin de pouvoir effectuer les actions voulues, il doit &#233;viter l'adversaire, doit pouvoir d&#233;terminer la couleur des balles et o&#249; les placer. Plusieurs capteurs permettent de connaitre au mieux possible les obstacles dans l'entourage du robot. Pour ce faire, plusieurs t&#233;l&#233;m&#232;tres infrarouges sont utilis&#233;s. Ils ont une sortie en tension li&#233;e &#224; la distance. La conversion analogique &#224; num&#233;rique ce fait par le microcontr&#244;leur et une table de conversion nous donne une distance en mm. Un t&#233;l&#233;m&#232;tre ultrason &#224; l'avant du robot permet une d&#233;tection plus fiable : il n'est pas handicap&#233; par des surfaces tr&#232;s transparentes ou miroir. Quelques autres capteurs simples sont utilis&#233;s en plus, afin d'obtenir un maximum d'informations. La carte peut aussi contr&#244;ler une tourelle rotative (pas utilis&#233;e pour le moment) qui permet de s'orienter plus facilement sur le but. Toutes les donn&#233;es de ces capteurs sont trait&#233;es sur la carte Capteurs et la carte M&#232;re peut les lire par le bus I2C au besoin.&lt;/p&gt; &lt;div class='spip_document_679 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_sensor.png&quot; type=&quot;image/png&quot; title='PNG - 229.9 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-520x722/png_sensor-520x722.png' width='520' height='722' alt=&quot;PNG - 229.9 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_681 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_sensor_b.png&quot; type=&quot;image/png&quot; title='PNG - 112.6 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_sensor_b.png' width='520' height='414' alt=&quot;PNG - 112.6 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Alimentation&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Alimentation fournit les tensions n&#233;cessaires aux cartes du CoreEB2k8 et &#224; certaines cartes externes. Les circuits de logique n&#233;cessitent un 5V bien r&#233;gul&#233;. Les servomoteurs fonctionnent aussi &#224; 5V, mais en consommant et en parasitant beaucoup, ce qui rend difficile la cohabitation sur une m&#234;me alimentation. En entr&#233;e de la carte Alimentation se trouvent les deux accumulateurs 9.6V. Autant du c&#244;t&#233; propre que du c&#244;t&#233; sale, le 9.6V est convertit par de petites alimentations &#224; d&#233;coupage1 en 5V. Il circule donc dans le robot des alimentations propres (9.6 et 5V) et sales (9.6 et 5V) qui proviennent de la carte Alimentations. Notons que la masse est commune pour les tensions sales et l'accumulateur 36V.&lt;/p&gt; &lt;div class='spip_document_657 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_alim.png&quot; type=&quot;image/png&quot; title='PNG - 73.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x104/png_alim-150x104-150x104.png' width='150' height='104' alt=&quot;PNG - 73.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_658 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_alim_b.png&quot; type=&quot;image/png&quot; title='PNG - 37.5 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-520x427/png_alim_b-520x427.png' width='520' height='427' alt=&quot;PNG - 37.5 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Back&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;La carte Back est simplement le support du BusEB2k8. Toutes les autres cartes s'enfichent sur elle.&lt;/p&gt; &lt;div class='spip_document_661 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_back.png&quot; type=&quot;image/png&quot; title='PNG - 74.6 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x104/png_back-150x104-150x104.png' width='150' height='104' alt=&quot;PNG - 74.6 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_662 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_back_b.png&quot; type=&quot;image/png&quot; title='PNG - 60.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_back_b.png' width='520' height='739' alt=&quot;PNG - 60.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;Cartes externes&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Plusieurs cartes sont externes au CoreEB2k8. Ce sont principalement des interfaces de puissance pour les actionneurs ou des adaptateurs de signaux.&lt;/p&gt; &lt;h3&gt;PIMD3.1&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;PIMD est un acronyme de Powerful and Intelligent Motor Driver. Les cartes PIMD sont une petite s&#233;rie de cartes d&#233;velopp&#233;es pour Eurobot. La version actuelle, la 3.1, permet le contr&#244;le en puissance d'un moteur allant jusqu'&#224; 36V 3A (6A en pointe). Elle comporte un microcontr&#244;leur dont la t&#226;che est l'asservissement de vitesse et la g&#233;n&#233;ration de profils (acc&#233;l&#233;ration positive et n&#233;gative, courbes trap&#233;zo&#239;dales, etc.) de vitesse. Reli&#233;e au bus I2C, elle re&#231;oit des ordres de haut niveau, tel que &#171; Acc&#233;l&#232;re jusqu'&#224; 560mm/s &#187; et pilote le moteur en cons&#233;quence. Deux de ces cartes sont utilis&#233;es dans le robot, une pour chaque moteur de propulsion. L'information de vitesse provient des g&#233;n&#233;ratrices des moteurs.&lt;/p&gt; &lt;div class='spip_document_675 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_pimd31.png&quot; type=&quot;image/png&quot; title='PNG - 141.6 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x96/png_pimd31-150x96-150x96.png' width='150' height='96' alt=&quot;PNG - 141.6 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_676 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_pimd31_b.png&quot; type=&quot;image/png&quot; title='PNG - 62.6 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-520x343/png_pimd31_b-520x343.png' width='520' height='343' alt=&quot;PNG - 62.6 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Power Stepper&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Le barillet est un dispositif m&#233;canique compos&#233; de 5 tubes mont&#233;s sur un disque rotatif. Il permet la collecte, le tri et l'&#233;jection des balles. Il doit donc &#234;tre positionn&#233; pr&#233;cis&#233;ment. Un puissant moteur pas-&#224;-pas le fait bouger. La carte Power Stepper comprend de la logique de contr&#244;le et une interface de puissance. Elle permet de contr&#244;ler en pas entier ou en demis pas des moteurs bipolaires consommant jusqu'&#224; 4A par phase.&lt;/p&gt; &lt;div class='spip_document_677 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_pwr_stp.png&quot; type=&quot;image/png&quot; title='PNG - 98.4 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_pwr_stp.png' width='520' height='359' alt=&quot;PNG - 98.4 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_678 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_pwrstp_b.png&quot; type=&quot;image/png&quot; title='PNG - 45.6 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x104/png_pwrstp_b-150x104-150x104.png' width='150' height='104' alt=&quot;PNG - 45.6 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Canon&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Le canon sert &#224; l'&#233;jection des balles. Il est compos&#233; de deux moteurs CC. La distance du tir d&#233;pend de la vitesse de ces moteurs. La carte canon est simplement une interface de puissance qui achemine le PWM provenant de la carte Actionneurs, par le biais de drivers de Mosfets1 et de Mosfets de puissance, aux moteurs.&lt;/p&gt; &lt;div class='spip_document_667 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_canon.png&quot; type=&quot;image/png&quot; title='PNG - 51.9 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_canon.png' width='520' height='359' alt=&quot;PNG - 51.9 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_668 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_canon_b.png&quot; type=&quot;image/png&quot; title='PNG - 16.7 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x75/png_canon_b-150x75-150x75.png' width='150' height='75' alt=&quot;PNG - 16.7 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Turbine&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;La turbine est utilis&#233;e pour faire entrer les balles dans le barillet. Elle est compos&#233;e d'un moteur CC et d'un ventilateur particulier. La puissance &#233;lectrique consomm&#233;e est consid&#233;rable : de l'ordre de la dizaine d'amp&#232;res sous 15.6V. La tension moyenne de 15.6V, nominale &#224; ce moteur, est obtenue par la batterie 36V et du PWM. La carte Turbine est l'interface de puissance, contr&#244;lant le moteur par le biais d'un gros Mosfet.&lt;/p&gt; &lt;div class='spip_document_682 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_turb.png&quot; type=&quot;image/png&quot; title='PNG - 54.2 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x96/png_turb-150x96-150x96.png' width='150' height='96' alt=&quot;PNG - 54.2 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_683 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_turb_b.png&quot; type=&quot;image/png&quot; title='PNG - 15.4 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_turb_b.png' width='520' height='265' alt=&quot;PNG - 15.4 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Adapteur de couleur&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Si un objet nous semble rouge, c'est car il refl&#232;te le rouge. Un objet semble blanc quand il refl&#232;te bien toutes les couleurs. La lecture de couleur est faite par un capteur maison bas&#233; sur ce principe. La t&#234;te de lecture est compos&#233;e d'une diode &#233;lectroluminescente RGB1 et d'un petit circuit int&#233;gr&#233; comportant une photodiode et son convertisseur courant tension. La balle est &#233;clair&#233;e successivement par du bleu et du rouge, les sources &#233;tant puls&#233;es &#224; 1kHz. Chaque couleur de balle absorbe plus ou moins le bleu ou le rouge, ce qui fait que la lecture de tension faite sur le capteur est li&#233;e &#224; la couleur. L'excitation &#224; 1kHz, en conjonction avec un filtre passe-haut de quelques centaines de Hertz en sortie du d&#233;tecteur permet de s'immuniser &#224; la lumi&#232;re ambiante. Le signal de retour est filtr&#233; puis compar&#233;. Un PIC 18F1320 s'occupe de la modulation des sources et du d&#233;codage des couleurs. La couleur d&#233;cod&#233;e est envoy&#233;e &#224; la carte Actionneurs.&lt;/p&gt; &lt;div class='spip_document_655 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_adapt_color.png&quot; type=&quot;image/png&quot; title='PNG - 92.3 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x104/png_adapt_color-150x104-150x104.png' width='150' height='104' alt=&quot;PNG - 92.3 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_656 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_adapt_color_b.png&quot; type=&quot;image/png&quot; title='PNG - 38 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-520x274/png_adapt_color_b-520x274.png' width='520' height='274' alt=&quot;PNG - 38 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_669 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_colorh.png&quot; type=&quot;image/png&quot; title='PNG - 44.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_colorh.png' width='520' height='359' alt=&quot;PNG - 44.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_670 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_colorh_b.png&quot; type=&quot;image/png&quot; title='PNG - 8.6 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-413x249/png_colorh_b-413x249.png' width='413' height='249' alt=&quot;PNG - 8.6 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Alim Control&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Il est impos&#233; par le r&#232;glement que le robot ne doit bouger qu'apr&#232;s le coup d'envoie d'un match et qu'il doit s'immobiliser compl&#232;tement apr&#232;s 90 secondes. La m&#233;thode la plus s&#233;curitaire pour s'assurer que tout s'arr&#234;te est de couper l'alimentation. La carte de contr&#244;le de l'alimentation fait donc le lien entre la batterie principale et tous les circuits n&#233;cessitant du 36V. Un relais et un bouton d'arr&#234;t d'urgence sont en s&#233;rie : il suffit donc que l'un ou l'autre soir ouvert pour que tout s'arr&#234;te. Sur la carte est aussi pr&#233;sent le connecteur de d&#233;part, un jack audio utilis&#233; en simple commutateur qui permet &#224; l'op&#233;rateur de d&#233;marrer le robot &#224; distance.&lt;/p&gt; &lt;div class='spip_document_659 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_alim_ct.png&quot; type=&quot;image/png&quot; title='PNG - 47.8 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_alim_ct.png' width='520' height='359' alt=&quot;PNG - 47.8 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_660 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_alim_ct_b.png&quot; type=&quot;image/png&quot; title='PNG - 23.1 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/png_alim_ct_b.png' width='520' height='223' alt=&quot;PNG - 23.1 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;USB-Serie&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Plusieurs des cartes poss&#232;dent une sortie pour port s&#233;rie. Comme l'ordinateur portable utilis&#233; ne poss&#232;de pas de port s&#233;rie, ce petit convertisseur &#233;mule un port s&#233;rie depuis un port USB et permet aux diff&#233;rentes cartes d'exporter des donn&#233;es sur un terminal.&lt;/p&gt; &lt;div class='spip_document_684 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_usb.png&quot; type=&quot;image/png&quot; title='PNG - 58.3 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x104/png_usb-150x104-150x104.png' width='150' height='104' alt=&quot;PNG - 58.3 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='spip_document_685 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/png_usb_b.png&quot; type=&quot;image/png&quot; title='PNG - 15.6 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-150x88/png_usb_b-150x88-150x88.png' width='150' height='88' alt=&quot;PNG - 15.6 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;Fichiers&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Le document PDF joint pr&#233;sente un r&#233;sum&#233; de mon travail pour Eurobot 2008 : description de la conception &#233;lectronique et de la programmation embarqu&#233;e.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le fichier elec_Eurobot_Open_2k8.zip contient tous les plans &#233;lectroniques utilis&#233;s pour le robot 2008. &#192; ouvrir avec Cadsoft Eagle 4.16r2 ou plus.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les fichiers sources se trouvent dans CodeEurobot2008.7z.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Tous les dessins et sources fournis sont libre d'usage pour une utilisation non-commerciale.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://www.aqra.ca/IMG/pdf_rapport_projet_2_elec_prog.pdf" length="4204841" type="application/pdf" />
		
		<enclosure url="http://www.aqra.ca/IMG/zip_zip_elec_Eurobot_OPEN_2k8.zip" length="1970694" type="application/zip" />
		
		<enclosure url="http://www.aqra.ca/IMG/zip_CodeEurobot2008.7z.zip" length="364832" type="application/zip" />
		

	</item>



	<item>
		<title>MPLAB 7.60 sous Linux</title>
		<link>http://www.aqra.ca/MPLAB-7-60-sous-Linux</link>
		<guid isPermaLink="true">http://www.aqra.ca/MPLAB-7-60-sous-Linux</guid>
		<dc:date>2007-10-09T02:13:55Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierre-Luc Bacon</dc:creator>

<category domain="http://www.aqra.ca/-Linux-">Linux</category>


		<description>Si vous &#234;tes &#224; conserver un syst&#232;me Windows que pour utiliser l'environnement de d&#233;veloppement natif pour les PIC, il devient vite int&#233;ressant d'y trouver une alternative sous Linux. Utiliser une solution de virtualisation est valable, &#233;videmment, mais constitue aussi un gaspille en ressource &#233;vitable. Ne reste plus alors que Wine, heureusement, pour demeurer dans le confort de son Linux en tout temps. Voici quelques notes qui permettront d'&#233;viter quelques probl&#232;mes li&#233;s en autre au d&#233;marrage du (...)

-
&lt;a href="http://www.aqra.ca/-Linux-" rel="directory"&gt;Linux&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;Si vous &#234;tes &#224; conserver un syst&#232;me Windows que pour utiliser l'environnement de d&#233;veloppement natif pour les PIC, il devient vite int&#233;ressant d'y trouver une alternative sous Linux. Utiliser une solution de virtualisation est valable, &#233;videmment, mais constitue aussi un gaspille en ressource &#233;vitable. Ne reste plus alors que Wine, heureusement, pour demeurer dans le confort de son Linux en tout temps. Voici quelques notes qui permettront d'&#233;viter quelques probl&#232;mes li&#233;s en autre au d&#233;marrage du logiciel.&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;Les instructions suivantes ont &#233;t&#233; appliqu&#233;es sous Ubuntu (Feisty).&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; $ sudo apt-get install wine cabextract&lt;br /&gt;&lt;/code&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;Recommen&#231;ons &#224; neuf si une tentative infructueuse a &#233;t&#233; tent&#233;e :&lt;/i&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;$ rm .wine/drive_c/Program Files/Microchip -rf &lt;/code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;winetrick permet d'installer facilement les librairies dynamiques n&#233;cessaires &#224; l'ex&#233;cution de MPLAB :&lt;/i&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; $ wget http://kegel.com/wine/winetricks&lt;br /&gt; $ sh winetricks vcrun6&lt;br /&gt; $ wget http://ww1.microchip.com/downloads/en/DeviceDoc/mp760a.zip&lt;br /&gt; $ unzip mp760a.zip -d microchip&lt;br /&gt; $ wine Install_MP760a.exe&lt;br /&gt;&lt;/code&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;&lt;i class=&quot;spip&quot;&gt;Pour faire dispara&#238;tre la fen&#234;tre &#224; la fin de l'installation :&lt;/i&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;br /&gt; $ wineserver -k &lt;br /&gt;&lt;/code&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;&lt;code&gt;
$ sh winetricks dcom98
$ wine .wine/drive_c/Program Files/Microchip/MPLAB IDE/Core/MPLAB.exe
&lt;code&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;MPLAB est maintenant lanc&#233;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;C30 a &#233;t&#233; install&#233; sans aucune recommandation particuli&#232;re. En ce qui a trait au ICD2, je ne peux confirmer encore de mon exp&#233;rience qu'il fonctionne bel et bien avec cette installation. Il est fort possible qu'on ait d'abord &#224; cr&#233;er un lien symbolique dans /.wine/dosdevices nomm&#233; com1 sur /dev/ttyS0.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Voir en ligne :&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://appdb.winehq.org/objectManager.php?sClass=version&amp;iId=2709&quot; class=&quot;spip_out&quot;&gt;Application database sur winehq.org&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.nabble.com/-Bug-8407&#8212;MPLab-7.60-hangs-at-splash-screen-t3765354.html&quot; class=&quot;spip_out&quot;&gt;Probl&#232;me au d&#233;marrage&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://www.aqra.ca/IMG/png_programmer.png" length="32728" type="image/png" />
		
		<enclosure url="http://www.aqra.ca/IMG/png_mplab.png" length="34063" type="image/png" />
		
		<enclosure url="http://www.aqra.ca/IMG/png_wizard.png" length="90745" type="image/png" />
		

	</item>



	<item>
		<title>Port s&#233;rie en C sous Linux</title>
		<link>http://www.aqra.ca/Port-serie-en-C-sous-Linux</link>
		<guid isPermaLink="true">http://www.aqra.ca/Port-serie-en-C-sous-Linux</guid>
		<dc:date>2007-06-14T22:26:08Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierre-Luc Bacon</dc:creator>

<category domain="http://www.aqra.ca/-Programmation-">Programmation</category>


		<description>Sommaire &lt;br /&gt;Le port parall&#232;le peut semble plus simple &#224; utiliser &#224; bien des &#233;gards quand vient le temps d&#233;terminer l'interface de communication avec un robot. Toutefois, celui-ci est appel&#233; &#224; dispara&#238;tre sur le nouveau mat&#233;riel et est bien souvent absent des cartes m&#232;res embarqu&#233;es (single board computer). Certes, il en est de m&#234;me pour le port s&#233;rie, mais les adapteurs usb/s&#233;rie sont tr&#232;s faciles &#224; trouver. Notons ici que FTDI Chip produit le FT245 ; FT245 qui permet d'obtenir une liaison parall&#232;le virtuelle (...)


-
&lt;a href="http://www.aqra.ca/-Programmation-" rel="directory"&gt;Programmation&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2&gt;Sommaire&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Le port parall&#232;le peut semble plus simple &#224; utiliser &#224; bien des &#233;gards quand vient le temps d&#233;terminer l'interface de communication avec un robot. Toutefois, celui-ci est appel&#233; &#224; dispara&#238;tre sur le nouveau mat&#233;riel et est bien souvent absent des cartes m&#232;res embarqu&#233;es (single board computer). Certes, il en est de m&#234;me pour le port s&#233;rie, mais les adapteurs usb/s&#233;rie sont tr&#232;s faciles &#224; trouver. Notons ici que FTDI Chip produit le &lt;a href=&quot;http://www.ftdichip.com/Products/FT245R.htm&quot; class=&quot;spip_out&quot; title=&quot;FT245&quot;&gt;FT245&lt;/a&gt; qui permet d'obtenir une liaison parall&#232;le virtuelle au travers d'un port USB.&lt;/p&gt; &lt;h2&gt;Ouverture et fermeture du port&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Les fonctions qui permettent de r&#233;aliser ces op&#233;rations sont les m&#234;mes que celles utilis&#233;es courament dans les syst&#232;mes UNIX : open() et close() serviront donc, vous l'aurez devin&#233;.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='9' class='spip_cadre' dir='ltr'&gt;int srl_handle; srl_handle=open(&quot;/dev/ttyUSB0&quot;, O_RDWR | O_NOCTTY | O_NDELAY); if(srl_handle&amp;lt;0) { perror(&quot;serial port open&quot;); exit(-1); }else { fcntl(srl_handle,F_SETFL,0); }&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Vous aurez ici remarqu&#233; que &lt;strong class=&quot;spip&quot;&gt;/dev/ttyUSB0&lt;/strong&gt; est pass&#233; &#224; la fonction open() plut&#244;t que &lt;strong class=&quot;spip&quot;&gt;/dev/ttyS0&lt;/strong&gt;. Ceci n'est applicable que si la notation retenue dans udev pour un adapteur usb/s&#233;rie est sous cette forme. Voyez &lt;strong class=&quot;spip&quot;&gt;dmesg&lt;/strong&gt; apr&#232;s branchement pour plus de d&#233;tails. M&#234;me si la liaison RS232 s'effectue par USB, l'interface de programmation ne change pas : le driver se charge de rendre opaque les d&#233;tails d'impl&#233;mentation USB.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;O_NOCTTY est une option permettant de sp&#233;cifier que le programme ne sera pas un &quot;&lt;i class=&quot;spip&quot;&gt;controlling terminal&lt;/i&gt;&quot; : un param&#232;tre pass&#233; presque &#224; tout coup pour la plupart des programmes.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;O_RDWR signifie que le fichier est ouvert en lecture et en &#233;criture.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;O_NDELAY sp&#233;cifie finalement de ne pas attendre un changement de ligne sur le signal DCD. Si cette option n'est pas pass&#233;e, le programme sera bloqu&#233; jusqu'&#224; ce que DCD passe &#224; l'&#233;tat bas.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La fonction fcntl est quant &#224; elle appel&#233;e pour permettre de r&#233;tablir le port s&#233;rie en mode bloquant pour la fonction read(). Ainsi, si aucun charact&#232;re n'est encore disponible en lecture, le programme attendra en ce point du programme.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La fermeture du port se fait avec la fonction close(), tout simplement :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;close(srl_handle);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;
&lt;h2&gt;Permissions&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Comme le port s&#233;rie est repr&#233;sent&#233; comme un fichier en &lt;i class=&quot;spip&quot;&gt;/dev&lt;/i&gt;, il sera n&#233;cessaire d'ex&#233;cuter le programme avec les droits de super-utilisateur root.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Sinon, il est possible de changer les droits d'acc&#232;s sur le fichier ou d'en changer le groupe. Voici quelques exemples sous Linux o&#249; le port s&#233;rie appara&#238;tra comme /dev/ttSx (/dev/cuaax sous FreeBSD).&lt;/p&gt; &lt;h3&gt;D&#233;finir l'acc&#232;s pour un nouveau groupe&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Cette solution est &#224; pr&#233;f&#233;rer.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'&gt;$ groupadd robot $ chgrp robot /dev/ttyS0 $ chmod 0060 /dev/ttyS0&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;
&lt;h3&gt;Donner acc&#232;s &#224; tous les utilisateurs possibles&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;&#192; &#233;viter si possible, mais tol&#233;rable en phase de test.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;$ chmod a+rw /dev/ttyS0&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt;
&lt;h3&gt;Donner l'acc&#232;s &#224; soit-m&#234;me seulement&lt;/h3&gt;
&lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;$ chown alice /dev/ttyS0 $ chmod 0600 /dev/ttyS0&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Prenez note que si votre syst&#232;me est configur&#233; avec &lt;a href=&quot;http://en.wikipedia.org/wiki/Udev&quot; class=&quot;spip_out&quot;&gt;udev&lt;/a&gt;, ces commandes n'auront pas un effet permanent apr&#232;s red&#233;marrage. Il sera alors n&#233;cessaire d'adapter un fichier de configuration g&#233;n&#233;ralement situ&#233; dans le r&#233;pertoire &lt;strong class=&quot;spip&quot;&gt;/etc/udev/rules.d/&lt;/strong&gt;&lt;/p&gt; &lt;h2&gt;L'interface POSIX&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;&lt;code class='spip_code' dir='ltr'&gt;&amp;lt;termios.h&amp;gt;&lt;/code&gt;&lt;/strong&gt; fournit les structures de contr&#244;le ainsi que les fonctions POSIX qui permettront de d&#233;finir les propri&#233;t&#233;s des laisons s&#233;rielles qui seront mises en place.&lt;/p&gt; &lt;h3&gt;Vitesse de connection&lt;/h3&gt;
&lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre' dir='ltr'&gt;struct termios options; tcgetattr(srl_handle, &amp;options); cfsetospeed(&amp;options, B19200); options.c_cflag |= (CLOCAL | CREAD);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Dans ce bout de code, une structure &lt;strong class=&quot;spip&quot;&gt;termios&lt;/strong&gt; est d&#233;clar&#233;e et initialis&#233;e par la fonction &lt;strong class=&quot;spip&quot;&gt;tcgetattr&lt;/strong&gt;. Cette structure comprend plusieurs membres qui seront assign&#233;s &#224; des valeurs d&#233;finies par des &lt;i class=&quot;spip&quot;&gt;#define&lt;/i&gt; en utilisant des op&#233;rateurs bit &#224; bit.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Dans cet exemple, &lt;strong class=&quot;spip&quot;&gt;cfsetospeed&lt;/strong&gt; est utilis&#233; car cette fonction permet de d&#233;finir la vitesse (le &quot;&lt;i class=&quot;spip&quot;&gt;baud rate&lt;/i&gt;&quot;) dans le membre appropri&#233; de la structure termios. En effet, certains syst&#232;mes POSIX ne d&#233;finissent pas cette valeur des le m&#234;me membre (c_flag, c_ispeed, ou c_ospeed), d'o&#249; le besoin d'une fonction ind&#233;pendante du syst&#232;me.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les options &lt;strong class=&quot;spip&quot;&gt;CLOCAL&lt;/strong&gt; et &lt;strong class=&quot;spip&quot;&gt;CREAD&lt;/strong&gt; sont d&#233;finies pour &#233;viter que le programme soit consid&#233;r&#233; en tant que propri&#233;taire du port. Pr&#233;cisons au passage que l'acc&#232;s aux membres de la structure devra toujours s'effectuer avec les op&#233;rateurs bit &#224; bit tel que montr&#233; ci-haut. Un OU binaire sert ici &#224; combiner les nouvelles options &#224; celles d&#233;j&#224; existantes dans le membre sans les &#233;craser.&lt;/p&gt; &lt;h3&gt;Bits de donn&#233;es (taille du charact&#232;re)&lt;/h3&gt;
&lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre' dir='ltr'&gt;options.c_cflag &amp;= ~CSIZE; options.c_cflag |= CS8;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Cette premi&#232;re ligne permet de mettre toute valeur pour cette option &#224; 0. CSIZE n'est donc ici qu'un masque &quot;&lt;i class=&quot;spip&quot;&gt;ni&#233;&lt;/i&gt;&quot; par &quot;&lt;code class='spip_code' dir='ltr'&gt;~&lt;/code&gt;&quot; et affect&#233; &#224; c_cflag par l'op&#233;rateur binaire &quot;&amp;&quot; (ET). CS8 (8 bits) peut ensuite &#234;tre attribu&#233; au membre par un OU binaire qui renverra n&#233;cessairement CS8 puisque les bits du masque sont maintenant tous &#224; 0. Rappelons-nous que le fonctionnement du OU peut se r&#233;sumer &#224; : &quot;l'un, ou l'autre, ou les deux en m&#234;me temps&quot;. Dans ce cas, &quot;l'un&quot; suffit &#224; faire &#233;galer le r&#233;sultat &#224; la valeur exacte de CS8.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Notez que CS5, CS6 et CS7 sont aussi disponibles.&lt;/p&gt; &lt;h3&gt;Parit&#233;&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Si on ne choisit pas de m&#233;thode de v&#233;rification par parit&#233; pour les donn&#233;es envoy&#233;es, c_flag devra &#234;tre d&#233;fini ainsi :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre' dir='ltr'&gt;options.c_cflag &amp;= ~PARENB; options.c_cflag &amp;= ~CSTOPB; options.c_cflag &amp;= ~CSIZE; options.c_cflag |= CS8;&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Avec CSIZE et CSTOPB, on reconna&#238;t ici la configuration 8N1 : 8 bits de donn&#233;es (&lt;strong class=&quot;spip&quot;&gt;8&lt;/strong&gt;), pas de parit&#233; (&lt;strong class=&quot;spip&quot;&gt;N&lt;/strong&gt;) et 1 bit d'arr&#234;t (&lt;strong class=&quot;spip&quot;&gt;1&lt;/strong&gt;),&lt;/p&gt; &lt;h3&gt;Application des attributs&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Apr&#232;s avoir d&#233;fini la structure termios avec les options voulues, elles doivent &#234;tre appliqu&#233;es par la fonction &lt;strong class=&quot;spip&quot;&gt;tcsetattr&lt;/strong&gt;.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;tcsetattr(srl_handle, TCSANOW, &amp;options);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;TCSANOW&lt;/strong&gt; indique que les changements doivent &#234;tre appliqu&#233;s imm&#233;diatement sans attendre la fin des donn&#233;es en entr&#233;e ou en sortie.&lt;/p&gt; &lt;h2&gt;Envoi des donn&#233;es&lt;/h2&gt; &lt;p class=&quot;spip&quot;&gt;Cette op&#233;ration s'effectuera avec le simple appel de la fonction &lt;strong class=&quot;spip&quot;&gt;write&lt;/strong&gt;.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;if (write(srl_handle, &quot;g&quot;, 1) &amp;lt; 0){perror(&quot;write:&quot;);}&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;Le troisi&#232;me argument de la fonction indique le nombre d'octets &#224; &#233;crire. Lorsque les donn&#233;es ont pu &#234;tre envoy&#233;es, le nombre d'octets &#233;crits est retourn&#233;.&lt;/p&gt; &lt;h2&gt;Lecture&lt;/h2&gt;
&lt;h3&gt;Mode non bloquant&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Comme sp&#233;cifi&#233; plus haut, la fonction read() qui permet de lire les donn&#233;es sur le port s&#233;rie peut &#234;tre configur&#233;e en mode bloquant ou non. En effet par un appel &#224; fcntl() avec l'option &lt;strong class=&quot;spip&quot;&gt;FNDELAY&lt;/strong&gt;, read() retournera imm&#233;diatement avec la valeur 0 si aucune donn&#233;e n'est actuellement disponible.&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;fcntl(srl_handle, F_SETFL, FNDELAY);&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;La syntaxe de la fonction read est quant &#224; elle identique &#224; write :&lt;/p&gt; &lt;form action=&quot;/&quot; method=&quot;get&quot;&gt;&lt;div&gt;&lt;textarea readonly='readonly' cols='40' rows='1' class='spip_cadre' dir='ltr'&gt;if(read(srl_handle, buffer, 4) &amp;lt; 0){perror(&quot;read&quot;);}&lt;/textarea&gt;&lt;/div&gt;&lt;/form&gt; &lt;p class=&quot;spip&quot;&gt;O&#249; &lt;i class=&quot;spip&quot;&gt;buffer&lt;/i&gt; est un pointeur sur le tableau qui contiendra les donn&#233;es et &quot;4&quot; , dans cet exemple, le nombre d'octets &#224; copier dans cet espace.
&lt;/cadre&gt;&lt;/p&gt; &lt;h3&gt;select&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;Dans bien des cas, des contraintes de temps de r&#233;ponse sont exig&#233;es dans un programme. En effet, plusieurs t&#226;ches doivent souvent &#234;tre ex&#233;cut&#233;es simultan&#233;ment. Un appel &#224; la fonction read peut ainsi compliquer quelque peu l'organisation du programme puisque deux choix pourraient s'offrir &#224; priori : attendre les donn&#233;es (mode bloquant), ou faire un &lt;i class=&quot;spip&quot;&gt;pooling&lt;/i&gt; sur read. La fonction &lt;strong class=&quot;spip&quot;&gt;select&lt;/strong&gt; peut alors s'av&#233;rer utile pour surveiller l'&#233;tat de plusieurs descripteurs de fichiers en m&#234;me temps. On pourrait par exemple d&#233;finir un ensemble &lt;i class=&quot;spip&quot;&gt;socket&lt;/i&gt; et &lt;i class=&quot;spip&quot;&gt;port s&#233;rie&lt;/i&gt; et &#224; l'arriv&#233;e de donn&#233;e sur l'un ou l'autre des descripteurs, &lt;i class=&quot;spip&quot;&gt;select&lt;/i&gt; renverrait une valeur sup&#233;rieure &#224; 0. On s'&#233;vite ainsi un &lt;i class=&quot;spip&quot;&gt;pooling&lt;/i&gt; syst&#233;matique pour chaque fichier &#224; surveiller. [&lt;a href=&quot;http://www.aqra.ca/#nb9-1&quot; name=&quot;nh9-1&quot; id=&quot;nh9-1&quot; class=&quot;spip_note&quot; title='[1] Un exemple de select : Using the SELECT System Call.' &gt;1&lt;/a&gt;]&lt;/p&gt; &lt;h3&gt;signal&lt;/h3&gt; &lt;p class=&quot;spip&quot;&gt;La programmation d'une routine de communication sur le port s&#233;rie pour un microcontr&#244;leur aurait &#233;t&#233; facilement r&#233;alis&#233;e par un m&#233;canisme d'interruptions. Toutefois, les interruptions mat&#233;rielles &#224; proprement dit ne sont pas accessibles dans l'espace utilisateur du syst&#232;me. Seul un pseudo-m&#233;canisme d'interruptions seraient alors envisageable par la programmation d'un &lt;i class=&quot;spip&quot;&gt;driver&lt;/i&gt; qui enverrait un signal &#224; un programme de l'espace d'utilisateur. [&lt;a href=&quot;http://www.aqra.ca/#nb9-2&quot; name=&quot;nh9-2&quot; id=&quot;nh9-2&quot; class=&quot;spip_note&quot; title='[2] Voir opening bananas with steamrollers.' &gt;2&lt;/a&gt;]&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Aussi, l'utilisation d'une extension temps r&#233;elle au noyau permettrait de r&#233;aliser de telles op&#233;rations avec des fonctions de son API. Ceci ne sera cependant pas couvert ici. [&lt;a href=&quot;http://www.aqra.ca/#nb9-3&quot; name=&quot;nh9-3&quot; id=&quot;nh9-3&quot; class=&quot;spip_note&quot; title='[3] Voir RTAI Serial Port Communication Example pour plus de (...)' &gt;3&lt;/a&gt;]&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Enfin, c'est l'option &lt;strong class=&quot;spip&quot;&gt;O_ASYNC&lt;/strong&gt; [&lt;a href=&quot;http://www.aqra.ca/#nb9-4&quot; name=&quot;nh9-4&quot; id=&quot;nh9-4&quot; class=&quot;spip_note&quot; title='[4] voir open(2).' &gt;4&lt;/a&gt;] pass&#233;e &#224; &lt;strong class=&quot;spip&quot;&gt;open&lt;/strong&gt; qui permettra la mise en place de ce m&#233;canisme. Un signal &lt;strong class=&quot;spip&quot;&gt;SIGIO&lt;/strong&gt; sera alors g&#233;n&#233;r&#233; &#224; toute arriv&#233;e ou &#233;criture de donn&#233;e (lorsque le buffer en sortie aura &#233;t&#233; rempli) pour un fichier ouvert en mode RW. Ensuite, il suffira de mettre en place une fonction de prise en charge du signal (&lt;i class=&quot;spip&quot;&gt;handler&lt;/i&gt;) attach&#233; &#224; ce signal et de bien s'assurer par &lt;i class=&quot;spip&quot;&gt;select&lt;/i&gt; que le &lt;i class=&quot;spip&quot;&gt;SIGIO&lt;/i&gt; re&#231;u corresponde bien &#224; l'&#233;v&#233;nement souhait&#233; sur le port. L'attribut &lt;strong class=&quot;spip&quot;&gt;F_SETOWN&lt;/strong&gt; [&lt;a href=&quot;http://www.aqra.ca/#nb9-5&quot; name=&quot;nh9-5&quot; id=&quot;nh9-5&quot; class=&quot;spip_note&quot; title='[5] Voir fcntl(2) .' &gt;5&lt;/a&gt;] devrait aussi &#234;tre appliqu&#233; avec la fonction &lt;strong class=&quot;spip&quot;&gt;fcntl&lt;/strong&gt; pour le descripteur de fichier du port s&#233;rie.&lt;/p&gt; &lt;h2&gt;R&#233;f&#233;rence&lt;/h2&gt;
&lt;div class='spip_document_612 spip_documents spip_documents_center' &gt;
&lt;a href=&quot;http://www.aqra.ca/IMG/jpg_display_thumbnail.php.jpg&quot; type=&quot;image/jpeg&quot; title='JPEG - 41.6 ko'&gt;&lt;img src='http://www.aqra.ca/IMG/cache-100x150/jpg_display_thumbnail.php-100x150-100x150.jpg' width='100' height='150' alt=&quot;JPEG - 41.6 ko&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p class=&quot;spip&quot;&gt;Le livre &lt;a href=&quot;http://www.easysw.com/~mike/serial/&quot; class=&quot;spip_out&quot;&gt;Serial Programming Guide for POSIX Operating System de Michael R Sweet&lt;/a&gt; a servi de r&#233;f&#233;rence pour la r&#233;daction de cet article. Il est disponible librement sur internet ou peut &#234;tre achet&#233; via &lt;a href=&quot;http://www.lulu.com/content/146252&quot; class=&quot;spip_out&quot;&gt;lulu.com&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.aqra.ca/#nh9-1&quot; name=&quot;nb9-1&quot; class=&quot;spip_note&quot; title=&quot;info notes 9-1&quot;&gt;1&lt;/a&gt;] Un exemple de select : &lt;a href=&quot;http://www.easysw.com/~mike/serial/serial.html#5_2_2&quot; class=&quot;spip_out&quot;&gt;Using the SELECT System Call&lt;/a&gt;.&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.aqra.ca/#nh9-2&quot; name=&quot;nb9-2&quot; class=&quot;spip_note&quot; title=&quot;info notes 9-2&quot;&gt;2&lt;/a&gt;] Voir &lt;a href=&quot;http://kerneltrap.org/node/7580#comment-209433&quot; class=&quot;spip_out&quot;&gt;opening bananas with steamrollers&lt;/a&gt;.&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.aqra.ca/#nh9-3&quot; name=&quot;nb9-3&quot; class=&quot;spip_note&quot; title=&quot;info notes 9-3&quot;&gt;3&lt;/a&gt;] Voir &lt;a href=&quot;http://www.captain.at/rtai-serial-port-example.php&quot; class=&quot;spip_out&quot;&gt;RTAI Serial Port Communication Example&lt;/a&gt; pour plus de d&#233;tails.&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.aqra.ca/#nh9-4&quot; name=&quot;nb9-4&quot; class=&quot;spip_note&quot; title=&quot;info notes 9-4&quot;&gt;4&lt;/a&gt;] voir &lt;a href=&quot;http://www.die.net/doc/linux/man/man2/open.2.html&quot; class=&quot;spip_out&quot;&gt;open(2)&lt;/a&gt;.&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.aqra.ca/#nh9-5&quot; name=&quot;nb9-5&quot; class=&quot;spip_note&quot; title=&quot;info notes 9-5&quot;&gt;5&lt;/a&gt;] Voir &lt;a href=&quot;http://www.die.net/doc/linux/man/man2/fcntl.2.html&quot; class=&quot;spip_out&quot;&gt;fcntl(2) &lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://www.aqra.ca/IMG/c_serialcom.c" length="2524" type="text/x-csrc" />
		

	</item>





</channel>

</rss>
