Ev ağ donanımı Bir SD kartın mikrodenetleyiciye bağlanması. Monolitik SD ve MicroSD kartlardan veri kurtarma SD kart yuvası pin çıkışı

Bir SD kartın mikrodenetleyiciye bağlanması. Monolitik SD ve MicroSD kartlardan veri kurtarma SD kart yuvası pin çıkışı

Artem Makarov namı diğer Robin

27.09.2014

Son zamanlarda, monolit olarak adlandırılan monokristal bazda yapılan flash sürücüler, veri kurtarma için giderek daha fazla getiriliyor. Bugün, Kemerovo şehrinden bir ortak tarafından gönderilen bir SD hafıza kartı olan böyle bir monolitten veri kurtarma sürecinden bahsedeceğiz. Düğünün videosu karta kaydedildi ve kutlama başarıyla tamamlandığında ve hediye DVD'lerini düzenlemeye ve yayınlamaya başlama zamanı geldiğinde, flash sürücü uzun süre öldü.

Monolitik SD hafıza kartlarının kurtarılması

Dışarıdan bakıldığında bunun PCB kartı, NAND belleği ve denetleyicisi olan "klasik" bir SD kart mı yoksa tek kristal mi olduğunun net olmaması dikkat çekiyor. Ta ki plastik kasa açılana kadar. Çoğu zaman, bu tür hafıza kartlarının arızalanması, çeviri tablolarındaki bir arızadan kaynaklanmaktadır. Daha az sıklıkla - elektromekanik hasar.

Böyle bir karttaki dosyaları kurtarmak için yapmanız gereken ilk şey kristaldeki dökümleri okumaktır. Bunu yapmak için, monolitin izlerini ve temas yüzeylerini gizleyen koruyucu vernik mekanik olarak (temizleme ve taşlama) çıkarılır. Bundan sonra flash sürücü şöyle görünmeye başlar:

Monolitik bir SD kartın izleri ve pin çıkışı

Veri yolu, çip etkinleştirme, okuma/yazma meşgul, güç vb.'nin bağlı olduğu kontak pedleri görülebilir. Elbette hiçbir şey işaretlenmiyor ve neyin nereye bağlanacağını gösteren veri sayfaları da ücretsiz olarak mevcut değil. Pin çıkışı ya tam olarak aynı çalışan flash sürücüyü alarak bulunabilir (ve bunların pek çok türü vardır ve aynı geleneksel Kingston SD'yi görünüşte bulduktan sonra, içine tamamen farklı bir cihaz alabilirsiniz) ve mantık analizörü, neyin nereye ve neden gittiğini titizlikle öğrenin. Veya pinout'u sizin için bu işi zaten yapmış bir kişiden/ofisten satın alarak.

Sonuç şunun gibi bir şeydir:

Veya bu:

Artık ortaya çıkan dökümlerdeki iç dönüşümleri ortadan kaldırmamız gerekiyor. İlk adım, flash sürücü denetleyicisinin NAND hücrelerine bilgi yazarken uyguladığı XOR maskesini kaldırmaktır. Bu maskeyle sektör şöyle görünüyor:

gerekli XOR maskesi seçilip uygulandığında sektör anlamlı bir görünüme bürünür:

XOR dönüşümlerini ortadan kaldırdıktan sonra doğru sektör geometrisini ayarlamanız, işaretleyicileri ve ECC veri düzeltme alanını tanımlamanız gerekir. ECC algoritmasını kullanarak bit hatalarını düzeltin. Blokların hangi sırayla yerleştirildiğini ve boyutlarını öğrenin. Kontrolör tipi bilinmediğinden (bu bir yekpare!), bu özel durumda hangi toplayıcının kullanılacağını belirlemek gerekir. Nihai görüntüyü bir sektör işaretçisi kullanarak mı yoksa çeviri tablolarının geri kalanını kullanarak mı birleştireceksiniz?

Görüntü birleştirildikten sonra, aynı işaretleyiciye sahip çakışma bloklarını uygunluk açısından kontrol edin ve nihai sonucun en iyi olacağı görüntülerin yerine koyun. Dosya sistemiyle tanıdık bir görüntü aldıktan sonra, onu herhangi bir disk düzenleyicide açabilir ve kullanıcının ihtiyaç duyduğu dosyaları yükleyebilirsiniz.

Elbette birçok işlem oldukça otomatiktir, ancak yine de monolitlerden (tek kristaller) verilerin kurtarılması için gereken iş miktarı çok fazladır. Bilgiyi kurtaran her mühendis veya şirket bu tür çalışmalara katılmaya istekli değildir. Ve bu tür bir restorasyonun fiyat etiketi “bütçe” kavramından çok uzaktır.

SD Sandisk kurtarma örneğinin kullanıldığı başka bir durum: aynı monolit, yalnızca iç kısmı biraz farklı:

Okumaya Hazır

MicroSD flash sürücülerin kurtarılması

Ve işte Mikro SD karttaki temas yüzeylerinin nasıl göründüğü. Bunların birçok düzen seçeneğinin sadece birkaç örneği olduğunu hemen belirtmek gerekir.

Ve işte monolitik Memory Stick Pro Duo hafıza kartı için pin çıkışı seçeneği

Bu onun bir yekpare olduğu anlamına gelmiyor ancak sıradan bir USB flash sürücü de değil. Bellek yongası (kristal) bileşik (yapıştırıcı) ile doldurulur.

Ve fotoğrafların geri yüklenmesinin gerekli olduğu monolitik bir Olympus XD Picture kartı şöyle görünüyor:

Bozuk Mikro SD'leri geri yükleme

Ayrı olarak, parçalara ayrılmış, kırık bir parça, gövdede çatlaklar vb. bulunan MicroSD flash sürücülerden bilgi kurtarmaya yönelik görevlerin başarıyla tamamlandığını belirtmekte fayda var. Aşağıdaki resimlerdeki bazı örnekler:

Her durumda, parçalara ayrılmış, parçası kırık vb. bir flash sürücüden bahsettiğimizde. NAND kristali sağlam kalırsa bilgileri geri yüklemek mümkündür. Örneğin aşağıdaki örnekte yer alan Sandisk mikroflaş sürücüsünde dikkatsiz çalışma sonucunda bir parça kopmuş ve kırmızı oval ile işaretlenmiş izlere zarar vermiştir.

Hardmaster laboratuvarı, monolitik USB, SD, microSD, Memory Stick vb.'den veri kurtarma konusunda deneyim ve niteliklere sahip az sayıdaki laboratuvardan biridir. hafıza kartları. Monolitik bozuk flash sürücünüzde iade etmek istediğiniz önemli dosyalar varsa lütfen bizimle iletişime geçin!

Birkaç yıl önce Mayıs 2011'de kült oyun "Elite"nin yaratıcısı David Braben, ilk tek kartlı bilgisayar Raspberry Pi konseptini sundu. Bu an hayatımda bir dönüm noktası oldu. Flash sürücü boyutunda bir bilgisayar yapma fikri henüz yüzeydeydi ancak Raspberry Pi Vakfı'nın yardımıyla ivme kazandı.

Zaten 25 Temmuz 2011'de bilgisayarın alfa sürümü üretime alındı. Ne yazık ki projenin konsepti değişti ve artık kredi kartı büyüklüğünde bir bilgisayar olarak konumlandırıldı. Bu duruma rağmen milyonlarca insan onu takip etti. Ben de kalabalık etkisine uydum ve her gün resmi proje sayfasını kontrol ettim. 29 Şubat 2012'de gerçekleşen “mucize” - satışların başlaması - için uzun ve acılı bir bekleyiş başladı.

Raspberry Pi, Farnell ağı veya RS Components üzerinden satın alınabilir. Anlaşıldığı üzere, 29 Şubat'ta yalnızca ön sipariş vermenin mümkün olduğu ortaya çıktı. Hiçbir ofisin stoklarında bu panolar yoktu. İlk cihaz partisi yalnızca 10.000 kopyaydı, dolayısıyla projedeki heyecan göz önüne alındığında sipariş vermek çok zordu. Ancak tüm zorlukların üstesinden gelerek aynı gün saat 14:06'da bilgisayar Farnell'den 46,73 £ karşılığında satın alındı.

Yurtdışı siparişlerimin herhangi birinin yerine getirilmesi çok uzun sürdü. Teslimat için £20 ücret alan Farnell'in, paketi 29 Mayıs 2012'de (2 ay sonra) takip numarası olmadan normal postayla göndermesine son derece üzüldüm. Şaşırtıcı bir şekilde, Royal ve Russian Mail'in ortak yaşamı, paketi 22 Haziran'da güvenli ve sağlam bir şekilde teslim etti. Son birkaç aydır en çok istediğim paket bu olduğundan, strese daha fazla dayanamadığım için işten izin alıp postaneye koşmak zorunda kaldım.

Raspberry Pi'nin ilk lansmanı için nasıl yapılandırılacağı hakkında konuşmanın bir anlamı yok. Bu konuyla ilgili bir makale yazmakta birkaç yıl geciktim; bununla ilgili birçok satır zaten başka kaynaklarda yazıldı. Youtube Yeterli sayıda video yayınlandı. Benim için önemli bir tasarım kusurundan bahsetmek istiyorum - SD kart yuvasının uygunsuz konumu. Kart takıldığında tahtanın dışına büyük ölçüde çıkıntı yapar ve bu da ev yapımı kasanın görünümünü bozar.

Bu sorunu çözmek için iki seçenek vardır: Raspberry Pi'ye takılı konektöre paralel bir SD->microSD adaptörünü lehimleyin (bu işlemin nasıl yapılacağını Habré'deki makalede okuyabilirsiniz) veya Düşük profilli bir MicroSD-> kullanın. SD adaptörü. İlk seçenek benim için kesinlikle kabul edilemez - tahtayı lehimlemeye cesaret edemiyorum çünkü... Raspberry'imin sunumunu bozmaktan korkuyorum. En iyi seçimin Düşük profilli bir adaptör kullanmak olduğunu düşünüyorum.

Başlangıçta böyle bir adaptörü yabancı çevrimiçi mağazalardan birinden satın almaya karar verildi. Bir seçenek var, ancak bu tür bibloların maliyeti kesinlikle fahiş. En ucuz kopyaların maliyeti 10 dolardır ve bazı örnekler açıkçası ev yapımı gibi görünmektedir. Bağdaştırıcıyı kendiniz yapma konusundaki son karar, DIYGadget web sitesini ziyaret ettikten sonra verildi; bunların oluşturulmasını tekrarlamanın ne kadar kolay olduğunu unutmayın.

Hazır? Sözlerden eyleme geçelim. Bağdaştırıcıyı doğru şekilde yapmak için SD ve microSD kartların özelliklerini inceleyelim. Üretim için gerekli olan her şeyi tablo 1, 2'de sistematize etmeye çalıştım.

Tablo 2: SD hafıza kartı pin çıkışı

Bellek kartlarındaki ilgili kontakları bağlayıp Vss1, Vss2'yi birleştirerek adaptörün elektrik devre şemasını elde ederiz.

Bir adaptör yapmak için ihtiyacımız var:
1) microSD tutucu (CF TFC-WPCE-08 MICROSD CARD) – 52,22 ovmak.
2) Yaklaşık 4 cm2 alana sahip bir çift taraflı folyo fiberglas laminat parçası (FOLYO CAM TEKSTOLİT 1.5MM 2 TARAF konumunun% 2'si) – 3 ruble.
3) Kurulum malzemeleri (ferrik klorür, kalay, akı) – 10 ruble.

O zaman projenin maliyeti 65 ruble 22 kopek ve belli bir miktar boş zaman olacak. Tasarım maliyetini düşürmek adına microSD kart tutucusunu CF TFC-WPCER-08 MICROSD KART ile değiştirebilirsiniz. Maalesef bu ürün Promelektronika JSC deposunda mevcut değildi, bu yüzden daha pahalı bir seçenek satın aldım. Tutucu tipini değiştirmeniz halinde LUT (lazer ütüleme teknolojisi) için hazırladığım şablonu kullanamayabileceğinize dikkatinizi çekerim.

PCB'yi tasarlamak için Autocad'i kullandım çünkü... en sevdiğim SprintLayout, gerekli şablonun varlığıyla beni memnun edemedi. Baskılı devre kartını değiştirmek isteyenler için kaynağı DWG formatında indirebilir ve eğer böyle bir ihtiyaç yoksa PDF formatında bir boşluk bırakabilirsiniz (PDF şablonunu uygulamadan önce boyutları kontrol etmenizi öneririm).

Şablon tahtaya aktarıldıktan sonra bir katmandan diğerine geçiş için 0,5 mm çapında delikler açılmasını öneririm.

Daha önce gelecekteki adaptörün izlerini ışınlamış olan ince bir tel kullanarak katmandan katmana geçiş yapıyorum. Deliklerin microSD tutucunun altında bulunduğu yerlerde, bozulmadan takılması için kalay damlalarını bir eğe ile öğütmek gerekir. Son olarak tutucuyu yerleştiriyoruz. Kartın üretim sürecinde çeşitli fluxlar kullanılmışsa Raspberry Pi'nize yerleştirmeden önce kartı yıkadığınızdan emin olun.

Kendiniz bir adaptör yapın veya satın alın; seçim sizin. Seçiminizi daha bilinçli hale getirmek için, özellikle sizin için satın alınabilecek birkaç bağlantı seçtim:
1) Raspberry Pi Premium Düşük Profilli MicroSD'den (TF) SD Kart Adaptörüne. Kurulu Koruyun.
2) Raspberry Pi Düşük Profilli MicroSD'den SD Karta Adaptör, SD kart hasar görmez!!
3) MicroSD'den "kısa" SD / RS-MMC adaptörüne. Everdrive arabaları, Raspberry Pi vb. için.
4) Raspberry Pi için Düşük Profilli MicroSD - SD Kart Adaptörü.
5) Raspberry pi REV2 için SD kart adaptörü +ücretsiz kargo.

Sonuç olarak, tüm materyallerin yalnızca bilgilendirme amaçlı olduğunu söylemek isterim. Gelişmelerin ticari amaçlarla kullanılması kesinlikle yasaktır. Materyallerin çoğaltılması yalnızca benim iznimle ve orijinal kaynağa yapılan atıflara uygun olarak mümkündür. Sadece sözle değil fiilen de destek olmak ve bana teşekkür etmek isteyenler lütfen bana e-posta göndersinler.

Cihazı kendiniz monte etmek için aşağıdaki dosyaları indirmeniz gerekir:
1. DWG formatında LUT için kaynak kartı
2. LUT için PDF formatında ödeme

Çabalarınızda iyi şanslar!!!

Ders 33

Bölüm 1

SPI. Hafıza kartı. YAĞ

Bugün SPI arayüzünde en sevdiğimiz konuya devam edeceğiz. Atmega8a ve ATTtiny2313 kontrol cihazlarını birbirine bağlayan bu veri yolu ile işimiz bitti. Ve bugün bu arayüzü kullanarak bu veri yolu üzerinden mikrodenetleyiciye bir hafıza kartı bağlamaya çalışacağız. SD (Güvenli Dijital).

Bu kart SDIO arayüzü üzerinden de bağlanabiliyor ancak böyle bir arayüz kontrolcümüz tarafından donanımsal olarak desteklenmediği için bu dersimizde buna değinmeyeceğiz. Otobüs bağlantısı türüyle ilgileniyoruz SPI, çünkü bu konu hakkında zaten iyi bir bilgi birikimine sahibiz ve ayrıca programladığımız denetleyicideki donanım desteğine de sahibiz.

Bununla birlikte, her iki tür için de kart bacaklarının pin düzenine bakacağız.

İkinci türle ilgilendiğimiz için onunla ilgileneceğiz.

Ve burada anlaşılacak pek bir şey yok. Bu kısaltmaların hepsini biliyoruz. Tüm standart SPI arayüz pinleri buradadır ve burada gereksiz hiçbir şey yoktur.

Şimdi genel olarak harita hakkında. Bu kart veri saklamamızı sağlar; bellek türü FLASH'dır, bu da EEPROM tipi belleğe kıyasla kalıcıdır, yani güç kapatıldığında veriler hiçbir yerde kaybolmaz, ancak kayıtlı kalır. Ayrıca bu hafızanın farklılıkları da var, bunları programlama sürecinde öğreneceğiz. Temel farklardan biri de tıpkı EEPROM hafızasında olduğu gibi bu hafızaya 1 byte yazı yazamıyoruz. Teorik olarak elbette yapabiliriz, ancak FLASH - NOR veya NAND türüne bağlı olarak oraya yalnızca baytımızdan olanlar veya yalnızca sıfırlar yazılacaktır. Yani bir baytı yazmadan önce onu silmemiz gerekiyor ve bu hafızanın organizasyonu nedeniyle sadece bloklar halinde silebiliyoruz, dolayısıyla sadece bloklar halinde yazabiliyoruz. Ancak EEPROM'dan en büyük fark var - bu fiyattır. Çoğu zaman daha ucuzdur, hatta bazen depolanan bir bilgi birimi (megabayt başına, gigabayt başına) için çok daha ucuzdur. Bu nedenle FLASH bellek genellikle her zaman çok daha fazla miktarda bilgiye sahiptir.

4 tür SD vardır, ancak bunu biraz sonra inceleyeceğiz.

Bu kartı Proteus'tayken bağlayalım

Burada her şey basit. Aslında pek de öyle değil. Daha fazla dirence ihtiyaç var

Kart 3,3 volt ile çalıştığından uygun seviyelerin sağlanması için bu dirençlere ihtiyaç vardır. Genel olarak teknik belgelere göre 2,7 ila 3,6 volt arasındadır.

Ayrıca proteinde belirtilmiyor ama aslında 5 volt'u 3,3 volta dönüştüren bir mikro devre takarak kartımıza ayrı bir güç kaynağından güç sağlayacağız.

Daha doğrusu, hiçbir şey kurmayacağız, ancak her şeyin zaten kurulu olduğu hazır bir modül kullanacağız.

Ayrıca ekran kitaplığının işlevselliğini genişletirken olduğu gibi bağlı bir ekranımız da var.

Pratik açıdan her şey şu şekilde görünüyor:

Tutuculu modül böyle görünüyor

Böyle bir modülü her yerde bulabilirsiniz, maliyeti bir kuruştur. SDIO aracılığıyla bağlanan modülün maliyeti daha fazladır. Ayrıca modülün voltajı 3,3 volta düşürmek için zaten kurulu bir mikro devreye sahip olduğunu da görüyoruz. Ve gücü yalnızca 5 volt kontağa bağlarız ve 3,3'e hiçbir şey bağlamayız

Ayrıca tüm seviye bölücüler modül üzerine monte edilmiştir yani bu modül özellikle 5 volt cihazlara bağlantı için tasarlanmıştır.

Ve test etmek için 32 megabaytlık, tam olarak bir megabayt, bir gigabayt değil, bir flash kart çıkardım

Bu flash kart, bir kamerayla birlikte hediye olarak verildi ve testlerimiz için çok uygun, en azından şu veya bu aksaklığın karttaki çok fazla bellekten kaynaklandığını düşünmeyeceğiz.

Geçen derste oluşturduğumuz fonksiyonu çok aktif kullanacağımız için kodun tamamı da display kütüphanesi ile birlikte son dersten alınmıştır ama tabi ki yeni bir proje oluşturulup buna göre isimlendirilmiştir. MYSD_SPI.

Gereksiz satırları kaldıralım, main()'da sadece buna sahip olacağız

intana( geçersiz)

imzasızintBen;

Port_ini();

LCD_ini(); //görüntüyü başlat

Şeffaf LCD(); //görüntüyü temizle

Ayar konumları(0,0);

Str_lcd( "Dize 1");

Ayar konumları(2,1);

Str_lcd( "Dize 2");

Ayar konumları(4,2);

Str_lcd( "Dize 3");

Ayar konumları(6,3);

Str_lcd( "Dize 4");

Gecikme_ms(2000);

// for (i=0;i<=22;i++) {str80_lcd(buffer2+i*20);_delay_ms(1000);}

Sırasında(1)

Metnin karakter karakter çıktısını alamayacağımız için değişkende char tipini kullanabiliriz.

imzasızkarakter Ben;

Şimdi bir nüans daha.

Proteus'ta SD kartla çalışabilmemiz için kartla birlikte tutucunun kendisini de eklememiz yeterli değil, aynı zamanda özelliklerine flash kart görüntü dosyasını da eklememiz gerekiyor.

Bir tane oluşturmak zor değil. Bunun bir yolu WinImage programını kullanarak oluşturmaktır.

Dosya -> Yeni menü öğesini kullanarak içinde yeni bir dosya oluşturuyoruz. İletişim kutusundaki en son öğeyi seçin ve "Tamam"a tıklayın

Proteus'taki test için 4 megabaytlık bir boyut bizim için yeterli, bu nedenle bir sonraki diyalogda alanı sektör sayısıyla değiştireceğiz ve ayrıca FAT12/16 formatını seçeceğiz çünkü 32- ile çalışmanın özellikleri bit dosya sistemi biraz farklıdır ve biz de “Tamam”a tıklayacağız.

Genel olarak henüz dosya sistemiyle çalışmadığımız için elbette FAT32'den çıkabiliriz ama dersin ilerleyen bölümlerinde dosya sistemiyle çalışacağız ve 12/16 ile çalışacağız.

Daha sonra Dosya -> Farklı Kaydet menü öğesini kullanarak oluşturduğumuz dosyamızı kaydediyoruz. Ve bunu kayıtlı protein projesinin bulunduğu klasöre kaydediyoruz. Dosyaya bir ad verelim ve "Kaydet"e tıklayalım

Ayrıca o zaman bu dosyanın "salt okunur" özelliğinde olmadığından emin olmamız gerekecek ve bundan sonra onu Proteus'a bağlayabileceğiz. Proteus bir tür format gerektirdiğinden ve dosyamız görünmeyeceğinden, dosya adını manuel olarak girmeniz gerekecektir.

Dosya proje klasöründe bulunduğundan herhangi bir yola ihtiyacımız yok. "Tamam"a tıklayın.

SPI'miz yazılım tabanlı olacağından veri yolunu başlatmamıza gerek yok; tüm flash kartlar donanımla doğru şekilde çalışmayacak, bu nedenle herhangi bir kayıt kullanmamıza gerek kalmayacak. Donanım elbette daha iyidir, ancak protokolün nasıl çalıştığını tam olarak anlamak için yazılımla da çalışmanız, yani bağlantı noktalarının bacaklarını seğirmeniz gerekir. Genel olarak şemaya baktığımızda, donanımda her şeye sahipmişiz gibi görünebilir, çünkü tam olarak bu bacakları seçtim, bunun nedeni onu bu şekilde seçmemdir, böylece daha sonra belki birileri donanım uygulama lastikleriyle çalışmayı deneyebilir. .

Port ayakları için makro değişiklikleri ekleyelim

#katmak"ana.h"

#tanımlamakMOSI3

#tanımlamakMİSO4

#tanımlamakSCK5

#tanımlamakSS2

Port başlatma fonksiyonuna bacakları başlatmak için kod ekleyelim

geçersizport_ini( geçersiz)

LİMAN=0x00;

DDRD=0xFF;

PORTB|=(1<< SS)|(1<< MİSO)|(1<< MOSI);

DDRB|=(1<< SS)|(1<< MOSI)|(1<< SCK);

Kayıttaki tüm bitler varsayılan olarak sıfır olduğundan MISO pinini girişte bırakıyoruz ve ona dokunmuyoruz. Ayrıca MOSI ve SS'deki yüksek seviyeyi hemen açıyoruz ve MISO'ya bir direnç çekiyoruz.

SPI veriyolu üzerinden bir bayt aktarmak için bir fonksiyon yazalım

geçersizSPI_SendByte( imzasızkarakterbayt)

{

}

Döngüye ve döngünün kendisine bir değişken ekleyelim

geçersizSPI_SendByte( imzasızkarakterbayt)

imzasızkarakterBen;

için( Ben=0; Ben<8; Ben++) //baytın bitlerine göre hareket et

{

}

Tam olarak 8 bit ilettiğimiz için neden 8'e kadar saydığımızın açık olduğunu düşünüyorum.

Pekala, bunları yavaş yavaş aktarmaya başlayalım.

Önce en soldaki biti kontrol edip maskeleyerek tüm bayttan ayıralım ve 1'e eşitse MOSI veriyolunda 1'e ayarlayacağız, 0 ise veriyoluna dokunmayacağız

için( Ben=0; Ben<8; Ben++) //baytın bitlerine göre hareket et

SD karttan gelen görüntüyü ekrana yansıttık ama bazı noktalar atlanmış, ilki kartın kendisini bağlamak, ikincisi ise kütüphanenin fonksiyonlarının sadece bir kısmı dikkate alınmış. Küçük Şişmanlar, bu noktalara daha detaylı bakalım.

Kartla iletişim iki arayüzden biri aracılığıyla mümkündür, SPI veya SD.



SD arayüzünün tek bit ve dört bit modlarında çalışabildiğini söylemek gerekir.

SPI üzerinden kart bağlantı şeması standarttır ve şu şekilde görünür; kullanılmayan kart pinlerinin 10K direnç kullanılarak güç kaynağına bağlanması gerekir.


Ancak amatör tasarımlarda, çekme dirençleri genellikle ihmal edilir ve bağlantı şeması basitleştirilir.

SPI üzerinden bağlandığında kartın besleme voltajı konusunda çok talepkar olduğunu ve besleme voltajındaki hafif bir düşüşün kartın çalışmamasına yol açtığını belirtmek gerekir, bu kişisel deneyimle test edilmiştir, SD hakkında söylenecek bir şey yok. Arayüz henüz denemedim. Bütün bunları şunu demek için yazdım Güç kaynağı için kapasitörler taktığınızdan emin olun.. İndüktöre gelince, 100mA'ya kadar akım için tasarlanmalıdır, ancak kurulmasına gerek yoktur.

Yukarıda gösterilen diyagramlar, kartın çalışması için 3,3 volta ihtiyaç duyduğunu göstermektedir; buna göre veri iletim hatlarındaki voltajın 0 - 3,3 volt aralığının dışına çıkmaması gerekir ve burada şu soru ortaya çıkıyor: MK'ye güç veriliyorsa ne yapılmalı? 5 volt mu?
Cevap basit, veri hatlarını eşleştirmeniz gerekiyor ve bu, geleneksel bir dirençli bölücü kullanılarak yapılabilir.


Diyagram, MISO hattının, verilerin bu hat üzerinden iletildiği şekilde koordine edilmesine gerek olmadığını göstermektedir. karttan MK'ye.
Aslında, çok az kişi kartı doğrudan MK'ye bağlar; kart konnektörünü MK'ye bağlamak veya konnektör ve gerekli tüm kabloları içeren bir kalkan satın almak çok daha uygundur.

Bağlantıyı çözdük şimdi kütüphaneyi nasıl kullanacağımıza bakalım Küçük Şişmanlar Küçük bellek boyutlarına sahip 8 bitlik mikrodenetleyiciler için tasarlanmıştır.

Kütüphane 5 dosyadan oluşur:
tamsayı.h- ana veri türlerini açıklayan bir başlık dosyası.

diskio.h- diskle çalışmaya yönelik düşük seviyeli işlevlerin prototiplerinin ve bunların döndürdüğü durum kodlarının bildirildiği bir başlık dosyası.

diskio.c- bu dosyada düşük seviyeli işlevler uygulanmalıdır; başlangıçta orada “taslaklar” vardır.

pffсonf.h- yapılandırma dosyası.

pff.h- disk dosya sistemiyle etkileşime girecek işlevlerin prototiplerinin bildirildiği bir başlık dosyası.

pff.c- dosya, disk dosya sistemiyle etkileşime yönelik işlevlerin uygulamalarını içerir.

Kütüphanenin çalışabilmesi için düşük seviyeli fonksiyonların uygulanmasının gerekli olduğu görülmektedir. Ancak AVR veya PIC'den bahsediyorsak, onlar için web sitesinde dosyayı içeren kütüphaneyle çalışmanın bir örneğini indirebilirsiniz. mmc, zaten düşük seviyeli işlevleri uyguluyor. Ayrıca pff.h dosyasındaki kütüphaneyi yapılandırmanız ve SPI çalışması için gerekli fonksiyonları yazmanız gerekiyor.

Petit FatF'lerin işlevleri.

FRESULT pf_mount (FATFS*)- işlev diski bağlar/bağlantısını kaldırır. Bu işlevin diskle çalışmadan önce çağrılması gerekir; işlevi bir boş işaretçiyle çağırırsanız diskin bağlantısı kesilir. Fonksiyon herhangi bir zamanda çağrılabilir.

Seçenekler
FATFS* fs- FATFS tipindeki bir nesnenin işaretçisi; bu yapının açıklaması pff.h dosyasında bulunabilir. Sadece bu türden bir değişken bildirmemiz gerekiyor.

Dönüş değerleri:
FR_OK (0)
FR_NOT_READY- cihaz başlatılamıyor
FR_DISK_ERR- diskten okunurken bir hata oluştu
FR_NO_FILESYSTEM- diskin geçerli bir FAT bölümü yok

FATFS fs;//FATFS türünde bir nesne tanımlayın //diski bağlayın if (pf_mount(&fs) == FR_OK) ( //disk takılı, onunla çalışıyoruz //diskin bağlantısını kesin pf_mount(NULL); ) else ( //disk bağlanamadı )

FRESULT pf_open (const char* yolu)- işlev mevcut bir dosyayı açar. Dosya açıldıktan sonra onunla çalışabilir, yani ondan okuyabilir ve ona yazabilirsiniz. Başka bir dosya açılıncaya kadar açık bir dosyayla çalışabilirsiniz. Fonksiyon herhangi bir zamanda çağrılabilir.

Seçenekler
const char* yolu- dosyanın yolunu gösteren bir dizenin işaretçisi. Yol, dizinleri eğik çizgiyle ayırarak tamamen kök dizine göre belirtilmelidir.

Dönüş değerleri:
FR_OK (0)- işlev başarılı olursa döndürülür
FR_NO_FILE- dosya bulunamadı
FR_DISK_ERR- disk hatası
FR_NOT_ENABLED- disk takılmamış

FATFS fs;//FATFS türünde bir nesne bildirin //diski bağlayın if (pf_mount(&fs) == FR_OK) ( //kök dizinde bulunan dosyayı açın if(pf_open("hello.txt") == FR_OK) ) ( //bir şeyler yapın ) //klasördeki dosyayı açın new if(pf_open("new/hello.txt") == FR_OK) ( //bir şeyler yapın ) //diskin bağlantısını kesin pf_mount(NULL) else ( //); Disk eklenemedi)

FRESULT pf_read(void* buff, WORD btr, WORD* br)- işlev, dosyadan belirtilen sayıda baytı okur ve bunları bir arabellekte saklar. Okunan bayt sayısı belirtilenden azsa dosyanın sonuna gelinmiştir.
#tanımla _USE_READ 1

Seçenekler:
geçersiz* güçlendirme- okuma verilerinin saklandığı arabelleğin işaretçisi
KELİME btr- okunacak bayt sayısı
KELİME*br- okunan bayt sayısını saklayan bir değişkenin işaretçisi.

Dönüş değerleri:
FR_OK (0)- işlev başarılı olursa döndürülür
FR_DISK_ERR- disk hatası
FR_NOT_OPENED- dosya açılmadı
FR_NOT_ENABLED- disk takılmamış

FATFS fs;//FATFS BYTE buff türünde bir nesne bildirin;//WORD br dosyasını okumak için arabellek; //bayt sayacı okunur //diski bağlar if (pf_mount(&fs) == FR_OK) ( //kök dizinde bulunan dosyayı açar if(pf_open("hello.txt") == FR_OK) ( //oku 10 byte buradan pf_read(buff, 10, &br); if(br != 10) ( //eğer br 10'a eşit değilse //dosyanın sonuna ulaştık demektir)) )

FRESULT pf_write(const void* buff, WORD btw, WORD* bw)- işlev, açık bir dosyaya veri yazmanıza olanak tanır. Fonksiyonun çalışabilmesi için pffconf.h dosyasına yazmanız gerekmektedir.
#define_USE_WRITE 1

Seçenekler:
geçersiz* güçlendirme- yazmak istediğimiz tamponun işaretçisi, sıfır değeri kaydı sonlandırır
bu arada KELİME- yazmak istediğimiz bayt sayısı
KELİME* bw- yazılabilen bayt sayısını saklayan bir değişkene işaretçi. Bu değişkeni analiz ederek dosyanın sonuna ulaşılıp ulaşılmadığını öğrenebilirsiniz.

Dönüş değerleri:
FR_OK (0)- işlev başarılı olursa döndürülür
FR_DISK_ERR- disk hatası
FR_NOT_OPENED- dosya açılmadı
FR_NOT_ENABLED- disk takılmamış

Kütüphanenin az miktarda belleğe sahip mikrodenetleyiciler için tasarlanmış olması nedeniyle bu işlevin bir takım sınırlamaları vardır:

  • Yeni dosyalar oluşturamazsınız ve yalnızca mevcut dosyalara yazabilirsiniz
  • dosya boyutunu artıramazsınız
  • zaman damgası güncellenemiyor
  • Yazma işlemi yalnızca sektör sınırında başlatılabilir/durdurulabilir
  • salt okunur dosya özelliği yazmayı engelleyemez

Sondan bir önceki noktayı anlamak için, kartın hafızasının her biri 512 baytlık bloklara (sektörlere) bölündüğünü bilmeniz gerekir ve kayıt yalnızca sektörün başından itibaren başlatılabilir. Böylece 1000 byte yazmak istersek ilk sektör tamamen yazılacak, ikinciye ise sadece 488 byte yazılacak ve geri kalan 24 byte sıfırlarla doldurulacaktır.

Açık bir dosyaya yazmak için aşağıdaki adımları uygulamanız gerekir:

  • işaretçiyi sektör sınırına ayarlayın; sınıra ayarlanmadıysa işaretçi alt sektör sınırına yuvarlanacaktır;
  • yazma işlevini gereken sayıda çağırın
  • işlevi boş işaretçiyle çağırarak kaydı sonlandırın

Kayıt fonksiyonunun nasıl çalıştığına örnek vermek gerekirse bir fonksiyonu daha ele almak gerekir.

FRESULT pf_lseek(DWORD uzaklığı)- açık dosyadaki okuma/yazma işaretçisini ayarlar. İşaretçiyi mutlak veya göreli uzaklığa göre ayarlayabilirsiniz; mutlak uzaklık için işleve bir sayı iletmeniz gerekir;
pf_lseek(5000);
göreceli olarak işaretçinin değerini geçerli konuma iletin fs.fptr ve yer değiştirme miktarı
pf_lseek(fs.fptr + 3000);
Fonksiyonun çalışabilmesi için pffconf.h dosyasına yazmanız gerekmektedir.
#define_USE_LSEEK 1

Seçenekler:
DWORD uzaklığı- işaretçinin kaydırılması gereken bayt sayısı.

Dönüş değerleri:
FR_OK (0)- işlev başarılı olursa döndürülür
FR_DISK_ERR- disk hatası
FR_NOT_OPENED- dosya açılmadı

Bir dosyaya aşağıdaki gibi veri yazabilirsiniz.
FATFS fs;//FATFS BYTE buff türünde bir nesne bildirin;//WORD br dosyasını okumak için arabellek; //bayt sayacı okunur //diski bağlar if (pf_mount(&fs) == FR_OK) ( //kök dizinde bulunan dosyayı açar if(pf_open("hello.txt") == FR_OK) ( //set ilk sektörün işaretçisi pf_lseek(0); //write pf_write(buff, 10, &br); //kaydı sonlandırın pf_write(0, 0, &br) )

Ayrıca buraya yukarıda açıklanan tüm işlevleri kullanan, gerçekten çalışan bir kod parçası bırakıyorum.
#define F_CPU 8000000UL #define buff_size 10 #include #katmak #include "diskio.h" #include "pff.h" #include "spi.h" FATFS fs;//FATFS türünde bir nesne bildirin BYTE read_buff;//BYTE write_buff = "hello word" dosyasını okumak için tampon; /// /UINT dosyasına yazmak için arabellek br; //bayt sayacı read int main(void) ( //diski bağlayın if (pf_mount(&fs) == FR_OK) ( //yeni klasörde bulunan dosyayı açın if(pf_open("new/hello.txt") == FR_OK) ( //yazma işaretçisini ayarlayın pf_lseek(0); //write pf_write(write_buff, buff_size, &br); //yazmayı sonlandırın pf_write(0, 0, &br); //okuma işaretçisini ayarlayın pf_lseek( 0); //o zaman yazılanları okuyun pf_read(read_buff, buff_size, &br); if(br != buff_size) ( //eğer br buff_size'a eşit değilse //dosyanın sonuna ulaştığımız anlamına gelir) ) //diskin bağlantısını kesin pf_mount(NULL ) while(1) ( ) )

FRESULT pf_opendir(DIR* dp, const char * yol)- işlev mevcut bir dizini açar ve açık dizindeki dosyaların listesini elde etmek için kullanılacak DIR türündeki bir nesneye yönelik bir işaretçi oluşturur.
Fonksiyonun çalışabilmesi için pffconf.h dosyasına yazmanız gerekmektedir.
#define_USE_DIR 1

Seçenekler:
YÖN *dp- DIR türündeki bir değişkenin işaretçisi.

const karakter * yol- dizinin yolunu içeren bir dizenin işaretçisi, dizinler eğik çizgiyle ayrılır

Dönüş değerleri:
FR_OK (0)- işlev başarılı olursa döndürülür
FR_NO_PATH- yolu bulamadım
FR_NOT_READY- disk başlatılamadı
FR_DISK_ERR- disk hatası
FR_NOT_ENABLED- disk takılmamış

//değişkenleri tanımlıyoruz FATFS fs; DIR dizini; //diski bağlayın pf_mount(&fs); //pf_opendir(&dir, "MY_FOLDER"); dizinini açın

FRESULT pf_readdir(DIR* dp, FILINFO* fno)- işlevi bir dizinin içeriğini okumanıza olanak tanır. Bunu yapmak için pf_opendir() işlevini kullanarak dizini açmanız ve pf_readdir()'i çağırmanız gerekir. İşlev her çağrıldığında, belirtilen dizinde bulunan nesnenin (klasör/dosya) adını döndürür. Tüm nesneler arasında yineleme yaptığında fno.fname dizi öğesinde boş bir dize döndürür.
Fonksiyonun çalışabilmesi için pffconf.h dosyasına yazmanız gerekmektedir.
#define_USE_DIR 1

Seçenekler:
YÖN *dp- daha önce bildirilmesi gereken DIR tipindeki bir değişkenin işaretçisi

FILINFO *fno- daha önce bildirilmesi gereken FILINFO tipindeki bir değişkene işaretçi.

Dönüş değerleri:
FR_OK- fonksiyonun başarıyla tamamlanması
FR_DISK_ERR- disk hatası
FR_NOT_OPENED- dizin açık değil

FATFS fs; FRESULT res; FILINFO fno; DIR dizini; //diski bağlayın pf_mount(&fs); //dizini aç res = pf_opendir(&dir, MY_FOLDER); //dizinin içeriğini okuyun for(;;)( res = pf_readdir(&dir, &fno); //okuma sırasında herhangi bir hata olup olmadığını kontrol edin //ve belirtilen dizinde başka dosyalar olup olmadığını kontrol edin if ((res ! = FR_OK) || ( fno.fname == 0))( break; ) //uygun bir şekilde çıktı alın fno.fname usart_sendStr(fno.name);

Ve son olarak çalışma taslağını buraya bırakıyorum

  • Andreas'ın açıklaması şu şekilde:

    Belirli bir hafıza kartının işlevsel pinlerinin amacını biliyorsanız, Memory Stick adaptörünü kendi ellerinizle monte etmek zor değildir. Genellikle bir hafıza kartının pin çıkışı veya örneğin bir mikro devre, çip vb. olarak adlandırılır. Genel olarak teknoloji basittir. MMC (MultiMedia Card) hafıza kartının düzeni PCB'den kesilmiştir. Breadboard'da 7 parça kesilmiştir (MMC'nin 7 pimi vardır). Daha sonra, aşağıdaki şekilde gösterilen pin çıkışına uygun olarak, parçalar SD hafıza kartının (9 pinli, 2'si kullanılmayan), microSD'nin (8 pinli, 2'si kullanılmayan) pinlerine lehimlenir. kullanılır, ancak kartın microSD belleğinin Vcc çıkışı olmadığını) veya microM2'yi (ilgili Memory Stick Micro M2 Adaptörü başlığındaki microM2 pin çıkışı) unutmayın. Bu kadar. Memory Stick adaptörü hazır.

    Not: 1 ve 2 GB MMC hafıza kartlarımız stoklarımızda mevcuttur. Maliyet sırasıyla 285 ve 360 ​​ruble. Belirtilen fiyata teslimat dahildir.

    Ayrıca aşağıdaki boyutlardaki hafıza kartlarını da ucuza satın alabilirsiniz:
    - Memory Stick ve Memory Stick M2;
    - Güvenli Dijital (SD);
    -Mini SD;
    - Mikro SD (TF);
    - Kompakt flaş;
    -XD;
    - Çeşitli tasarım ve kapasitelerde USB Flash Sürücüler.
    Örneğin, bunlar:

  • slava diyor ki:

    Bu arada bu yazılarımda pek net değilim. Parçaları MicroCD'den MMC'ye bu sayfada alamazsınız, çok minnettar olacağım.

  • Andreas'ın açıklaması şu şekilde:

    MicroSD'den MMC'ye adaptör şu şekilde görünecektir:

  • slava diyor ki:
  • Sitede yeni

    >

    En popüler