<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог НТЦ Метротек &#187; b5</title>
	<atom:link href="http://blog.metrotek.spb.ru/tag/b5/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.metrotek.spb.ru</link>
	<description>блог разработчиков</description>
	<lastBuildDate>Sat, 21 Jan 2012 12:36:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Немного о тонкостях разработки умных батарей</title>
		<link>http://blog.metrotek.spb.ru/2010/11/09/nemnogo-o-tonkostyah-razrabotki-umnyih-batarey/</link>
		<comments>http://blog.metrotek.spb.ru/2010/11/09/nemnogo-o-tonkostyah-razrabotki-umnyih-batarey/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 19:22:28 +0000</pubDate>
		<dc:creator>Николай Замотаев</dc:creator>
				<category><![CDATA[b5]]></category>
		<category><![CDATA[интересное]]></category>
		<category><![CDATA[разработка]]></category>
		<category><![CDATA[power management]]></category>
		<category><![CDATA[круто]]></category>

		<guid isPermaLink="false">http://blog.metrotek.spb.ru/?p=2285</guid>
		<description><![CDATA[Как уже было написано в этом блоге, для беркута B4.5 разрабатывалась умная батарея. Вроде бы не сложная на первый взгляд задача, по мере разработки и отладки начала обрастать тонкостями. Тонкость нулевая &#8212; много аккумуляторов, хороших и разных. Всё начинается с того, что smart battery сама определяет алгоритм заряда, а зарядное устройство только следует её указаниям. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.metrotek.spb.ru/wp-content/uploads/2010/11/accum.jpg" alt="" title="accum" width="150" height="100" class="alignleft size-full wp-image-2417" /> Как уже было написано в этом блоге, для беркута B4.5 разрабатывалась умная батарея.<br />
Вроде бы не сложная на первый взгляд задача, по мере разработки и отладки начала обрастать тонкостями. <span id="more-2285"></span></p>
<h4>Тонкость нулевая &#8212; много аккумуляторов, хороших и разных.</h4>
<p>Всё начинается с того, что smart battery сама определяет алгоритм заряда, а зарядное устройство только следует её указаниям. Существует как минимум 2 широко распространённых технологии аккумуляторов (LiIon и NiMH/NiCD) и для NiMH существует несколько возможных алгоритмов заряда. Если Li-Ion аккумуляторы заряжаются достаточно просто (нужно только ограничить зарядный ток и напряжение, а конец заряда определяется по снижению зарядного тока до определённого порога), то в случае с NiMH аккумуляторами есть несколько вариантов заряда, с различными критериями его прекращения и разными областями применения.<br />
Начнём с простейшего trickle charge, который может использоваться для заряда глубоко разряженной батареи или для заряда батареи в условиях низкой температуры. Это заряд с током не превышающим 0.1C (то есть 0.1 ёмкости батареи). По заверению GP, в этом режиме батарея может заряжаться 1 год, без вреда для себя, но полный заряд занимает 14 часов, что в общем-то для портативного прибора неприемлемо.<br />
Дальше имеется второй режим заряда, fast charge. В этом режиме батарея заряжается намного быстрее, зарядные токи порядка 0.3C-1C для него норма. Но в этом режиме необходимо точно контролировать температуру батареи и вовремя заканчивать заряд. Отсюда мы плавно переходим к тонкости номер один.</p>
<h4>Тонкость первая &#8212; сколько вливать миллиамперчасов или конец заряда.</h4>
<p>Как уже было написано выше, в случае с LiIon конец заряда определяется просто &#8212; в батарею просто перестаёт течь ток. В случае с NiMH всё несколько сложнее. По мере окончания заряда, в батарее химические процессы заряда начинают сопровождаться выделением газа. В случае trickle charge выделение имеет небольшую скорость и компенсируется поглотителем и в общем безопасно. Этот процесс сопровождается выделением тепла. В случае быстрого заряда, тепловыделение намного выше и если заряд не будет остановлен вовремя возможно повреждение батареи. Так мы приходим к различным критериям прекращения заряда.  В случае с trickle charge, критерием прекращения заряда достаточно использовать таймер на 14 часов. Если же используется быстрый заряд, то возможно два критерия окончания заряда &#8212; по температуре и по напряжению. Оба эти критерия используют один и тот же физический процесс и практически взаимозаменяемы. Вот только для первого критерия был нужен термодатчик, и достаточно точный, находящийся в тепловом контакте с батареей. Кроме того, так как этот метод использует скорость нарастания температуры в качестве критерия, он не надёжен при изменяющейся температуре окружающей среды. Поэтому в нашем варианте батареи используется критерий окончания заряда по dV/dt. В этом случае момент окончания заряда определяется по тому моменту, когда напряжение на батарее перестаёт расти и начинает падать. Сложность здесь заключается в том, что падение напряжения невелико (милливольты) и достаточно медленное.<br />
Ещё одна тонкость заключается в том, что необходимо предотвратить немедленное начало заряда при небольшом падении уровня заряда, иначе батарея будет систематически перезаряжаться. Это связано с тем, что для определения момента окончания заряда требуется определённое время.</p>
<h4>Тонкость вторая &#8212; учёт ёмкости, калибровка и КПД.</h4>
<p>Одно из преимуществ системы Smart Battery в том, что батарея может оценивать время заряда и разряда. Для этого батарея ведёт учёт своей ёмкости на заряде и разряде. И уже исходя из учтённой ёмкости и текущего тока вычисляет время заряда/разряда. По критериям конца разряда и конца заряда батарея рекалибруется, то есть обновляет значение максимальной ёмкости. Это необходимо делать в связи с тем что батареи отличаются по ёмкости уже с завода а так же стареют, и теряют емкость. Таким образом калибровка необходима для знания точного времени требуемого для заряда батареи, а так же для точного вычисления процента заряда.<br />
И тут в этот простой с виду процесс вклинивается реальный мир в лице страха и ужаса создателей вечных двигателей, а именно КПД. Дело в том что не вся энергия уходящая на заряд батареи преобразуется в химическую энергию, часть уходит в тепловые и другие потери. Если бы КПД был более менее постоянен, то его учёт был бы простой задачей. Но как обычно, законы физики мешают программистам и КПД меняется от множества разных факторов, начиная от температуры батареи и режима заряда и заканчивая фазой луны возрастом батареи. Таким образом точный учёт КПД невозможен или затруднителен. Просто игнорировать КПД можно если он достаточно высок. Например в случае с LiIon аккумуляторами, где он составляет примерно 90%. В случае NiMH аккумуляторов, КПД меняется в зависимости от режима заряда и других факторов и может составлять от 60 до 90%. Неточности учёта КПД приводят к проблемам учёта заряда при неполных циклах батареи, то есть если батарея не разряжается до конца и соответственно рекалибруется только по концу заряда, может нарастать ошибка учёта ёмкости, что приводит к некорректным оценкам времени работы и процента заряда.<br />
Здесь мы подходим к третьей тонкости, а именно учёту саморазряда батареи.</p>
<h4>Тонкость третья, саморазряд.</h4>
<p>От саморазряда страдают все батареи, отличается только его величина. Кроме того в случае Smart Battery, к саморазряду добавляется потребление контроллера батареи, который питается от батареи. Отсюда возникает проблема учёта саморазряда, особенно на NiMH батареях высокой ёмкости, где саморазряд может достигать 30% в месяц. Сам процесс учёта саморазряда не сложен &#8212; достаточно просто вычитать некоторую константу из накопленной ёмкости батареи с определённым временным интервалом. Вот только константа эта на самом деле констатной не является, саморазряд не постоянен по времени и зависит от температуры. Наибольший саморазряд приходится на первые сутки после заряда (порядка 5-10%). Затем он снижается до 1% в день (при комнатной температуре), высокие температуры значительно ускоряют этот процесс. Для упрощения в нашем случае был взят вариант саморазряда с постоянной скоростью в 1% в день.</p>
<p>Вот собственно пока и все тонкости из тех что вспомнились через 2 недели после конца разработки батареи.</p>
<p>В следующих выпусках этого нерегулярного блога :) будет рассказно о сложностях отладки сложных систем на примере умной батареи.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.metrotek.spb.ru/2010/11/09/nemnogo-o-tonkostyah-razrabotki-umnyih-batarey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Инструкция: Linux на Colibri+Orchid</title>
		<link>http://blog.metrotek.spb.ru/2010/02/11/instruktsiya-linux-na-colibriorchid/</link>
		<comments>http://blog.metrotek.spb.ru/2010/02/11/instruktsiya-linux-na-colibriorchid/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 11:39:53 +0000</pubDate>
		<dc:creator>Антон Фельдман</dc:creator>
				<category><![CDATA[разработка]]></category>
		<category><![CDATA[b5]]></category>

		<guid isPermaLink="false">http://blog.metrotek.spb.ru/?p=1785</guid>
		<description><![CDATA[Наконец-то! Работа по портированию (если это можно так назвать) linux на нашего Франкенштейна закончена, благодаря усилиям Юры Людкевича, Коли Замотаева и Паши Курочкина. По результатам изысканий Юра даже составил инструкцию на предмет того, как с нуля установить на colibri linux, только сообщить о публикации ему не позволила врождённая скромность. Инструкция по замене идущего в комплекте [...]]]></description>
			<content:encoded><![CDATA[<p>Наконец-то! Работа по портированию (если это можно так назвать) linux на нашего <a href="/2009/12/18/colibri-pxa320-vesti-s-poley">Франкенштейна</a> закончена, благодаря усилиям Юры Людкевича, Коли Замотаева и Паши Курочкина. По результатам изысканий Юра даже составил инструкцию на предмет того, как с нуля установить на colibri linux, только сообщить о публикации ему не позволила врождённая скромность.</p>
<p>Инструкция по замене идущего в комплекте с <a href="http://www.toradex.com/Products/Colibri_Modules/Colibri_PXA320">Colibri</a> MS Windows на linux доступна на нашем <a href="http://wiki.metrotek.spb.ru/wiki/Colibri_PXA320_%2B_Orchid_%2B_Linux">wiki</a>.</p>
<p>Исходные тексты ядра linux и патчи к нему <a href="http://metrotek.spb.ru/files/b5/colibri_orchid">тут</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.metrotek.spb.ru/2010/02/11/instruktsiya-linux-na-colibriorchid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Засада с новыми процессорами Atmel SAM3U</title>
		<link>http://blog.metrotek.spb.ru/2010/02/04/zasada-s-novyimi-protsessorami-atmel-sam3u/</link>
		<comments>http://blog.metrotek.spb.ru/2010/02/04/zasada-s-novyimi-protsessorami-atmel-sam3u/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 07:53:28 +0000</pubDate>
		<dc:creator>Антон Фельдман</dc:creator>
				<category><![CDATA[новости]]></category>
		<category><![CDATA[разработка]]></category>
		<category><![CDATA[b5]]></category>
		<category><![CDATA[недоразумения]]></category>

		<guid isPermaLink="false">http://blog.metrotek.spb.ru/?p=1709</guid>
		<description><![CDATA[Фирма Atmel обещала выпустить новую линейку микроконтроллеров с ARM-ядром&#160;(Cortex-M3) в четвёртом квартале прошлого (2009) года. Доверившись им, мы решили задействовать эти MCU в своих рарзработках&#160;&#8212; в частности, в сменных модулях наших измерительных платформ. И купили отладочный набор SAM3U-EK, на котором всё, что нам нужно, радостно заработало. Мега-программисты умудрились даже написать патч для операционной системы NutOS [...]]]></description>
			<content:encoded><![CDATA[<p>Фирма <a href="http://atmel.com">Atmel</a> обещала выпустить новую линейку микроконтроллеров с ARM-ядром&nbsp;(Cortex-M3) в четвёртом квартале прошлого (2009) года. Доверившись им, мы решили задействовать эти MCU в своих рарзработках&nbsp;&mdash; в частности, в сменных модулях наших измерительных платформ. И купили отладочный набор <a href="http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4568">SAM3U-EK</a>, на котором всё, что нам нужно, радостно заработало. Мега-программисты умудрились даже написать патч для операционной системы <a href="http://www.ethernut.de/en/software/index.html">NutOS</a> и <span id="more-1709"></span>поделиться им с обществом разработчиков.</p>
<p>Разработали схемы, определились с форм-фактором&#8230; Стали заказывать компоненты. Но не тут-то было. Процессоров, как выяснилось, в наличии нет и производство их ещё не начато. Вот спасибо фирме Atmel за обломчик-с.</p>
<p>На самом деле, нас это не пугает, потому как всегда есть запасные варианты. И мы будем их использвать.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.metrotek.spb.ru/2010/02/04/zasada-s-novyimi-protsessorami-atmel-sam3u/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Маленькие программерские радости</title>
		<link>http://blog.metrotek.spb.ru/2010/01/29/malenkie-programmerskie-radosti/</link>
		<comments>http://blog.metrotek.spb.ru/2010/01/29/malenkie-programmerskie-radosti/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 19:57:54 +0000</pubDate>
		<dc:creator>Юрий Людкевич</dc:creator>
				<category><![CDATA[разработка]]></category>
		<category><![CDATA[b5]]></category>

		<guid isPermaLink="false">http://blog.metrotek.spb.ru/?p=1687</guid>
		<description><![CDATA[Хорошо, когда чтобы что-то заработало ничего не надо делать, правда? :) Вот и мы тут в четверг, сев планировать разработку драйверов для тач-панели и  глянув с надеждой в исходники ядра, обнаружили что все уже украдено до нас&#160;&#8212; не мы первые озадачились вопросом поддержки микросхемы Philips UCB1400, которая на нашем макете (он же франкенштейн) отвечает за [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.metrotek.spb.ru/wp-content/uploads/2010/01/programmer.jpg"><img class="alignleft size-full wp-image-1689" src="http://blog.metrotek.spb.ru/wp-content/uploads/2010/01/programmer.jpg" alt="" width="200" height="159" /></a> Хорошо, когда чтобы что-то заработало ничего не надо делать, правда? :) Вот и мы тут в четверг, сев планировать разработку драйверов для тач-панели и  глянув с надеждой в исходники ядра, обнаружили что все уже украдено до нас&nbsp;&mdash; не мы первые озадачились вопросом поддержки микросхемы Philips UCB1400, которая на нашем макете (он же франкенштейн) отвечает за работу с тач-панелью и звуком. Задвинув планирование, быстро собрали ядро  с поддержкой этого чипа и с радостью обнаружили, что все работает. В общем наш франкенштейн обрел слух с голосом и способность реагировать на внешние раздражители в виде пальца/стилуса  :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.metrotek.spb.ru/2010/01/29/malenkie-programmerskie-radosti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Франкенштейн: восстание JFFS2 или Немного о файловых системах для raw flash</title>
		<link>http://blog.metrotek.spb.ru/2010/01/28/frankenshteyn-vosstanie-jffs2-ili-nemnogo-o-faylovyih-sistemah-dlya-raw-flash/</link>
		<comments>http://blog.metrotek.spb.ru/2010/01/28/frankenshteyn-vosstanie-jffs2-ili-nemnogo-o-faylovyih-sistemah-dlya-raw-flash/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 08:06:18 +0000</pubDate>
		<dc:creator>Юрий Людкевич</dc:creator>
				<category><![CDATA[разработка]]></category>
		<category><![CDATA[софт]]></category>
		<category><![CDATA[b5]]></category>
		<category><![CDATA[colibri]]></category>

		<guid isPermaLink="false">http://blog.metrotek.spb.ru/?p=1658</guid>
		<description><![CDATA[После успешного запуска ядра Linux на нашем франкенштейне (модуль Colibri PXA320 c 128Mb RAM и 1Gb  NAND FLASH) нужно было двигаться дальше &#8212; собрать bootstrap и загрузиться хотя бы в консоль. В отличие от нашего предыдущего проекта, в Colibri стоит NAND флэш, а не NOR. NAND получает все большее и большее распространение в силу своей [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.metrotek.spb.ru/wp-content/uploads/2009/12/colibri.jpg"><img class="alignleft size-full wp-image-1538" src="http://blog.metrotek.spb.ru/wp-content/uploads/2009/12/colibri.jpg" alt="" width="150" height="113" /></a> После успешного запуска ядра Linux на нашем <a href="http://blog.metrotek.spb.ru/2009/12/18/colibri-pxa320-vesti-s-poley">франкенштейне</a> (модуль<a href="http://www.toradex.com/En/Products/Colibri_Modules"> Colibri PXA320</a> c 128Mb RAM и 1Gb  NAND FLASH) нужно было двигаться дальше &#8212; собрать bootstrap и загрузиться хотя бы в консоль.</p>
<p>В отличие от нашего <a href="http://metrotek.spb.ru/b4.html">предыдущего</a> проекта, в Colibri стоит NAND флэш, а не NOR. NAND получает все большее и большее распространение в силу своей дешевизны и при этом большей вмесимости чем NOR (небольшое сравнение NOR  и NAND можно посмотреть <a href="http://www.linux-mtd.infradead.org/doc/nand.html">тут</a>).</p>
<p>Процессор Marvell PXA320 со своим встроенным NAND контроллером и сама микросхема NAND флэш поддерживаются основной веткой ядра. В общем, ничто не предвещало беды и было решено пойти  по накатанной &#8212; развернуть на NAND <a href="http://en.wikipedia.org/wiki/JFFS2">JFFS2</a> (Journaling Flash File System version 2) с корневой файловой системой.</p>
<p>Но тут вдруг обнаружилось что старый добрый JFFS2  мало того что полторы минуты сканирует NAND, дак еще и работать отказывается напрочь =(. Попробовав различные версии ядра, различные конфиги ядра и способы разворачивания файловой системы на флэш (монтирование и разворачивание из архива, запись образа напрямую в NAND) работоспособности я так и не добился. Ну да не JFFS-ом единым подумал я и стал смотреть в сторону других файловых систем.<span id="more-1658"></span></p>
<p>Первым под руку попался проект <a href="http://www.yaffs.net/">YAFFS</a> (Yet Another Flash File System) — пропатчил ядро (в основной ветки поддержки YAFFS нет, но это не беда &#8212; можно скачать патч с сайта проэкта и запатчить им ядро), собрал, запустил &#8212; сканирование всего раздела (чуть меньше гига) заняло минуту с небольшим, при последующих загрузках все происходило быстро, без задержек. Но при первом же аварийном завершении — опять минуту с небольшим. В остальном, вполне работоспособная вещь.</p>
<p>Вторым была выбрана <a href="http://www.linux-mtd.infradead.org/doc/ubifs.html">UBIFS</a> (Unsorted Block Image File System) &#8212; файловая система от создателей JFFS2. Перелопатив тонны описаний от разработчиков обнаружил интересную вещь &#8212; UBIFS состоит из двух частей &#8212; <a href="http://www.linux-mtd.infradead.org/doc/ubi.html">UBI</a> (Unsorted Block Image) и UBIFS. UBI очень похож на <a href="http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)">LVM</a> (Logical Volume Manager) &#8212; тоже поддерживает создание логических томов на одном физическом разделе. Причем  в роли файловой системы поверх UBI можно запустить тот же JFFS2, как утверждают разработчкики. А можно загрузить FTL (Flash Translations Layer) и получить обычное блочное устройство, на которое хоть EXT3 можно натянуть. При этом такие вещи, как журналирование и слежение за равномерным износом NAND будет выполнять UBI.</p>
<p>Я поставил поверх UBI файловою систему UBIFS. Разработчики обещали быстро и надежно, да и сравнительные тесты показывали тоже самое. Первый запуск &#8212; присоединение тома занимает около 10 секунд, монтирование происходит моментально, без задержек. Особенность UBI — присоединение тома занимает на гиговом разделе (том 900Мб. Почему не весь раздел — об этом далее) всегда занимает 10 секунд. С одной стороны, много. Но с другой, если работа была завершена аварийно, присоединение тома займет те же 10 секунд, но монтироваться система будет чуть дольше. Но с JFFS2/YAFFS все равно не сравнимо. Как и JFFS2, UBIFS  поддерживает сжатие on the fly, что уже не может не радовать.</p>
<p>Почему том не занимает весь раздел? Потому что UBI резервирует часть свободного места: если какой либо блок будет помечен как плохой то вместо него будет использоваться блок из свободного места. По умолчанию UBI резервирует 1% для этого, но это можно изменить в конфигурации ядра.</p>
<p>Cравнение различных файловых систем для raw flash — <a href="http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2008Presentations?action=AttachFile&amp;do=get&amp;target=flash-filesystems.pdf">тут</a>.</p>
<p>Почему в качестве файловой системы не была взята привычная ext2/ext3/raiserfs? А все потому, что эти системы рассчитаны на работу с блочным устройством, т.е. между самой памятью и ядром есть еще некая реализация FTL внутри устройства. NAND/NOR же таких продвинутых штук не имеют, да и не надо им это. По этому для них и используются такие хитрые файловые системы.</p>
<p>Для тех кто хочет помучать UBI и UBIFS , или кто хочет более детально разобраться:</p>
<ol>
<li>http://www.linux-mtd.infradead.org/faq/ubi.html</li>
<li>http://www.linux-mtd.infradead.org/doc/ubi.html</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.metrotek.spb.ru/2010/01/28/frankenshteyn-vosstanie-jffs2-ili-nemnogo-o-faylovyih-sistemah-dlya-raw-flash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

