как сделать компьютер с нуля

Создание примитивного компьютера с нуля

Компьютер — это просто. Или нет?

Любой человек, интересующийся сферой информационных технологий, хоть раз задумывался о том, как на самом деле работает компьютер. А и действительно, с помощью компьютера можно сделать столько всего удивительного, что невозможно поверить, что всё, что происходит внутри него, — сложение чисел. Почему бы тогда не сделать свой самому?

image loader

Эта мысль явно прослеживается в книге Чарльза Петцольда «Код» — хорошее чтиво для тех, кто хочет разобраться в устройстве компьютера на пальцах не тратя особо времени. Эта книга произвела сильное впечатление на меня, да так, что я решил, что компьютер и вовсе банально простой агрегат и ничего сложного в нём нет.

Но это не так. После прочтения у меня всё-таки поселилось ощущение того, что от меня что-то сокрыто, что какие-то аспекты архитектуры вовсе не затрагивались. За бо́льшими объёмами информации я обратился к следующей книге — «Архитектура Компьютера» Эндрю Таненбаума. Информация в этой книге оказалась гораздо обширнее, однако я получил не совсем то, чего хотел.

На этом мой путь в мире архитектуры ЭВМ приостановился, началась учёба, я отвлёкся на другие, более интересные для меня на тот момент проекты. Но, к сожалению, я из тех людей, которые не могут без угрызений совести пользоваться чем-либо, не зная хотя бы примерно механизма работы этого инструмента. Это заставляло меня искать материал буквально обо всём.

Череда разочарований наступила после прочтения нескольких глав книг об игровых движках, компиляторах, операционных системах и пр. Я просто растерялся: мир, который казался мне логичным и в меру простым в миг стал огромным и запутанным, требующим внушительных объёмов знаний.

Начало великого пути

То, что спасло меня, был ответ одного пользователя на каком-то форуме на пост человека, страдавшего похожим «расстройством», мир IT казался ему таким огромным, что его точно нельзя постичь. Я помню те слова, и они меня выручают каждый раз, когда я сталкиваюсь с чем-то новым. «Do not let yourself get overwhelmed» — то, что стоит говорить каждому новичку в IT.

И тогда я начал с новыми силами бороздить просторы интернета в поисках литературы. Мне очень повезло, что я наткнулся на замечательную книгу «The Elements of Computing Systems. Building a Modern Computer from First Principles» by Noam Nisan and Shimon Schocken(нет русского издания). В ней именно для таких, как я показывают создание реально работающего компьютера с нуля, то есть из логических вентилей.

Я загорелся идеей и приступил к работе. Начал с того, что когда-то уже делал после прочтения Петцольда, — сумматоры, регистры, мультиплексоры. Это одни из самых простых устройств, работу которых вовсе не сложно понять (если не думать об эффективности), а сделать такие можно за 10 минут в удобном приложении на вашем смартфоне.

Каждую следующую главу я начинал с жаждой знаний. Сконструировал АЛУ, руководясь заданиями в книге. Не могу сказать, что что-то в нём придумал я, скорее мне дали готовые детальки, а я их собрал в красивую машину. Зато какое удовольствие я получил, когда понял, что я своими руками собрал полностью работающее АЛУ.

image loader

Первые плоды

За ним последовал полностью работающий 16-битный процессор, который я доделал сегодня. Моему счастью нет предела, но я не собираюсь останавливаться. К моему сожалению, хоть в книге весь процессор и был собран полностью с нуля, но ассемблер для него был абстракцией в следующей главе(что логично, книга расчитана на более-мение краткое, хоть и детальное изложение). Немного погрустив, я понял, что Ассембли — тоже язык программирования, и создание полноценного Ассемблера с нуля займёт много времени.

image loader

Написать свой Ассемблер — амбициозная цель, но это не единственная сложность. Путь, который я выбрал, обещает быть непростым. Регистры и в целом память в программе BOOLR можно реализовать только используя логические вентили. Почему это проблема? Всё просто: ничтожные 1024 байт RAM десятки раз рекурсивно пытаются поселить в оперативной памяти моего компьютера свои составные 16-битные регистры. Вот, что из этого получается:

В общем говоря, иногда проект просто не открывается из-за нехватки оперативной памяти. Выглядит как тупик, но я не намерен останавливаться на этом.

Источник

Как собрать компьютер самостоятельно, полное руководство от А до Я

Друзья, приветствую на fast-wolker! Современные домашние компьютеры — надежны и работают годами, но проходит время и их характеристики морально устаревают, требования к мощностям растут год от года. Появляются более «прожорливые» операционные системы, снимаются с поддержки те, к которым мы уже привыкли..

Рано или поздно приходится менять домашний компьютер на более современный. Делать это можно двумя способами — сразу купить в магазине новый, полностью доверившись продавцу. Либо собрать компьютер самому из комплектующих.

img 5fbb8e0310276

Последний способ по бюджету всегда выходит дешевле и в сегодняшнем выпуске расскажу — как нужно оптимально к этому вопросу подходить. Сама по себе сборка компьютера важна, но не менее важно правильно подобрать компьютерные запчасти и комплектующие.

Как выбрать комплектующие для компьютера самостоятельно?

Хорошо, если у вас уже есть домашний компьютер. По сути вы сделаете его апгрейд. И на этом можно сэкономить. Если брать новый системный блок с нуля в магазине, то это выйдет дороже. Если Вы в этом деле новичок, для того, чтобы самостоятельно сделать апгрейд нужно начать с анализа — для каких целей будете использовать?

Простыми словами, заранее определяем сферу его применения (от этого сильно зависит бюджет). Условно перечислю основные сферы применения (в порядке возрастания стоимости):

Почему средней мощности? Потому что «самого мощного» игрового компьютера не бывает. Все что появляется на рынке в этом сегменте быстро устаревает и не советую гнаться за самыми передовыми железяками — денег не хватит.

Чтобы лучше определиться с будущими характеристиками — посмотрите в Интернете минимальные системные требования к операционной системе + любимым играм в которые играете, программам, которые Вы часто используете. И увеличьте в уме еще на 50% (а то и в два раза) системные требования по процессору, памяти.

img 5fbb8db9312dd

Так Вы получите искомые наименование железа и его примерные характеристики. Дальше, смотрим цены и на бумажку выписываем список. Полезно посмотреть и другие продукты той же линейки — вдруг есть возможность выбора железа поновее и помощнее оптимальной цены.

Словом, нужно потратить некоторое время на изучение характеристик и цен железа, сходить на сайты производителей, поспрашивать соратников по играм что у них. Без этого никуда. Но, зато не нужно будет переплачивать за избыточную мощность. Лишние (с вашей точки зрения) комплектующие вам тоже не грозят, как и траты на сборку — вы все будете делать сами!

Видео о том как собрать компьютер своими руками, в домашних условиях

Я предпочитаю заказывать через хороших знакомых и друзей, которые этим занимаются. С чего же начинать на практике?

Сразу оговорюсь — если нужен компьютер мощный — он не получится дешевым. Одно исключает другое. Придется где-то ужиматься. В сегодняшнем выпуске речь пойдет о сборке домашнего компьютера средней мощности для игр и не только. В котором будут использоваться детали от компьютера-предшественника. Тут и сэкономим.

Раз компьютер для дома — традиционно выбираем платформу AMD. Так сложилось, апгрейд на AMD выходит чуть дешевле, чем Intel такого же класса. Ничего не имею против Intel, просто дешевле.

Системный блок компьютера состоит собственно из следующих компонентов:

Читайте также:  как проектировать телефон на ноутбук

Мой друг захотел собрать себе компьютер современный, под свои потребности (он танкист WoT). Установка оборудования будет произведена в старый корпус, со старым жестким диском и блоком питания.

Критически важно, чтобы старый блок питания «тянул» новые мощности, а его разъемы питания подходили под новую материнку и видеокарту (если на ней есть отдельный разъем питания). Проверяем это на этапе проектирования.

Переходим непосредственно к выбору комплектующих на конкретном примере.

Апгрейд компьютера — с чего начать?

Подбор комплектующих для компьютера начинаем с процессора. Именно он тянет за собой всё остальное. Под конкретный разъем процессора (сокет) изготавливается материнская плата. На которой размещается сам процессор, охладитель процессора, планки оперативной памяти, подключается видеокарта и остальная периферия.

Один мой хороший друг захотел, (а другой мой хороший друг заказал и подобрал оптимально по деньгам) следующие комплектующие:

Как собрать игровой компьютер самому?

Нам понадобится термопаста (идет в комплекте с охладителем), длинная отвертка под крест, терпение, аккуратность и время. Не применять силу, и действовать неспеша и аккуратно. Сначала освободим корпус системного блока от старого оборудования. Отсоединяем разъемы блока питания от материнской платы, шлейфы жестких дисков.

img 5fbb8ea3a8c4d

Отсоединяем джамперы питания, сброса, светодиодных индикаторов корпуса и разъемы USB, наушников на переднем корпусе. Далее откручиваем все винты крепления материнской платы к корпусу и старую плату вынимаем.

Начинаем предварительную подготовку новой материнской платы. Нужно заранее ПРАВИЛЬНО установить на нее процессор и охладитель.

Это самая опасная часть, будьте внимательны и очень аккуратны!

Процессоры АМД имеют контакты в виде ножек, которые легко гнуться! Аккуратно совместив метки на сокете и процессоре ставим процессор в гнездо. Убедившись, что все контакты зашли — защелкиваем разъем..

img 5fbb8f5b50754

Примеряем охладитель; на АМД подпружинены крепления, никаких отверток не используем! Если вентилятор на нем боковой — определяемся в какую сторону будет смотреть и проверяем хорошо ли он крепиться в выбранном положении. Отрепетировали? Получилось установить? Молодцы!

Снимаем охладитель. Теперь нужно нанести пасту на процессор (тонким слоем)…

img 5fbb8d7b6736f

Теперь устанавливаем и закрепляем кулер на процессоре, после не забываем питание вентилятора подключить к разъему CPU FAN…

img 5fbb90df54866

На тыловую часть корпуса системного блока устанавливаем металлическую пластину под порты из комлекта (взамен старой)…

img 5fbb918c7d2cc

Убедившись, что все стало на место правильно — вставляем и прикручиваем винтами материнскую плату к корпусу. Возможно, сначала в корпусе придется перекрутить винты на которые садится плата под новое расположение — так, чтобы совпали отверстия.

Теперь в прилагаемой к материнской плате инструкции находим описание подключения индикаторов корпуса, кнопки питания и сброса, индикаторов жесткого диска и динамика. Не торопясь подключаем корпусные вентиляторы и все остальное.

Вставляем аккуратно планки оперативной памяти в слоты до характерного щелчка. Подключаем кабели USB и звука передней панели корпуса в соответствии с инструкцией к материнке, порты USB 3.0. Подключаем кабели питания и данных жесткого диска и DVD. Подключаем нужные разъемы блока питания к материнской плате. Подключаем видеокарту и питание к ней.

img 5fbb94821f163

Далее, очередь тестирования. Windows 7 не загрузится на новом оборудовании — вы получите синий экран. Если планируете использовать «семерку далее» — придется переустанавливать с нуля. Потом (или заранее) лучше ее обновить до Windows 10 — появится возможность использовать порты USB 3.0 и многое другое, что в «семерке» отсутствует.

Если Windows 10 была установлена до апгрейда не переживайте — запустится нормально, просканирует оборудование и попросит перезагрузку. С обновлениями позже придут и драйвера. Можно установить драйвера самостоятельно — с диска к материнской плате и аналогичного к видеокарте.

Конечно, крайне желательно на такое хорошее железо поставить и новый SSD жесткий диск. Хороший 480 Гб SSD стоит около 5000-7000 рублей. Если Ваш текущий жесткий диск в хорошем состоянии — делать это необязательно. Но, если захотите почувствовать максимальную разницу в быстродействии — можно подкопить и поставить SSD чуть позже.

Старый жесткий диск можно подключить как дополнительное хранилище, разметив его логическим диском.

Windows 10 любит такое железо и на нем она можно сказать будет «летать». Полезно запустить тестовую программу и снять температуры с датчиков, померить встроенными в неё тестами производительность и стресс. Правильно собрали? Окончательно собираем блок, наслаждаемся. Спасибо!

Источник

Разработка одноплатного компьютера с нуля. Пособие для начинающих

1453a9d0205f4b808d878f9587085039

Я занимаюсь разработкой электроники. Начал сравнительно недавно — когда микроконтроллеры от Atmel стали известны благодаря платформе Arduino. Тогда меня это не особо заинтересовало — на тот момент я уже программировал их из AVR Studio, читал истории DiHalt и мечтал о разработке собственного автопилота. 3 курс, Новосибирск, НГУ — это было увлекательно…

Но я с интересом наблюдаю за развитием и ростом индустрии встраиваемых и портативных систем: появление RaspberryPI, многообразия SoC и плат на их основах, системы умного дома, интернет вещей, смартфоны с растущей вычислительной мощностью — все это фантастический простор для деятельности. Результатом наблюдения стало желание поучаствовать: попробовать себя в разработке простой платформы, с целью изучения и накопления опыта.

Проекты на микроконтроллерах мне порядком поднадоели — подводных граблей очень мало, ошибки допустить достаточно сложно, все запускается «из коробки» — ни гибкости, ни сложности. С системами на кристалле — SoC (System on Chip) до этого я дела особо не имел — разве что ядро собрать, да Debian запустить. Поэтому я решил запустить простенький SoC, а именно пройти путь от схемы до рабочего Linux на борту. Да, в последующем я буду не совсем корректно называть SoC процессором, надеюсь, никого это не смутит.

Выбор у меня был небольшой, и определялся сложностью изготовления платы — только выводные корпуса, никаких BGA, максимум четырехслойный дизайн, а все потому, что я собирался прилепить свою платку к одному сравнительно простому рабочему проекту. Еще это означало, что в последующем я получу с производства уже спаянную плату, готовую к экспериментам.

Проектирование

В результате обзора доступных SoC я остановил свой выбор на iMX233 от Freescale. Выводной корпус, 454 МГц, контроллер DDR памяти, интерфейс к карте памяти SD/MMC, отладочный порт — отличный набор новичка. В придачу — композитный видеовыход («тюльпан»), аудио вход/выход, SPI, I2C, UART, USB, LCD. Будет чем заняться на досуге.

После чтения статей о платформе BlackSwift в потенциальных кандидатах появился Qualcom Atheros AR9331, но смутило отсутствие подробной информации в открытом доступе. Жаль, занимательный кандидат.

Меня интересовала минимальная конфигурация, достаточная, чтобы запустить на ней Linux. Соответственно к процессору была выбрана микросхема памяти на 32 МБ (256 МБит) (по тому простому принципу, что она у нас была в наличии). На тот момент я еще не вычитал на десятках форумов о существовании сложностей с этим процессором, только изучил рекомендации производителя по трассировке и, довольный как слон, делал все по рекомендациям.

Вообще, процессор (или SoC, так правильнее) интереснее с той точки зрения, что при его запуске значительно дороже выходят ошибки проектирования. Например, некорректная разводка DDR памяти может выразиться как минимум в последующих ошибках чтения-записи, как максимум — в невозможности инициализации памяти вообще. Цепи питания процессора — ошибка сожжет процессор при первом включении, интерфейсы — потеря периферии на этих интерфейсах, и так далее.

Поэтому начинать проще с изучения готовых отладочных комплектов, например официальной платы и ее документации. Платы у меня не было, но документация доступна всем желающим. В придачу полезно изучить все инструкции по применению, почитать форумы (это уже жизненный опыт :)) — в общем, изучить всю доступную информацию о жертве. После изучения начинается механическая работа — нарисовать схему, а затем и плату. Четыре слоя, минимальная ширина проводника 0.2мм, зазора 0.2мм, отверстия 0.3мм.

Подключил все, что можно подключить безболезненно – аудио входы и выходы, вывел видеосигнал на контактные площадки, всякую простую периферию — микросхему памяти с I2C интерфейсом, еще одну с SPI, держатель для uSD карты, конфигурационные перемычки, обязательно отладочный порт, и потом на свободное место все что осталось. Плата получилась небольшая — 70х40мм, с минимумом компонентов. Для NAND памяти места не осталось, но я планировал запускаться с SD/MMC. Работы на одну ночь.

Читайте также:  как запостить фотку в инстаграм с компьютера

21d1ce5ccf574d43a05d1935f9c2a774

Получилось страшненько. Слева направо: верхний слой, два внутренних, нижний. Процессор на верхнем слое, память на нижнем; на каждый сигнальный проводник DDR интерфейса по одному переходному отверстию; длины проводников выровнены, их средняя длина в пределах рекомендуемой, полигон земли между процессором и памятью почти без разрывов, и т.д.

Итак, плата спроектирована, документация на нее оформлена, все это передано в производство, и можно начинать готовиться к поступлению плат с производства. Начинаю изучать материалы на предмет нюансов запуска процессора, и натыкаюсь на стостраничные форумы, с описанием проблем и сложностей в запуске.

Становится не по себе — проблемы у людей вплоть до третьей переработки платы, процессор не работает с некоторыми модулями памяти, встроенная подсистема питания очень нестабильна, процессор очень придирчив к питанию, errata (документ, описывающий ошибки на процессор) на многие проблемы отвечает «ничем помочь не можем», софт в открытом доступе кривой, даже внутренний загрузчик нуждается в патче от производителя, в общем, проблемы намечаются серьезные. Выкачиваю BSP (board support package) от производителя — там каша из сотен скриптов и пакетов. Веселье начинается.

Спустя месяц приходят платы, и я начинаю эксперименты. Что-то в уголке подсознания всплывает, связанное с проблемами у монтажного производства.

0af3a891165343939f34db30611a419a

SoC bringup

Прочь сомнения, подать питание!
И никаких признаков жизни. Это хорошо, хорошо потому, что без дыма. Подпаиваю кнопку «Power», смотрю осциллографом на ножку кварцевого резонатора, запускаю — есть генерация на кварце. 24 МГц, страшненькие, но есть. Щуп осциллографа с делителем, пассивный, спишем на него. «Дедушка старый, ему все равно»

Начинается самое интересное — bringup. Как этот термин лаконично перевести на русский в данном контексте? Попытка вдохнуть жизнь? Не звучит.

В процессоре есть свой первоначальный загрузчик, который при включении проверяет условия старта — откуда и что грузить. Он же отвечает на запросы по шине USB. Его можно сконфигурировать перемычками на плате, или однократно прошиваемой OTP-памятью. Если перемычки перепаять я еще смогу, то перепрошить неперепрошиваемое вряд ли. Распаиваю перемычки, подаю питание, и о чудо — с отладочного порта приходят первые байты данных! Это значит, что процессор доволен питанием, самые базовые его узлы запустились, и можно что-то делать дальше. Что значат эти коды, я узнал из кривоватого заголовочного файла, в виде PDF документа, с невнятными пояснениям, пропусками и за авторством huashan. Все ясно.

Хорошо, чтобы максимально оперативно работать с платой, оптимальнее будет подключить ее по проводам, и загружать исполняемый код по нажатию одной кнопки. Ок, подключаю по USB к компу. И ничего.

Никаких транзакций по шине USB, даже генерации на кварце. Плохо. Начинаю думать, изучаю плату, вспоминаю все тонкие моменты. Например, на этой плате рядом с процессором я поставил свой DC/DC преобразователь, с расчетом на питание какой-либо потребляющей нагрузки, подключил его к шине питания USB 5V, и ничем не нагрузил. Промеряю осциллографом — на входе 5 вольт, на выходе 5 вольт. Всплывают слова с производства, что-то по поводу резистора. Да, так и есть — в цепи обратной связи нет резистора. (- Капитан, капитан, якорь всплыл! — Хммм, скверная примета…)

Паяю резистор, и о чудо! Плата определяется по USB! До этого я смотрел на уровень напряжения шины питания — 5.1 вольт, никаких существенных помех, никаких пульсаций. Но процессору виднее. После запайки резистора заработал и DC/DC источник, пока без нагрузки, но, по крайней мере, перестал мешать процессору. Хорошо, что дальше.

Дальше надо разобраться с первоначальным запуском процессора и проверить работу DDR. Начинаю копать, и в процессе поисков собираю набор утилит и «бутлетов» — исходных кодов, позволяющих проинициализировать подсистемы питания, связку DDR контроллер-память и подготовить систему к дальнейшей работе. То, что надо — максимально простые исходники, с обилием индусского кода, но главное, они работают.

Утилиты позволяют загрузить эти бутлеты в память процессора и запустить их на исполнение. Все так сложно, потому что после включения встроенный загрузчик ничего не знает про внешнюю оперативную память, а поскольку нет памяти – некуда загружать, к примеру, ядро Linux. Получается цепочка из нескольких звеньев, где на каждом этапе выполняется незначительный шаг вперед.

0f416753b6934ca3bd639fb4cce1730a
Для подключения к последовательным портам, для реализации всяких внутрисхемных JTAG отладчиков, программаторов и аналогичных задач в другом проекте был реализован USB-UART мост на FT2232. Двухслойный дизайн, выведены оба порта на гребенку с шагом 2 мм. В этом проекте другая история – USB-UART мост + платка сбора данных размещается в центре основной платы, и конструктив прибора предполагает ее удаление.

Все эти платы проектировались параллельно, поэтому я сразу заложил идентичные размеры и возможности гибкого соединения. Не зря 🙂

1ac5b03d1da447eb80491353c99c6cc3

Отлично, компилирую исходники, собираю этот конструктор, загружаю, и получаю первые строчки из отладочного порта! Подсистема питания запустилась!

PowerPrep start initialize power…
Battery Voltage = 0.65V
No battery or bad battery detected. Disabling battery voltage measurements.
EMI_CTRL 0x1C084040
FRAC 0x92926152
power 0x00820710
Frac 0x92926152
start change cpu freq
hbus 0x00000003
cpu 0x00010002

Заглядываю в исходники инициализации памяти, разрешаю простейший тест, правлю ручками процедуру инициализации под мою конфигурацию платы, запускаю вновь:

PowerPrep start initialize power…
Battery Voltage = 1.74V
No battery or bad battery detected. Disabling battery voltage measurements.
EMI_CTRL 0x1C084040
FRAC 0x92926152
power 0x00820710
Frac 0x92926152
start change cpu freq
hbus 0x00000003
cpu 0x00010002
start memory test, at 0x40000000
end memory test, at 0x41FFFFFC

Замечательно! Тест памяти пройден! Это очень хорошо, теперь туда можно загрузить что-то посерьезнее.

U-Boot

Посерьезнее у меня это U-Boot. Я знаком с этой системой, мне она кажется вполне адекватной и функциональной. Позволяет работать с периферией — актуальные версии работают с USB, SD/MMC, Ethernet, загружать образы c FAT/ext2 разделов, передавать управление, и главное — моргать светодиодиком — все то, что нужно для счастья и более гибкой отладки на первоначальном этапе.
Поэтому не долго думая выкачиваю актуальную версию из официального репозитория, беру самую близкую конфигурацию, компилирую, собираю с индусскими бутлетами в один файл, и загружаю в процессор:

PowerPrep start initialize power…
Battery Voltage = 1.74V
No battery or bad battery detected. Disabling battery voltage measurements.
EMI_CTRL 0x1C084040
FRAC 0x92926152
power 0x00820710
Frac 0x92926152
start change cpu freq
hbus 0x00000003
cpu 0x00010002
start memory test, at 0x40000000
end memory test, at 0x41FFFFFC

U-Boot 2015.04-rc3-00209-ga74ef40 (Mar 16 2015 — 12:47:34)

CPU: Freescale i.MX23 rev1.4 at 227 MHz
BOOT: USB
DRAM: 32 MiB
MMC: MXS MMC: 0
MMC0: Bus busy timeout!
MMC0: Bus busy timeout!
MMC0: Bus busy timeout!
MMC0: Bus busy timeout!
Card did not respond to voltage select!
MMC init failed
Using default environment

In: serial
Out: serial
Err: serial
Net: Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot: 0
=>

И U-Boot запустился! Отлично, но плата запускается все еще по проводам. Надо разбираться с картой памяти. Хорошо, перепаиваю резисторы выбора загрузки, втыкаю карту — в терминале от процессора приходит ошибка. Вытаскиваю карту — другая. Вот это поворот! ©

SD/MMC

Начинаю искать, поиски выводят на русскоязычный форум, на полезные и интересные 380 страниц обсуждения. Боюсь, ребята до сих пор вспоминают этот SoC крепким словцом.

Выясняется, что для загрузки с SD/MMC карты нужно обязательно прошить OTP биты, тогда еще что-то может быть и получится. В частности надо перенастроить в регистре OTP Register: 24 биты SD MBR Boot[3] — прошить в единицу, и SD_POWER_GATE_GPIO[21:20] — выбрать NO_GATE — в моем дизайне управление питанием карточки не предусмотрено.

«Неудобненько как-то получается». Это означает, что нельзя сделать загрузочную карту памяти, которой можно будет прошивать готовые приборы в партии, вместо этого придется подключать каждый прибор, и вручную прошивать эти злосчастные OTP биты. Разумеется, этот процессор я не буду использовать в сколько-нибудь серьезном проекте, но про такой момент забывать не стоит. Скачиваю виндовую утилитку, прошиваю эти биты, вставляю карту памяти, аккумулятор… Система стартует, и циклически перезагружается. Блин!

PowerPrep start initialize power…
Battery Voltage = 3.75V
Boot from battery. 5v input not detected

PowerPrep start initialize power…
Battery Voltage = 3.75V
Boot from battery. 5v input not detected

Читайте также:  как перекинуть файлы с компьютера на компьютер по локальной сети

PowerPrep start initialize power…
Battery Voltage = 3.75V
Boot from battery. 5v input not detected
.

Правлю исходники бутлетов, в частности добавлю дополнительные отладочные сообщения, и выхожу на проблемный участок кода:

PowerPrep start initialize power…
Battery Voltage = 3.75V
Boot from battery. 5v input not detected
Try poweron_pll
Try turnon_mem_rail

Падает при подаче питания на DDR память. Хм. Где-то я уже читал об этом. А как до этого работало? Ладно, нестабильность найдена, надо разбираться.

Вокруг микросхемы памяти расположены ее законные развязывающие конденсаторы, 8 шт. по 100 nF. Но на выходе встроенного в SoC источника питания для памяти я поставил 2×10 uF, хотя производителем рекомендовано всего 1uF (инструкции читаю, если ничего другое уже не помогает, да). Ломать, не строить: отпаиваю один конденсатор, подключаю аккумулятор, и система стартует!

На самом первом фото виден этот конденсатор — вокруг него грязь, и он припаян только одним контактом.

PowerPrep start initialize power…
Battery Voltage = 3.75V
Boot from battery. 5v input not detected
Try poweron_pll
Try turnon_mem_rail
Try init_clock
EMI_CTRL 0x1C084040
FRAC 0x92926192
Try init_ddr_mt46v32m16_133Mhz
power 0x00820710
Frac 0x92926192
start change cpu freq
hbus 0x00000003
cpu 0x00010001

initcall: 3e09f908 (relocated to 40002908)
initcall: 3e0a013c (relocated to 4000313c)
initcall: 3e0a2ec0 (relocated to 40005ec0)
initcall: 3e0a2ea8 (relocated to 40005ea8)
initcall: 3e0a2e88 (relocated to 40005e88)
initcall: 3e0a2e68 (relocated to 40005e68)
Net: Net Initialization Skipped
No ethernet found.
initcall: 3e0a2e5c (relocated to 40005e5c)
Initial value for argc=3
Final value for argc=3
### main_loop entered: bootdelay=3

Хе-хе, работает! Ок, запишу этот факт как причину потенциальных нестабильностей в будущем, ибо остался еще один 10uF, который тоже может усложнять жизнь. Теперь пробую с внешним питанием.

PowerPrep start initialize power…
Battery Voltage = 3.74V
5v source detected.Valid battery voltage detected.Booting from battery voltage source.
Mar 18 2015
07:59:13
Try poweron_pll
Try turnon_mem_rail
Try init_clock
EMI_CTRL 0x1C084040
FRAC 0x92926192
Try init_ddr_mt46v32m16_133Mhz
power 0x00820710
Frac 0x92926192
start change cpu freq

Теперь начались зависания. Более того, ситуация не регулярная, периодически проявляется при питании от аккумулятора, периодически от внешних 5В, периодически стартует и работает. Опять правлю код, отключаю переключение процессора на PLL, ядро остается работать на 24МГц. Все стабильно. Меняю делитель PLL, скручиваю частоту, и плата успешно запускается на 320 МГц. Надо попробовать рекомендацию производителя — конденсатор на 100 pF в цепи импульсного DC/DC. Место на печатной плате под конденсатор я заложил. Позже вернусь к этому вопросу.

Linux kernel

Итак, на текущий момент есть плата, стартующая с карты памяти, и загружающая U-Boot. Дальше по плану надо загружать ядро.

Выкачиваю актуальные исходники ядра с kernel.org, распаковываю и в три клика собираю ядро.

make ARCH=arm CROSS_COMPILE=$ mxs_defconfig
make ARCH=arm CROSS_COMPILE=$ menuconfig
make ARCH=arm CROSS_COMPILE=$ -j4 zImage modules

Надо включить Kernel low-level debugging functions вместе с early printk
И еще enable dynamic printk() support
И еще видеоподсистему отключить
И еще половину лишних и не очень драйверов

И еще собрать dtb — device tree blob, структуру, описывающую ядру базовые вещи — количество памяти, периферию SoC, и т.д.

make ARCH=arm CROSS_COMPILE=$ imx23-olinuxino.dtb

cat arch/arm/boot/zImage arch/arm/boot/dts/imx23-olinuxino.dtb > arch/arm/boot/zImage_dtb

После чего можно копировать ядро на флешь.

Запускаю, и получаю kernel panic. Логично, корневой файловой системы еще нет.

Debian

В качестве собственно операционной системы я выбираю Debian. По-моему, отличный дистрибутив — простой и надежный, как деревянная палка. Беру готовую сборку, распаковываю на раздел карточки, и указываю при загрузке ядра, где искать его законную корневую.

PowerPrep start initialize power…
Battery Voltage = 3.68V
Boot from battery. 5v input not detected
poweron_pll
turnon_mem_rail
init_clock
EMI_CTRL 0x1C084040
FRAC 0x92925E92
init_ddr_mt46v16m16_96Mhz
power 0x00820710
Frac 0x92925E92
start change cpu freq
Try now
hbus 0x00000003
cpu 0x00010001

U-Boot 2015.04-rc3-00209-ga74ef40-dirty (Mar 18 2015 — 14:26:18)

CPU: Freescale i.MX23 rev1.4 at 320 MHz
BOOT: USB
DRAM: 32 MiB
MMC: MXS MMC: 0
In: serial
Out: serial
Err: serial
Net: Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot: 0
2650994 bytes read in 906 ms (2.8 MiB/s)
Kernel image @ 0x41000000 [ 0x000000 — 0x284e60 ]

Debian GNU/Linux 6.0 debian ttyAMA0

debian login: root
Password:
Last login: Thu Jan 1 02:00:41 EET 1970 on ttyAM0
Linux debian 3.19.2 #5 Thu Mar 19 10:58:08 EDT 2015 armv5tejl

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@debian:

# free
total used free shared buffers cached
Mem: 19160 18292 868 0 1496 9756
-/+ buffers/cache: 7040 12120
Swap: 0 0 0
root@debian:

# cat /proc/cpuinfo
processor: 0
model name: ARM926EJ-S rev 5 (v5l)
BogoMIPS: 159.12
Features: swp half fastmult edsp java
CPU implementer: 0x41
CPU architecture: 5TEJ
CPU variant: 0x0
CPU part: 0x926
CPU revision: 5

Hardware: Freescale MXS (Device Tree)
Revision: 0000
Serial: 0000000000000000
root@debian:

# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 1789440 295900 1384592 18% /
tmpfs 9580 0 9580 0% /lib/init/rw
udev 10240 0 10240 0% /dev
tmpfs 9580 0 9580 0% /dev/shm
tmpfs 9580 0 9580 0% /var/volatile
tmpfs 9580 0 9580 0% /media/ram
root@debian:

# mount
rootfs on / type auto (rw)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
tmpfs on /var/volatile type tmpfs (rw)
tmpfs on /media/ram type tmpfs (rw)

Дааа, есть над чем поработать.

Но, тем не менее, система работает, грузится с карточки памяти, размещается во всем диапазоне DDR памяти, и по праву может называться одноплатным компьютером! Это от схемы в голове до реализации в железе.
Итого, ошибок дизайна пока что не обнаружено, хотя нарекания уже есть. Что-ж, для начала, я считаю, достаточно.

Заключение

На самом деле это только начало. Еще есть над чем поработать — разобраться с периферией, в частности интересен аудио и видеовыход, протестировать SoC на штатных частотах, а еще лучше разогнать, измерить потребляемый ток, проверить при минусовых и плюсовых температурах (интересна устойчивость DDR контроллера), проверить на ресурсоемких задачах (например, видеотрансляция с веб камеры по USB WIFI), и в результате сделать на платке WiFi-управляемый танк с камерой и направленным микрофоном. Но не сейчас. Сейчас у меня есть деловое предложение 🙂

d9288c96e638401e9a8f0ff31d18daad

Есть три платы, которые я могу отдать. Все что нужно для получения — озвучить в комментариях идею, как можно применить получившуюся систему. Лучшие предложения получат по экземпляру даром, с надеждой, что вы реализуете свою идею, и расскажете, что у вас получилось. Раздачу слонов осуществлю 30 марта 2015 года, т.е. через неделю.

Для меня это будет обратной связью: мне нужно знать как поведет себя система в реальных условиях, насколько надежно себя покажет, какие проблемы возникнут, и т.д.

На этом пожалуй все, жду ваших комментариев.

UPD: по заявкам: первый экземпляр достается neochapay за идею с положительным рейтингом
второй экземпляр уйдет r00tGER, третий REPISOT
«Кто раньше встал, того и тапки».

Источник

Поделиться с друзьями
DOMA35.RU - первый компьютерный портал
Adblock
detector