Ev Yapımı Linux Board

Uzun süre gömülü Linux yazılımı ve donanımı ile haşır-neşir olduktan sonra evde Linux board nasıl yapılır adında bir başlık oluşturup, bu işe merak salanlar için bir kaynak oluşturayım dedim. Bir kaç sene önce hazır gömülü Linux imajının üzerine GUI yazılımları yaparken kendimi bir anda donanımı hazırlarken hatta kendi bootloader’ımı oluştururken buldum.

Bu yazıda size RAM yollarının uzunluğu, empendansı gibi kritik öneme sahip konuları detaya girmeden açıklayacağım. Altium da bu gibi çalışmaları Youtube üzerinden bir çok kaynaktan öğrenebilirsiniz. Eğer 2010 sürüm yerine daha güncel bir Altium kullanıyor olsaydım bu konuda kısa kısa videolar hazırlamayı düşünebilirdim. Şimdilik çalıştığım firmanın yeni yıl proje bütçesine ek yapıp lisansı güncleleyip Altium tarafından soyulmasını bekleyeceğim…

Evde Linux bordumuzu yaptıktan sonra bu işin sadece donanımla kalmayacağını hazırladığımız sistemi birde yazılımsal olarak ayağa kaldırmamız gerektiğini göreceğiz. Gömülü Linux üzerinde çalışmak için temel düzeyde C bilgisine sahip olmanız size fayda sağlayacaktır. Ancak, herhangi bir yazılım dili tecrübeniz olmasa dahi bu yazıyı takip ederek sistemizini ayağa kaldırabileceğinizi ümit ediyorum. Çok bilgili olsanız dahi bu işin saç baş yolduran bir iş olduğunuda belirtmem gerekiyor. Sabahlara kadar çabalayıp, daha önce çalıştırdığım sistemi bu defa neden çalıştıramıyorum diye uğraştığım oldu. Kısaca anlatmak istediğim; bu iş gerçekten bir kaç tel saçınızı ağartmadan size ohh be dedirtmez…

Planladığım sistem üzerinde lehimlemesi kolay olsun diye Allwinner A13 SoC kullandım. Bu SoC’nin dahili RAM kalibrasyon modülü yok. Bu sebeple kullanacağımız RAM’in ürün kodundaki bir harf değişikliği dahi sisteminizin kararsız çalışmasına yetecektir. Her RAM’in kendine özgü kalibrasyonu olduğunu bilmenizi isterim. Sistemim çalıştı 0 MiB RAM hatası alıyorum ya da sistem bir kaç saat sonra donuyor derseniz kullandığınız RAM’i kontrol etmeniz fayda sağlayacaktır. Tabi bu hataları aldıktan sonra RAM’lerin doğruluğunu kontrol ettiğinizi ve doğru entegreleri kullandığınızı gördükten sonra asıl şenliğin burada başladığını farkedeceksiniz 😀

Benim ilk kartımı çalıştırmam gece-gündüz çabalayıp iki hafta uykusuz kalmama sebep olmuştu. Sistemi de şans eseri çalıştırmıştım. Öyleki parmağımı RAM’in belli bir bölgesi üstünde tutup enerji verdiğimde sistem 0 MiB RAM hatasını geçmiş ve boot etmişti. Bir sürü tahlihsizlikle beraber edindiğim tecrübelerle bir kaç tasarım daha yapmış, sonunda da bu yazı için tek RAM’li kolay dizilebilecek malzemelerle bir tasarım hazırladım.

Konuyu yazılım ve donanım olarak ikiye ayıracağım, bu sayede isteyen istediği bölümden başlayıp işine yarayana daha hızlı ulaşabilecektir. Hatta başlamadan önce kartımızın dizgi aşamasından bir foto paylaşayım da şevkimiz artsın 🙂

Linux Board Dizgi

Sistem özellikleri;
*Allwinner A13 SoC
*256 MB RAM
*40 ve 50 Pin TFT Sürücü
*6-28 V Besleme Aralığı

Kartın dizgisi bir hayli zahmetli oldu. Dizgi bittikten sonra enerji verdim veeee 0 MiB uyarısı ekranda belirdi :). Sorunu çözmeye çalışırken iki defa RAM değiştirdim, sıra dirençlerin lehimlerinin üzerinden defalarca geçtim ve A13 pinleri ile RAM arasındaki bağlantıları tek tek ölçtüm. Nihayet 5-6 saat civarı uğraşıdan sonra bağlantı sorunları çözünce ekrana görüntü geldi…

Donanım
Bu projede donanım bakımından en kritik nokta RAM yollarının uzunluğu ve empedansının ayarlanması diyebilirim. Bir sonraki aşamada beslemenin temizliği ve istediğimiz çıkış voltajının maksimum +- 60 mV olarak sabit verilmesi gelecektir. Zira RAM voltajı için maksimum 1.575 V minimum ise 1.450 V gerekmektedir.

RAM yol uzunluklarını ayarlarken üreticinin verdiği dökümanlardan ve referans tasarımdan faydalandım. Aynı yoldan gitmenizi tavsiye ederim, zira yol uzunluğu hesabında entegre içindeki bonding’lerin bile hesaba katılması gerekebilmekte. Bu çalışma için min.-max. %10 luk bir sapmanın yeterli olduğunu gördüm. Bu sapma oranı ne kadar düşerse hesaplamamız gereken çevresel etmenler o kadar kritik öneme sahip olacaktır. Örneğin, entegrenin pin uzunluğu gibi parametrelerde işin içine girecektir. RAM yollarında via kullanmamak önemli, mümkünse hiç kullanmayın. Birden çok RAM olan bir kartta via’ya ihtiyaç duyarsanız blind via kullanın, tabi bu da üretim maliyetini arttıracaktır. Empedans ve yol uzunluğu eşleme konularında kullandığınız tasarım programını büyük öneme sahip olabiliyor. Nitekim Altium’un bu işler için uygun araçları mevcut.

RAM Data ve Sinyal Yolları

Yukarıdaki ekran görüntüsünde RAM yollarında eşleme yağmak için yolların zig-zag’lı yapıda çizildiğini görebilirsiniz.

Yazılım:
Sistemin merkezinde buildroot yatmakta. Boot işlemleri için buildroot kullanmayı terih ettim. Yeni başlayanlar için de buildroot’u öneririm. Alternatif olarak ise Yocto iyi bir seçenek olabilir. Bunlara ek olarak mevcut olan bir çok bootloader sistemi ayağa kaldırmak için kullanılabilir.

Buildroot için internette bir çok kaynak mevcut. Genel hatlarıyla boardunuza en uygun config dosyasını seçip başlayabilirsiniz. Kendi ihtiyaçlarınız doğrultusunda değişiklikler yaptıysanız yine, hazır olarak sunulan configlerden bordunuza en yakın özellikte olanı seçip sisteminizin boot etmesini sağlayabilirsiniz. Bu kadarı da kafi gelmez ise C dili ile yazılmış buildroot kaynak dosyasında düzenleme yapabilirsiniz. Ben farklı RAM’ler kullanabilmek için RAM kalibrasyon rutinlerinde değişiklik yapıp, açılış logosu, kavye-mouse, ethernet desteklerini kaynak kodda değişiklik yaparak sisteme ekledim.

Ve, sonuç…