বাড়ি নেটওয়ার্ক হার্ডওয়্যার একটি মাইক্রোকন্ট্রোলারের সাথে একটি SD কার্ড সংযোগ করা হচ্ছে। মনোলিথিক এসডি এবং মাইক্রোএসডি কার্ড এসডি কার্ড স্লট পিনআউট থেকে ডেটা পুনরুদ্ধার

একটি মাইক্রোকন্ট্রোলারের সাথে একটি SD কার্ড সংযোগ করা হচ্ছে। মনোলিথিক এসডি এবং মাইক্রোএসডি কার্ড এসডি কার্ড স্লট পিনআউট থেকে ডেটা পুনরুদ্ধার

আর্টেম মাকারভ ওরফে রবিন

27.09.2014

সম্প্রতি, একরঙা ভিত্তিতে তৈরি ফ্ল্যাশ ড্রাইভ, তথাকথিত মনোলিথ, ডেটা পুনরুদ্ধারের জন্য ক্রমবর্ধমানভাবে আনা হচ্ছে। আজ আমরা এই জাতীয় মনোলিথ থেকে ডেটা পুনরুদ্ধার করার প্রক্রিয়া সম্পর্কে কথা বলব - কেমেরোভো শহর থেকে একজন অংশীদার দ্বারা প্রেরিত একটি এসডি মেমরি কার্ড। বিবাহের ভিডিওটি কার্ডে রেকর্ড করা হয়েছিল, এবং যখন উদযাপনটি সফলভাবে সম্পন্ন হয়েছিল এবং উপহারের ডিভিডি সম্পাদনা এবং প্রকাশ করার সময় ছিল, ফ্ল্যাশ ড্রাইভটি দীর্ঘ সময়ের জন্য মারা গিয়েছিল।

একচেটিয়া SD মেমরি কার্ড পুনরুদ্ধার

এটি লক্ষণীয় যে বাইরে থেকে এটি একটি "ক্লাসিক" SD কার্ড, একটি PCB বোর্ড, NAND মেমরি এবং একটি কন্ট্রোলার, নাকি একটি একক ক্রিস্টাল সহ তা স্পষ্ট নয়৷ যতক্ষণ না প্লাস্টিকের কেস খোলা হয়। প্রায়শই, এই জাতীয় মেমরি কার্ডের ব্যর্থতা অনুবাদ টেবিলে ব্যর্থতার কারণে হয়। কম প্রায়ই - ইলেক্ট্রোমেকানিকাল ক্ষতি।

এই জাতীয় কার্ড থেকে ফাইলগুলি পুনরুদ্ধার করতে, আপনাকে প্রথমে যা করতে হবে তা হল ক্রিস্টাল থেকে ডাম্পগুলি পড়া। এটি করার জন্য, প্রতিরক্ষামূলক বার্নিশ যা মনোলিথের ট্র্যাক এবং যোগাযোগের প্যাডগুলিকে লুকিয়ে রাখে তা যান্ত্রিকভাবে সরানো হয় (পরিষ্কার এবং নাকাল)। এর পরে ফ্ল্যাশ ড্রাইভটি এইরকম দেখতে শুরু করে:

একটি মনোলিথিক SD কার্ডের ট্র্যাক এবং পিনআউট৷

যে কন্টাক্ট প্যাডের সাথে ডাটা বাস, চিপ এনাবল, রিড/রাইট বিজি, পাওয়ার ইত্যাদি কানেক্ট করা আছে সেগুলো দৃশ্যমান। অবশ্যই, কিছুই চিহ্নিত করা হয় না, এবং ডেটাশীটগুলি বিশদ বিবরণ দেয় যেখানে কী সংযোগ করতে হবে তাও অবাধে উপলব্ধ নয়। পিনআউটটি হয় ঠিক একই কাজের ফ্ল্যাশ ড্রাইভ গ্রহণ করে পাওয়া যেতে পারে (এবং সেগুলির অনেক প্রকার রয়েছে, এবং একই প্রচলিত কিংস্টন এসডি চেহারায় পাওয়া গেলে, আপনি ভিতরে একটি সম্পূর্ণ ভিন্ন ডিভাইস পেতে পারেন) এবং একটি সশস্ত্র যুক্তি বিশ্লেষক, পরিশ্রমের সাথে খুঁজে বের করুন কি কোথায় এবং কেন যায়। অথবা এমন একজন ব্যক্তি/অফিস থেকে পিনআউট কিনে যা ইতিমধ্যেই আপনার জন্য এই ধরনের কাজ করেছে।

ফলাফল এই মত কিছু:

অথবা এটা:

এখন আমাদের ফলস্বরূপ ডাম্পগুলিতে অভ্যন্তরীণ রূপান্তরগুলি দূর করতে হবে। প্রথম ধাপ হল XOR মাস্ক অপসারণ করা যা ফ্ল্যাশ ড্রাইভ কন্ট্রোলার NAND কোষে তথ্য লেখার সময় প্রয়োগ করে। এই মুখোশের সাথে সেক্টরটি এইরকম দেখায়:

এবং যখন প্রয়োজনীয় XOR মাস্ক নির্বাচন করা হয় এবং প্রয়োগ করা হয়, তখন সেক্টরটি একটি অর্থপূর্ণ চেহারা নেয়:

XOR রূপান্তরগুলি নির্মূল করার পরে, আপনাকে সঠিক সেক্টর জ্যামিতি সেট করতে হবে, চিহ্নিতকারী এবং ECC ডেটা সংশোধন এলাকা বর্ণনা করতে হবে। ECC অ্যালগরিদম ব্যবহার করে বিট ত্রুটি সংশোধন করুন। ব্লকগুলি কী ক্রমানুসারে অবস্থিত ছিল এবং তাদের আকার খুঁজে বের করুন। যেহেতু কন্ট্রোলারের ধরনটি অজানা (এটি একটি মনোলিথ!), এই নির্দিষ্ট ক্ষেত্রে কোন সংগ্রাহক ব্যবহার করবেন তা নির্ধারণ করা প্রয়োজন। এটি কি একটি সেক্টর মার্কার ব্যবহার করে বা অনুবাদ টেবিলের বাকি অংশ ব্যবহার করে চূড়ান্ত চিত্রটি একত্রিত করবে?

চিত্রটি একত্রিত হওয়ার পরে, প্রাসঙ্গিকতার জন্য একই মার্কার রয়েছে এমন দ্বন্দ্ব ব্লকগুলি পরীক্ষা করুন এবং চিত্রটিতে সেগুলি প্রতিস্থাপন করুন যার সাথে চূড়ান্ত ফলাফলটি সেরা হবে৷ একটি ফাইল সিস্টেমের সাথে একটি পরিচিত ইমেজ প্রাপ্ত করার পরে, আপনি এটি যেকোনো ডিস্ক সম্পাদকে খুলতে পারেন এবং ব্যবহারকারীর প্রয়োজনীয় ফাইলগুলি আপলোড করতে পারেন।

অবশ্যই, অনেকগুলি অপারেশন বেশ স্বয়ংক্রিয়, তবে তা সত্ত্বেও মনোলিথ (একক ক্রিস্টাল) থেকে ডেটা পুনরুদ্ধারের সাথে জড়িত কাজের পরিমাণ খুব বড়। তথ্য পুনরুদ্ধারকারী প্রত্যেক প্রকৌশলী বা কোম্পানি এই ধরনের কাজে জড়িত হতে আগ্রহী নয়। এবং এই ধরনের পুনরুদ্ধারের জন্য মূল্য ট্যাগ "বাজেট" ধারণা থেকে অনেক দূরে।

এসডি স্যান্ডিস্ক পুনরুদ্ধারের উদাহরণ ব্যবহার করে এখানে আরেকটি কেস রয়েছে - একই মনোলিথ, শুধুমাত্র ভিতরে একটু ভিন্নভাবে তৈরি করা হয়েছে:

পড়ার জন্য প্রস্তুত

মাইক্রোএসডি ফ্ল্যাশ ড্রাইভের পুনরুদ্ধার

এবং এখানে পরিচিতি প্যাডগুলি একটি মাইক্রো এসডি কার্ডে কেমন দেখায়। এটি এখনই উল্লেখ করা উচিত যে এগুলি অনেকগুলি লেআউট বিকল্পের কয়েকটি উদাহরণ।

এবং এখানে একটি মনোলিথিক মেমরি স্টিক প্রো ডুও মেমরি কার্ডের জন্য পিনআউট বিকল্প

এর মানে এই নয় যে এটি একটি মনোলিথ, তবে এটি একটি সাধারণ USB ফ্ল্যাশ ড্রাইভও নয়। মেমরি চিপ (ক্রিস্টাল) যৌগ (আঠা) দিয়ে ভরা হয়।

এবং এখানে একটি মনোলিথিক অলিম্পাস এক্সডি পিকচার কার্ড দেখতে কেমন, যেখান থেকে ফটোগ্রাফগুলি পুনরুদ্ধার করা প্রয়োজন ছিল:

ভাঙা মাইক্রো এসডি পুনরুদ্ধার করা হচ্ছে

আলাদাভাবে, মাইক্রোএসডি ফ্ল্যাশ ড্রাইভগুলি থেকে তথ্য পুনরুদ্ধার করার জন্য কাজগুলির সফল সমাপ্তির কথা উল্লেখ করা উচিত যা টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো, নীচের ছবিতে কিছু উদাহরণ:

সব ক্ষেত্রে, যখন আমরা একটি ফ্ল্যাশ ড্রাইভ সম্পর্কে কথা বলছি টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো অংশ সহ, ইত্যাদি NAND ক্রিস্টাল অক্ষত থাকলে তথ্য পুনরুদ্ধার করা সম্ভব। উদাহরণস্বরূপ, নীচের উদাহরণ থেকে স্যান্ডিস্ক মাইক্রোফ্ল্যাশ ড্রাইভে, অসাবধান অপারেশনের ফলস্বরূপ, একটি টুকরো ভেঙে গেছে এবং একটি লাল ডিম্বাকৃতি দ্বারা চিহ্নিত ট্র্যাকগুলি ক্ষতিগ্রস্ত হয়েছে।

হার্ডমাস্টার ল্যাবরেটরি হল এমন কয়েকটির মধ্যে একটি যাদের মনোলিথিক ইউএসবি, এসডি, মাইক্রোএসডি, মেমরি স্টিক ইত্যাদি থেকে ডেটা পুনরুদ্ধারের অভিজ্ঞতা এবং যোগ্যতা রয়েছে। মেমরি কার্ড। যদি আপনার একচেটিয়া ভাঙ্গা ফ্ল্যাশ ড্রাইভে গুরুত্বপূর্ণ ফাইল থাকে যা আপনি ফেরত দিতে চান, তাহলে আমাদের সাথে যোগাযোগ করুন!

কয়েক বছর আগে 2011 সালের মে মাসে, কাল্ট গেমের স্রষ্টা "এলিট" ডেভিড ব্রাবেন একটি একক-বোর্ড কম্পিউটার রাস্পবেরি পাইয়ের প্রথম ধারণাটি উপস্থাপন করেছিলেন। এই মুহূর্ত আমার জীবনের একটি টার্নিং পয়েন্ট হয়ে ওঠে. একটি কম্পিউটারকে একটি ফ্ল্যাশ ড্রাইভের আকার তৈরি করার ধারণাটি পৃষ্ঠে ছিল, তবে এটি কেবল রাস্পবেরি পাই ফাউন্ডেশনের সহায়তায় গতি পেয়েছে।

ইতিমধ্যেই 25 জুলাই, 2011-এ, কম্পিউটারের আলফা সংস্করণটি উত্পাদন করা হয়েছিল। দুর্ভাগ্যবশত, প্রকল্পের ধারণা পরিবর্তিত হয়েছে, এবং এটি এখন একটি ক্রেডিট কার্ডের আকারের কম্পিউটার হিসাবে অবস্থান করছে। এই পরিস্থিতি সত্ত্বেও, লক্ষ লক্ষ লোক তাকে অনুসরণ করেছিল। আমিও ভিড়ের প্রভাব মেনে চলেছি, প্রতিদিন অফিসিয়াল প্রজেক্ট পেজ চেক করছি। "অলৌকিক ঘটনা" এর জন্য একটি দীর্ঘ এবং বেদনাদায়ক অপেক্ষা শুরু হয়েছিল, যা ঘটেছিল 29 ফেব্রুয়ারী, 2012 - বিক্রয় শুরু হয়েছিল।

রাস্পবেরি পাই ফার্নেল নেটওয়ার্কের মাধ্যমে বা আরএস উপাদান থেকে কেনা যেতে পারে। যেহেতু এটি পরিণত হয়েছে, শুধুমাত্র 29শে ফেব্রুয়ারিতে প্রি-অর্ডার করা যেতে পারে। কোনো অফিসেই এসব বোর্ড স্টক ছিল না। ডিভাইসগুলির প্রথম ব্যাচটি ছিল মাত্র 10,000 কপি, তাই প্রকল্পের চারপাশে হাইপ দেওয়া, অর্ডার দেওয়া খুব কঠিন ছিল। যাইহোক, সমস্ত অসুবিধা কাটিয়ে, একই দিনে 14:06 এ কম্পিউটারটি ফার্নেল থেকে £46.73-এ কেনা হয়েছিল।

এতদিন আমার কোনো বিদেশি আদেশ পূরণ হয়নি। আমি অত্যন্ত বিরক্ত হয়েছিলাম যে ফার্নেল, ডেলিভারির জন্য 20 পাউন্ড চার্জ করে, 29 মে, 2012 (2 মাস পরে) একটি ট্র্যাকিং নম্বর ছাড়াই নিয়মিত মেইলে পার্সেলটি পাঠিয়েছিল৷ আশ্চর্যজনকভাবে, রয়্যাল এবং রাশিয়ান মেইলের সিম্বিওসিস 22 জুন পার্সেলটি নিরাপদে সরবরাহ করেছিল। গত কয়েক মাসে এটি ছিল সবচেয়ে কাঙ্ক্ষিত প্যাকেজ, তাই, চাপ সহ্য করতে না পেরে, আমাকে কাজ থেকে ছুটি নিয়ে পোস্ট অফিসে দৌড়াতে হয়েছিল।

প্রথম লঞ্চের জন্য রাস্পবেরি পাই কীভাবে কনফিগার করবেন সে সম্পর্কে কথা বলার কোনও অর্থ নেই। আমি এই বিষয়ে একটি নিবন্ধের জন্য কয়েক বছর দেরি করেছি; এই বিষয়ে অনেক লাইন ইতিমধ্যেই অন্যান্য সংস্থানগুলিতে লেখা হয়েছে এবং চলছে৷ ইউটিউবপর্যাপ্ত সংখ্যক ভিডিও পোস্ট করা হয়েছে। আমি আমার জন্য একটি উল্লেখযোগ্য নকশা ত্রুটি সম্পর্কে কথা বলতে চাই - SD কার্ড স্লটের অসুবিধাজনক অবস্থান। যখন কার্ডটি ঢোকানো হয়, এটি বোর্ডের বাইরে ব্যাপকভাবে প্রসারিত হয়, যা বাড়িতে তৈরি কেসের চেহারা নষ্ট করে।

এই সমস্যাটি সমাধানের জন্য দুটি বিকল্প রয়েছে: রাস্পবেরি পাইতে ইনস্টল করা সংযোগকারীর সমান্তরালে একটি SD->মাইক্রোএসডি অ্যাডাপ্টার সোল্ডার করুন (আপনি Habré-এর নিবন্ধে এই অপারেশনটি কীভাবে করবেন তা পড়তে পারেন), অথবা একটি লো-প্রোফাইল মাইক্রোএসডি-> ব্যবহার করুন এসডি অ্যাডাপ্টার। প্রথম বিকল্পটি আমার জন্য কেবল অগ্রহণযোগ্য - ভাল, আমি বোর্ডটি সোল্ডার করার সাহস করি না, কারণ ... আমি আমার রাস্পবেরির উপস্থাপনা নষ্ট করার ভয় পাচ্ছি। আমি মনে করি সর্বোত্তম পছন্দ হল একটি লো-প্রোফাইল অ্যাডাপ্টার ব্যবহার করা।

প্রাথমিকভাবে, বিদেশী অনলাইন স্টোরগুলির একটিতে এই জাতীয় অ্যাডাপ্টার কেনার সিদ্ধান্ত নেওয়া হয়েছিল। একটি পছন্দ আছে, কিন্তু এই ধরনের ট্রিঙ্কেটের খরচ কেবল নিষিদ্ধ। সবচেয়ে সস্তা কপির দাম $10, এবং কিছু নমুনা স্পষ্টভাবে ঘরে তৈরি দেখায়। অ্যাডাপ্টার তৈরি করার চূড়ান্ত সিদ্ধান্তটি DIYGadget ওয়েবসাইট দেখার পরে নেওয়া হয়েছিল তাদের তৈরি করা কতটা সহজ।

প্রস্তুত? শব্দ থেকে কর্মে সরানো যাক। অ্যাডাপ্টারটি সঠিকভাবে তৈরি করতে, আসুন এসডি এবং মাইক্রোএসডি কার্ডের বৈশিষ্ট্যগুলি অধ্যয়ন করি। আমি সারণি 1, 2 এ উত্পাদনের জন্য প্রয়োজনীয় সমস্ত কিছু পদ্ধতিগত করার চেষ্টা করেছি।

টেবিল ২: SD মেমরি কার্ড পিনআউট

মেমরি কার্ডগুলিতে সংশ্লিষ্ট পরিচিতিগুলিকে সংযুক্ত করে, এবং Vss1, Vss2 একত্রিত করে, আমরা অ্যাডাপ্টারের বৈদ্যুতিক সার্কিট চিত্রটি পাই।

একটি অ্যাডাপ্টার তৈরি করতে আমাদের প্রয়োজন:
1) মাইক্রোএসডির জন্য হোল্ডার (CF TFC-WPCE-08 মাইক্রোএসডি কার্ড) – 52.22 ঘষা।
2) প্রায় 4 সেমি 2 এর ক্ষেত্রফল সহ দ্বি-পার্শ্বযুক্ত ফয়েল ফাইবারগ্লাস ল্যামিনেটের একটি টুকরো (ফয়েল গ্লাস টেক্সট লাইটের অবস্থানের 2%। 1.5 মিমি 2 সাইড) – 3 রুবেল।
3) ইনস্টলেশনের জন্য উপকরণ (ফেরিক ক্লোরাইড, টিন, ফ্লাক্স) - 10 রুবেল।

তারপর প্রকল্পের খরচ হবে 65 রুবেল 22 kopecks এবং একটি নির্দিষ্ট পরিমাণ বিনামূল্যে সময়। ডিজাইনের খরচ কমানোর জন্য, আপনি একটি CF TFC-WPCER-08 MICROSD কার্ড দিয়ে মাইক্রোএসডি কার্ড ধারক প্রতিস্থাপন করতে পারেন। দুর্ভাগ্যবশত, এই আইটেমটি Promelectronika JSC গুদামে উপলব্ধ ছিল না, তাই আমি আরও ব্যয়বহুল বিকল্প কিনেছি। আমি আপনার দৃষ্টি আকর্ষণ করছি যে আপনি যদি হোল্ডারের ধরন পরিবর্তন করেন তবে আপনি LUT (লেজার আয়রনিং প্রযুক্তি) এর জন্য আমার টেমপ্লেট ব্যবহার করতে পারবেন না।

আমি PCB ডিজাইন করতে অটোক্যাড ব্যবহার করেছি কারণ... আমার প্রিয় SprintLayout প্রয়োজনীয় টেমপ্লেটের উপস্থিতিতে আমাকে খুশি করতে পারেনি। যারা প্রিন্টেড সার্কিট বোর্ড পরিবর্তন করতে চান তাদের জন্য, আপনি DWG ফরম্যাটে উৎস ডাউনলোড করতে পারেন, এবং যদি এমন কোন প্রয়োজন না থাকে, তাহলে পিডিএফ ফরম্যাটে একটি ফাঁকা (আমি পিডিএফ টেমপ্লেট প্রয়োগ করার আগে মাত্রা পরীক্ষা করার পরামর্শ দিচ্ছি)।

টেমপ্লেটটি বোর্ডে স্থানান্তরিত হওয়ার পরে, আমি এক স্তর থেকে অন্য স্তরে স্থানান্তর করার জন্য 0.5 মিমি ব্যাস সহ গর্ত ড্রিলিং করার পরামর্শ দিই।

আমি ভবিষ্যতের অ্যাডাপ্টারের ট্র্যাকগুলি পূর্বে বিকিরণ করে একটি পাতলা তার ব্যবহার করে স্তর থেকে স্তরে রূপান্তর করি। মাইক্রোএসডি হোল্ডারের নীচে যেখানে গর্তগুলি অবস্থিত সেখানে ফাইলের সাহায্যে টিনের ফোঁটাগুলি পিষে নেওয়া প্রয়োজন যাতে এটি বিকৃতি ছাড়াই ইনস্টল করা হয়। অবশেষে, আমরা হোল্ডার ইনস্টল করি। যদি বোর্ডের উত্পাদন প্রক্রিয়ার সময় বিভিন্ন ফ্লাক্স ব্যবহার করা হয়, তাহলে আপনার রাস্পবেরি পাইতে ঠেলে দেওয়ার আগে বোর্ডটি ধুয়ে ফেলতে ভুলবেন না।

নিজে একটি অ্যাডাপ্টার তৈরি করুন বা এটি কিনুন - পছন্দটি আপনার। আপনার পছন্দকে আরও অবগত করার জন্য, আমি বিশেষ করে আপনার জন্য কেনার জন্য বেশ কয়েকটি লিঙ্ক নির্বাচন করেছি:
1) রাস্পবেরি পাই প্রিমিয়াম লো-প্রোফাইল মাইক্রোএসডি (TF) থেকে SD কার্ড অ্যাডাপ্টার৷ বোর্ড রক্ষা করুন।
2) রাস্পবেরি পাই লো-প্রোফাইল মাইক্রোএসডি থেকে এসডি কার্ড অ্যাডাপ্টার, এসডি কার্ড ক্ষতিগ্রস্ত হবে না!!
3) মাইক্রোএসডি থেকে "শর্ট" SD/RS-MMC অ্যাডাপ্টার। এভারড্রাইভ কার্ট, রাস্পবেরি পাই, ইত্যাদির জন্য
4) রাস্পবেরি পাই এর জন্য নিম্ন-প্রোফাইল মাইক্রোএসডি থেকে এসডি কার্ড অ্যাডাপ্টার।
5) রাস্পবেরি পাই REV2 + বিনামূল্যে শিপিংয়ের জন্য SD কার্ড অ্যাডাপ্টার৷

উপসংহারে, আমি বলতে চাই যে সমস্ত উপাদান শুধুমাত্র তথ্যের উদ্দেশ্যে তৈরি করা হয়েছে। বাণিজ্যিক উদ্দেশ্যে উন্নয়নের ব্যবহার কঠোরভাবে নিষিদ্ধ. উপকরণের পুনরুৎপাদন শুধুমাত্র আমার অনুমতি নিয়ে এবং মূল উৎসের রেফারেন্সের সাথে সম্মতিতে সম্ভব। যারা শুধু কথায় নয়, কাজেও সমর্থন করতে চান এবং আমাকে ধন্যবাদও দিতে চান, দয়া করে আমাকে ইমেল করুন।

ডিভাইসটি নিজে একত্রিত করতে, আপনাকে নিম্নলিখিত ফাইলগুলি ডাউনলোড করতে হবে:
1. DWG ফরম্যাটে LUT-এর জন্য সোর্স বোর্ড
2. পিডিএফ ফরম্যাটে LUT-এর জন্য অর্থপ্রদান

আপনার চেস্টার জন্য সৌভাগ্য কামনা করছি!!!

পাঠ 33

অংশ 1

এসপিআই। এসডি কার্ড. ফ্যাট

আজ আমরা SPI ইন্টারফেসে আমাদের প্রিয় বিষয় চালিয়ে যাব। আমরা এই বাসটি দিয়ে শেষ করেছি Atmega8a এবং ATTtiny2313 কন্ট্রোলারকে একে অপরের সাথে সংযুক্ত করে। এবং আজ আমরা এই ইন্টারফেসটি ব্যবহার করে এই বাসের মাধ্যমে মাইক্রোকন্ট্রোলারের সাথে একটি মেমরি কার্ড সংযোগ করার চেষ্টা করব এসডি (সিকিউর ডিজিটাল).

এই কার্ডটি SDIO ইন্টারফেসের মাধ্যমেও সংযুক্ত করা যেতে পারে, কিন্তু যেহেতু এই ধরনের একটি ইন্টারফেস আমাদের কন্ট্রোলার দ্বারা হার্ডওয়্যারে সমর্থিত নয়, তাই আমরা এই পাঠে এটি স্পর্শ করব না। আমরা বাস সংযোগের ধরণ সম্পর্কে আগ্রহী এসপিআই, যেহেতু আমরা ইতিমধ্যেই এই বিষয়ে ভাল সঞ্চিত জ্ঞান, সেইসাথে আমরা যে কন্ট্রোলারে প্রোগ্রামিং করছি তাতে হার্ডওয়্যার সমর্থন রয়েছে।

তবুও, আমরা উভয় প্রকারের জন্য কার্ড পায়ের পিনআউটটি দেখব

ঠিক আছে, যেহেতু আমরা দ্বিতীয় প্রকারে আগ্রহী, তাই আমরা এটি মোকাবেলা করব।

এবং এখানে বোঝার মতো অনেক কিছু নেই। আমরা এই সব সংক্ষিপ্তকরণ জানি. সমস্ত স্ট্যান্ডার্ড SPI ইন্টারফেস পিন এখানে রয়েছে এবং এখানে অতিরিক্ত কিছু নেই।

এখন সাধারণভাবে মানচিত্র সম্পর্কে। এই কার্ডটি আমাদের ডেটা সঞ্চয় করার অনুমতি দেয় ফ্ল্যাশ, যা, EEPROM টাইপ মেমরির তুলনায়, এটিও অ-অস্থির, অর্থাৎ, যখন পাওয়ার বন্ধ করা হয়, তখন ডেটা কোথাও অদৃশ্য হয়ে যায় না, তবে সঞ্চিত থাকে। এছাড়াও, এই মেমরি পার্থক্য আছে, আমরা প্রোগ্রামিং প্রক্রিয়ার সময় তাদের জানতে হবে. প্রধান পার্থক্যগুলির মধ্যে একটি হল, EEPROM মেমরির মতো, আমরা এই মেমরিতে একটি বাইট লিখতে পারি না। তাত্ত্বিকভাবে, অবশ্যই আমরা পারি, তবে হয় শুধুমাত্র আমাদের বাইট থেকে বা শুধুমাত্র শূন্য লেখা হবে, FLASH- NOR বা NAND-এর প্রকারের উপর নির্ভর করে। অর্থাৎ, একটি বাইট লেখার আগে, আপনাকে এটি মুছে ফেলতে হবে এবং এই মেমরির সংগঠনের কারণে, আমরা কেবল ব্লকগুলিতেই মুছতে পারি, তাই আমরা কেবল ব্লকগুলিতেই লিখতে পারি। কিন্তু EEPROM থেকে সবচেয়ে বড় পার্থক্য হল দাম। এটি অনেকগুণ সস্তা, কখনও কখনও তথ্যের একটি সঞ্চিত একক (প্রতি মেগাবাইট, প্রতি গিগাবাইট) এর জন্যও অনেক কম দামের অর্ডার। অতএব, ফ্ল্যাশ মেমরিতে সাধারণত অনেক বেশি তথ্য থাকে।

4 ধরনের এসডি আছে, কিন্তু আমরা একটু পরে এটি অধ্যয়ন করব।

প্রোটিয়াসে থাকাকালীন এই কার্ডটি সংযুক্ত করি

এখানে সবকিছু সহজ. আসলে ঠিক মত না. আরো প্রতিরোধক প্রয়োজন

কার্ডটি 3.3 ভোল্ট দ্বারা চালিত হওয়ার কারণে উপযুক্ত মাত্রা নিশ্চিত করার জন্য এই প্রতিরোধকগুলির প্রয়োজন। সাধারণভাবে, প্রযুক্তিগত ডকুমেন্টেশন অনুযায়ী, 2.7 থেকে 3.6 ভোল্ট পর্যন্ত।

এছাড়াও, এটি প্রোটিয়াসে নির্দেশিত নয়, তবে প্রকৃতপক্ষে আমরা একটি মাইক্রোসার্কিট ইনস্টল করে আমাদের কার্ডকে একটি পৃথক পাওয়ার সাপ্লাই থেকে পাওয়ার করব যা 5 ভোল্টকে 3.3 ভোল্টে রূপান্তর করে।

অথবা বরং, আমরা কিছু ইনস্টল করব না, তবে একটি প্রস্তুত মডিউল ব্যবহার করব যেখানে সবকিছু ইতিমধ্যে ইনস্টল করা আছে।

ডিসপ্লে লাইব্রেরির কার্যকারিতা প্রসারিত করার মতো আমাদের কাছে একটি ডিসপ্লে সংযুক্ত রয়েছে।

ব্যবহারিক পরিপ্রেক্ষিতে এটি এইভাবে দেখায়:

ধারক সহ মডিউলটি দেখতে এইরকম

আপনি সর্বত্র যেমন একটি মডিউল খুঁজে পেতে পারেন, এটি একটি পয়সা খরচ। যে মডিউলটি SDIO এর মাধ্যমে সংযোগ করে তার দাম বেশি। আমরা আরও দেখতে পাচ্ছি যে মডিউলটিতে ইতিমধ্যেই ভোল্টেজকে 3.3 ভোল্টে কমাতে একটি মাইক্রোসার্কিট ইনস্টল করা আছে। এবং আমরা শুধুমাত্র 5 ভোল্টের যোগাযোগের সাথে পাওয়ার সংযোগ করি এবং 3.3 এর সাথে কিছু সংযোগ করি না

এছাড়াও, সমস্ত স্তরের বিভাজকগুলি মডিউলে ইনস্টল করা আছে, অর্থাৎ, এই মডিউলটি বিশেষভাবে 5-ভোল্ট ডিভাইসের সাথে সংযোগের জন্য ডিজাইন করা হয়েছে।

এবং আমি 32 মেগাবাইট সহ পরীক্ষার জন্য একটি ফ্ল্যাশ কার্ড খনন করেছি, ঠিক একটি মেগাবাইট এবং একটি গিগাবাইট নয়

এই ফ্ল্যাশ কার্ডটি কিছু ক্যামেরা সহ একটি উপহার হিসাবে দেওয়া হয়েছিল এবং এটি আমাদের পরীক্ষার জন্য সবচেয়ে উপযুক্ত, অন্তত আমরা মনে করব না যে কার্ডে অত্যধিক মেমরির কারণে এটি বা সেই ত্রুটি হয়েছে।

সম্পূর্ণ কোডটি ডিসপ্লে লাইব্রেরির সাথে শেষ পাঠ থেকেও নেওয়া হয়েছিল, যেহেতু আমরা শেষ পাঠে তৈরি করা ফাংশনটি খুব সক্রিয়ভাবে ব্যবহার করব, তবে অবশ্যই একটি নতুন প্রকল্প তৈরি করা হয়েছিল এবং সেই অনুসারে নামকরণ করা হয়েছিল। MYSD_SPI.

চলুন অপ্রয়োজনীয় লাইন মুছে ফেলি, main() তে আমাদের এটিই থাকবে

intপ্রধান( অকার্যকর)

স্বাক্ষরবিহীনinti;

পোর্ট_ইনি();

LCD_ini(); // প্রদর্শন শুরু করুন

Clearlcd(); // প্রদর্শন সাফ করুন

সেটপোস(0,0);

Str_lcd( "স্ট্রিং 1");

সেটপোস(2,1);

Str_lcd( "স্ট্রিং 2");

সেটপোস(4,2);

Str_lcd( "স্ট্রিং 3");

সেটপোস(6,3);

Str_lcd( "স্ট্রিং 4");

বিলম্ব_এমএস(2000);

// এর জন্য (i=0;i<=22;i++) {str80_lcd(buffer2+i*20);_delay_ms(1000);}

যখন(1)

যেহেতু আমরা অক্ষর অনুসারে টেক্সট অক্ষর আউটপুট করব না, আমরা ভেরিয়েবলে char টাইপ ব্যবহার করতে পারি

স্বাক্ষরবিহীনচর i;

এখন আরো একটি nuance.

আমাদের প্রোটিয়াসে একটি SD কার্ডের সাথে কাজ করার জন্য, কার্ডের সাথে ধারককে যুক্ত করা আমাদের পক্ষে যথেষ্ট নয়, আমাদের ফ্ল্যাশ কার্ডের চিত্র ফাইলটি এর বৈশিষ্ট্যগুলিতে সংযুক্ত করতে হবে।

এটি একটি তৈরি করা কঠিন নয়. একটি উপায় হল WinImage প্রোগ্রাম ব্যবহার করে তৈরি করা।

আমরা মেনু আইটেম ফাইল -> নতুন ব্যবহার করে এটিতে একটি নতুন ফাইল তৈরি করি। ডায়ালগে একেবারে শেষ আইটেমটি নির্বাচন করুন এবং "ঠিক আছে" ক্লিক করুন

প্রোটিয়াসে পরীক্ষার জন্য, আমাদের জন্য 4 মেগাবাইটের আকার যথেষ্ট, তাই পরবর্তী ডায়ালগে আমরা সেক্টরের সংখ্যা সহ ক্ষেত্রটি পরিবর্তন করব এবং FAT12/16 বিন্যাসটিও নির্বাচন করব, কারণ 32-এর সাথে কাজ করার সুনির্দিষ্ট বৈশিষ্ট্য। বিট ফাইল সিস্টেম সামান্য ভিন্ন, এবং আমরা "ঠিক আছে" ক্লিক করব

সাধারণভাবে, অবশ্যই, আমরা FAT32 ছেড়ে যেতে পারি, যেহেতু আমরা এখনও ফাইল সিস্টেমের সাথে কাজ করি না, তবে পাঠের আরও অংশগুলিতে আমরা ফাইল সিস্টেমের সাথে কাজ করব এবং আমরা 12/16 এর সাথে কাজ করব।

তারপর আমরা ফাইল -> সেভ অ্যাজ মেনু আইটেম ব্যবহার করে আমাদের তৈরি করা ফাইলটি সংরক্ষণ করি। এবং আমরা এটিকে ফোল্ডারে সংরক্ষণ করি যেখানে আমাদের সংরক্ষিত প্রোটিয়াস প্রকল্প রয়েছে। ফাইলটির নাম দিন এবং "সংরক্ষণ করুন" এ ক্লিক করুন

এছাড়াও, তারপরে আমাদের নিশ্চিত করতে হবে যে এই ফাইলটি "শুধু-পঠন" বৈশিষ্ট্যের সাথে নয় এবং এর পরে আমরা এটিকে প্রোটিয়াসে সংযুক্ত করতে সক্ষম হব। আপনাকে ম্যানুয়ালি ফাইলের নাম লিখতে হবে, যেহেতু প্রোটিয়াসের নিজস্ব ফর্ম্যাটের কিছু প্রয়োজন এবং আমাদের ফাইলটি কেবল দৃশ্যমান হবে না

আমাদের কোন পথের প্রয়োজন নেই, যেহেতু ফাইলটি প্রকল্প ফোল্ডারে অবস্থিত। "ঠিক আছে" ক্লিক করুন।

আমাদের বাস শুরু করার দরকার নেই, যেহেতু আমাদের SPI হবে সফটওয়্যার-ভিত্তিক; হার্ডওয়্যার অবশ্যই ভাল, তবে প্রোটোকল কীভাবে কাজ করে তা পুঙ্খানুপুঙ্খভাবে বোঝার জন্য, আপনাকে সফ্টওয়্যারটির সাথেও কাজ করতে হবে, অর্থাৎ, পোর্টগুলির পা মুচড়ে দিতে হবে। সাধারণভাবে, ডায়াগ্রামটি দেখলে মনে হতে পারে যে আমাদের হার্ডওয়্যারে সবকিছু আছে, যেহেতু আমি ঠিক এই পাগুলি বেছে নিয়েছি, কারণ আমি ঠিক এইভাবে বেছে নিয়েছি, যাতে পরে, কেউ হয়তো হার্ডওয়্যার বাস্তবায়নের টায়ারগুলির সাথে কাজ করার চেষ্টা করবে। .

পোর্ট পায়ের জন্য ম্যাক্রো প্রতিস্থাপন যোগ করা যাক

#অন্তর্ভুক্ত"main.h"

#সংজ্ঞায়িত করুনMOSI3

#সংজ্ঞায়িত করুনMISO4

#সংজ্ঞায়িত করুনSCK5

#সংজ্ঞায়িত করুনএসএস2

পোর্ট ইনিশিয়ালাইজেশন ফাংশনে পা শুরু করার জন্য কোড যোগ করা যাক

অকার্যকরport_ini( অকার্যকর)

PORTD=0x00;

ডিডিআরডি=0xFF;

PORTB|=(1<< এসএস)|(1<< MISO)|(1<< MOSI);

ডিডিআরবি|=(1<< এসএস)|(1<< MOSI)|(1<< SCK);

আমরা MISO পিনটি ইনপুটে রেখে দিই, যেহেতু ডিফল্টরূপে রেজিস্টারের সমস্ত বিট শূন্য, এবং আমরা কেবল এটি স্পর্শ করি না। এছাড়াও আমরা অবিলম্বে MOSI এবং SS-এ উচ্চ স্তর চালু করি এবং MISO-তে একটি প্রতিরোধক টেনে আনি।

এসপিআই বাসে একটি বাইট স্থানান্তরের জন্য একটি ফাংশন লিখি

অকার্যকরSPI_SendByte( স্বাক্ষরবিহীনচরবাইট)

{

}

এর লুপ এবং লুপ নিজেই জন্য একটি পরিবর্তনশীল যোগ করা যাক

অকার্যকরSPI_SendByte( স্বাক্ষরবিহীনচরবাইট)

স্বাক্ষরবিহীনচরi;

জন্য( i=0; i<8; i++) //বাইটের বিট দ্বারা সরান

{

}

আমি মনে করি কেন আমরা 8 গণনা করি তা পরিষ্কার, যেহেতু আমরা ঠিক 8 বিট প্রেরণ করছি।

ঠিক আছে, আসুন ধীরে ধীরে সেগুলি প্রেরণ করা শুরু করি।

আসুন প্রথমে বামদিকের বিটটি পরীক্ষা করি, এটিকে মাস্ক করে সম্পূর্ণ বাইট থেকে বিচ্ছিন্ন করে, এবং যদি এটি 1 এর সমান হয়, তবে আমরা এটি MOSI বাসে 1 এ সেট করব, এবং যদি এটি 0 হয়, তাহলে আমরা বাসটিকে স্পর্শ করব না।

জন্য( i=0; i<8; i++) //বাইটের বিট দ্বারা সরান

আমরা একটি SD কার্ড থেকে ডিসপ্লেতে চিত্রটি প্রদর্শন করেছি, তবে এতে কিছু পয়েন্ট মিস করা হয়েছিল, প্রথমটি কার্ডটি নিজেই সংযুক্ত করছিল, দ্বিতীয়টি হল লাইব্রেরির ফাংশনগুলির শুধুমাত্র একটি অংশ বিবেচনা করা হয়েছিল পেটিট ফ্যাটএফ, আসুন আরো বিস্তারিতভাবে এই পয়েন্ট তাকান.

কার্ডের সাথে যোগাযোগ দুটি ইন্টারফেসের একটির মাধ্যমে সম্ভব, এসপিআইবা এসডি.



এটা অবশ্যই বলা উচিত যে SD ইন্টারফেস এক-বিট এবং চার-বিট মোডে কাজ করতে পারে।

SPI এর মাধ্যমে কার্ড সংযোগের চিত্রটি মানক এবং এটির মতো দেখতে একটি 10K প্রতিরোধক ব্যবহার করে অব্যবহৃত কার্ড পিনগুলিকে পাওয়ার সাপ্লাইয়ের সাথে সংযুক্ত করতে হবে।


কিন্তু অপেশাদার ডিজাইনে, পুল-আপ প্রতিরোধকগুলি প্রায়শই উপেক্ষিত হয়, যা সংযোগ চিত্রটিকে সরল করে।

এটি উল্লেখ করা উচিত যে SPI এর মাধ্যমে সংযুক্ত হলে, কার্ডটি সরবরাহের ভোল্টেজের উপর খুব চাহিদা করে এবং সরবরাহ ভোল্টেজের সামান্য হ্রাস কার্ডটি কাজ না করার দিকে পরিচালিত করে, এটি ব্যক্তিগত অভিজ্ঞতা থেকে পরীক্ষা করা হয়েছে, SD সম্পর্কে বলার কিছু নেই ইন্টারফেস, আমি এখনও এটি চেষ্টা করেনি। আমি এই সব বোঝাতে লিখলাম পাওয়ার সাপ্লাইয়ের জন্য, ক্যাপাসিটার ইনস্টল করতে ভুলবেন না. ইন্ডাক্টর হিসাবে, এটি 100mA পর্যন্ত কারেন্টের জন্য ডিজাইন করা উচিত, তবে এটি ইনস্টল করার প্রয়োজন নেই।

উপরে দেখানো চিত্রগুলি দেখায় যে কার্ডটি পরিচালনা করার জন্য 3.3 ভোল্টের প্রয়োজন; সেই অনুযায়ী, ডেটা ট্রান্সমিশন লাইনগুলিতে ভোল্টেজ 0 - 3.3 ভোল্টের সীমার বাইরে যাওয়া উচিত নয় এবং এখানে প্রশ্ন ওঠে, এমকে দ্বারা চালিত হলে কী করবেন? 5 ভোল্ট?
উত্তরটি সহজ, আপনাকে ডেটা লাইনের সাথে মিলতে হবে এবং এটি একটি প্রচলিত প্রতিরোধী বিভাজক ব্যবহার করে করা যেতে পারে।


চিত্রটি দেখায় যে MISO লাইনটিকে একইভাবে সমন্বিত করার প্রয়োজন নেই যেভাবে এই লাইনের মাধ্যমে ডেটা প্রেরণ করা হয় কার্ড থেকে MK.
প্রকৃতপক্ষে, খুব কম লোকই কার্ডটিকে এমকে-তে সরাসরি সংযুক্ত করে; কার্ড সংযোগকারীকে এমকে-তে সংযুক্ত করা বা একটি সংযোগকারী এবং সমস্ত প্রয়োজনীয় তারের সাথে একটি ঢাল কেনা অনেক বেশি সুবিধাজনক।

আমরা সংযোগটি সাজিয়েছি, এখন লাইব্রেরিটি কীভাবে ব্যবহার করবেন তা দেখা যাক পেটিট ফ্যাটএফ, যা ছোট মেমরি আকার সহ 8-বিট মাইক্রোকন্ট্রোলারের জন্য ডিজাইন করা হয়েছে।

লাইব্রেরিতে 5টি ফাইল রয়েছে:
integer.h- একটি হেডার ফাইল যা প্রধান ডেটা প্রকার বর্ণনা করে।

diskio.h- একটি হেডার ফাইল যেখানে ডিস্কের সাথে কাজ করার জন্য নিম্ন-স্তরের ফাংশনগুলির প্রোটোটাইপ এবং তারা যে স্ট্যাটাস কোডগুলি ফেরত দেয় তা ঘোষণা করা হয়।

diskio.c- নিম্ন-স্তরের ফাংশনগুলি অবশ্যই এই ফাইলটিতে প্রয়োগ করা উচিত;

pffсonf.h- কনফিগারেশন ফাইল.

pff.h- একটি হেডার ফাইল যেখানে ডিস্ক ফাইল সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য ফাংশনের প্রোটোটাইপ ঘোষণা করা হয়।

pff.c- ফাইলটিতে ডিস্ক ফাইল সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য ফাংশনগুলির বাস্তবায়ন রয়েছে।

এটি দেখা যায় যে গ্রন্থাগারটি কাজ করার জন্য, নিম্ন-স্তরের ফাংশনগুলি বাস্তবায়ন করা প্রয়োজন। কিন্তু যদি আমরা AVR বা PIC সম্পর্কে কথা বলি, তাদের জন্য ওয়েবসাইটে আপনি লাইব্রেরির সাথে কাজ করার একটি উদাহরণ ডাউনলোড করতে পারেন, যাতে ফাইলটি রয়েছে mmc, এটি ইতিমধ্যে নিম্ন-স্তরের ফাংশন প্রয়োগ করে। এছাড়াও আপনাকে pff.h ফাইলে লাইব্রেরি কনফিগার করতে হবে এবং SPI অপারেশনের জন্য প্রয়োজনীয় ফাংশন লিখতে হবে।

Petit FatF-এর কার্যাবলী।

FRESULT pf_mount (FATFS*)- ফাংশনটি ডিস্ককে মাউন্ট/আনমাউন্ট করে। ডিস্কের সাথে কাজ করার আগে এই ফাংশনটি অবশ্যই কল করা উচিত; যে কোনো সময় ফাংশন কল করা যেতে পারে.

অপশন
FATFS* fs- FATFS ধরনের একটি বস্তুর একটি পয়েন্টার এই কাঠামোর একটি বিবরণ pff.h ফাইলে পাওয়া যাবে। আমরা শুধু এই ধরনের একটি পরিবর্তনশীল ঘোষণা করতে হবে.

রিটার্ন মান:
FR_OK (0)
FR_NOT_READY- ডিভাইসটি আরম্ভ করা যাবে না
FR_DISK_ERR- ডিস্ক থেকে পড়ার সময় একটি ত্রুটি ঘটেছে
FR_NO_FILESYSTEM- ডিস্কের একটি বৈধ FAT পার্টিশন নেই

FATFS fs;// FATFS ধরণের একটি বস্তু ঘোষণা করুন // ডিস্ক মাউন্ট করুন যদি (pf_mount(&fs) == FR_OK) ( //ডিস্কটি মাউন্ট করা হয়, আমরা এটির সাথে কাজ করি //ডিস্কটি আনমাউন্ট করি pf_mount(NULL); ) অন্যথায় (//ডিস্ক মাউন্ট করতে ব্যর্থ)

FRESULT pf_open (const char* পথ)- ফাংশন একটি বিদ্যমান ফাইল খোলে। একবার ফাইলটি ওপেন হয়ে গেলে, আপনি এটির সাথে কাজ করতে পারেন, অর্থাৎ এটি থেকে পড়ুন এবং এটিতে লিখুন। অন্য ফাইল খোলা না হওয়া পর্যন্ত আপনি একটি খোলা ফাইলের সাথে কাজ করতে পারেন। যে কোনো সময় ফাংশন কল করা যেতে পারে.

অপশন
const char* পথ- ফাইলের পথ নির্দেশ করে এমন একটি স্ট্রিংয়ের প্রতি নির্দেশক। রুট ডিরেক্টরির সাপেক্ষে পাথটি অবশ্যই নির্দিষ্ট করতে হবে, একটি স্ল্যাশ দিয়ে ডিরেক্টরিগুলিকে আলাদা করে।

রিটার্ন মান:
FR_OK (0)- যদি ফাংশনটি সফলভাবে সম্পাদিত হয় তবে ফিরে আসে
FR_NO_FILE- ফাইল পাওয়া যায়নি
FR_DISK_ERR- ডিস্ক ত্রুটি
FR_NOT_ENABLED- ডিস্কটি মাউন্ট করা হয়নি

FATFS fs;// FATFS ধরনের একটি বস্তু ঘোষণা করুন // ডিস্ক মাউন্ট করুন যদি (pf_mount(&fs) == FR_OK) ( // রুট ডিরেক্টরিতে অবস্থিত ফাইলটি খুলুন if(pf_open("hello.txt") == FR_OK ) ( //কিছু কিছু করুন ) // ফোল্ডারে থাকা ফাইলটি খুলুন new if(pf_open("new/hello.txt") == FR_OK) ( //কিছু কিছু করুন ) // ডিস্কটি নামিয়ে দিন pf_mount(NULL) অন্য ( //) ডিস্ক মাউন্ট করতে ব্যর্থ হয়েছে)

FRESULT pf_read(void* buff, WORD btr, WORD* br)- ফাংশনটি ফাইল থেকে নির্দিষ্ট সংখ্যক বাইট পড়ে এবং একটি বাফারে সংরক্ষণ করে। যদি পঠিত বাইটের সংখ্যা নির্দেশিত থেকে কম হয়, তাহলে ফাইলের শেষ পর্যন্ত পৌঁছে গেছে।
#সংজ্ঞায়িত_ব্যবহার_পড়ুন 1

বিকল্প:
void* buff- বাফারে পয়েন্টার যেখানে পঠিত ডেটা সংরক্ষণ করা হয়
শব্দ btr- পড়তে হবে বাইট সংখ্যা
শব্দ*ব্র- একটি ভেরিয়েবলের পয়েন্টার যা পঠিত বাইটের সংখ্যা সংরক্ষণ করে।

রিটার্ন মান:
FR_OK (0)- যদি ফাংশনটি সফলভাবে সম্পাদিত হয় তবে ফিরে আসে
FR_DISK_ERR- ডিস্ক ত্রুটি
FR_NOT_OPENED- ফাইল খোলা হয়নি
FR_NOT_ENABLED- ডিস্কটি মাউন্ট করা হয়নি

FATFS fs;// ফাইলটি পড়ার জন্য FATFS BYTE buff;// বাফার ধরনের একটি বস্তু ঘোষণা করুন WORD br; //বাইটের কাউন্টার রিড //ডিস্ক মাউন্ট করুন যদি (pf_mount(&fs) == FR_OK) ( //রুট ডিরেক্টরিতে অবস্থিত ফাইলটি খুলুন if(pf_open("hello.txt") == FR_OK) ( //read এটি থেকে 10 বাইট pf_read(buff, 10, &br); if(br != 10) ( //যদি br 10 এর সমান না হয় //এর মানে আমরা ফাইলের শেষে পৌঁছে গেছি))

FRESULT pf_write(const void* buff, WORD btw, WORD* bw)- ফাংশনটি আপনাকে একটি খোলা ফাইলে ডেটা লিখতে দেয়। ফাংশনটি কাজ করার জন্য, আপনাকে pffconf.h ফাইলে লিখতে হবে
#সংজ্ঞায়িত_ব্যবহার_লিখুন 1

বিকল্প:
void* buff- বাফারে পয়েন্টার যা আমরা লিখতে চাই, একটি শূন্য মান রেকর্ডিং চূড়ান্ত করে
শব্দ btw- আমরা লিখতে চাই বাইট সংখ্যা
শব্দ * bw- লিখতে সক্ষম বাইটের সংখ্যা সংরক্ষণ করে একটি পরিবর্তনশীলের একটি পয়েন্টার। এই ভেরিয়েবলটি বিশ্লেষণ করে, আপনি ফাইলের শেষ পর্যন্ত পৌঁছেছেন কিনা তা খুঁজে পেতে পারেন।

রিটার্ন মান:
FR_OK (0)- যদি ফাংশনটি সফলভাবে সম্পাদিত হয় তবে ফিরে আসে
FR_DISK_ERR- ডিস্ক ত্রুটি
FR_NOT_OPENED- ফাইল খোলা হয়নি
FR_NOT_ENABLED- ডিস্কটি মাউন্ট করা হয়নি

লাইব্রেরিটি অল্প পরিমাণে মেমরি সহ মাইক্রোকন্ট্রোলারের জন্য ডিজাইন করা হয়েছে এই কারণে, এই ফাংশনের বেশ কয়েকটি সীমাবদ্ধতা রয়েছে:

  • আপনি নতুন ফাইল তৈরি করতে পারবেন না, এবং আপনি শুধুমাত্র বিদ্যমান ফাইল লিখতে পারেন
  • আপনি ফাইলের আকার বাড়াতে পারবেন না
  • টাইমস্ট্যাম্প আপডেট করতে পারবেন না
  • লেখার ক্রিয়াকলাপ শুধুমাত্র সেক্টরের সীমানায় শুরু/বন্ধ করা যেতে পারে
  • শুধুমাত্র পঠনযোগ্য ফাইল বৈশিষ্ট্য লেখা আটকাতে পারে না

শেষ বিন্দু বোঝার জন্য, আপনাকে জানতে হবে যে কার্ডের মেমরিটি 512 বাইটের ব্লকে (সেক্টর) বিভক্ত এবং রেকর্ডিং শুধুমাত্র সেক্টরের শুরু থেকে শুরু করা যেতে পারে. এইভাবে, যদি আমরা 1000 বাইট লিখতে চাই, তবে প্রথম সেক্টরটি সম্পূর্ণভাবে লেখা হবে, এবং দ্বিতীয়টিতে শুধুমাত্র 488 বাইট লেখা হবে এবং বাকি 24 বাইট শূন্য দিয়ে পূর্ণ হবে।

একটি খোলা ফাইলে লিখতে, আপনাকে অবশ্যই নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করতে হবে:

  • পয়েন্টারকে সেক্টরের সীমানায় সেট করুন;
  • রেকর্ডিং ফাংশনটি প্রয়োজনীয় সংখ্যক বার কল করুন
  • একটি নাল পয়েন্টার দিয়ে ফাংশন কল করে রেকর্ড চূড়ান্ত করুন

রেকর্ডিং ফাংশন কীভাবে কাজ করে তার একটি উদাহরণ দেওয়ার জন্য, আরও একটি ফাংশন বিবেচনা করা প্রয়োজন।

FRESULT pf_lseek(DWORD অফসেট)- খোলা ফাইলে রিড/রাইট পয়েন্টার সেট করে। আপনি পরম বা আপেক্ষিক অফসেট দ্বারা পয়েন্টার সেট করতে পারেন;
pf_lseek(5000);
আপেক্ষিক জন্য, বর্তমান অবস্থানে পয়েন্টারের মান পাস করুন fs.fptrএবং স্থানচ্যুতির পরিমাণ
pf_lseek(fs.fptr + 3000);
ফাংশনটি কাজ করার জন্য, আপনাকে pffconf.h ফাইলে লিখতে হবে
#সংজ্ঞায়িত_ব্যবহার করুন 1

বিকল্প:
DWORD অফসেট- বাইটের সংখ্যা যার দ্বারা পয়েন্টারকে স্থানান্তরিত করতে হবে।

রিটার্ন মান:
FR_OK (0)- যদি ফাংশনটি সফলভাবে সম্পাদিত হয় তবে ফিরে আসে
FR_DISK_ERR- ডিস্ক ত্রুটি
FR_NOT_OPENED- ফাইল খোলা হয়নি

আপনি নিম্নলিখিত হিসাবে একটি ফাইলে ডেটা লিখতে পারেন।
FATFS fs;// ফাইলটি পড়ার জন্য FATFS BYTE buff;// বাফার ধরনের একটি বস্তু ঘোষণা করুন WORD br; //বাইটের কাউন্টার পড়ুন //ডিস্ক মাউন্ট করুন যদি (pf_mount(&fs) == FR_OK) ( //রুট ডিরেক্টরিতে অবস্থিত ফাইলটি খুলুন if(pf_open("hello.txt") == FR_OK) ( //set প্রথম সেক্টরের নির্দেশক pf_lseek(0); //write pf_write(buff, 10, &br);

আমি এখানে প্রকৃতপক্ষে কাজের কোডের একটি অংশও রেখে যাচ্ছি যা উপরে বর্ণিত সমস্ত ফাংশন ব্যবহার করে।
# F_CPU 8000000UL সংজ্ঞায়িত করুন # buff_size 10 # অন্তর্ভুক্ত করুন #অন্তর্ভুক্ত #include "diskio.h" #include "pff.h" #include "spi.h" FATFS fs;//BYTE write_buff = "হ্যালো শব্দ" ফাইল পড়ার জন্য FATFS BYTE read_buff;//বাফার ধরনের একটি বস্তু ঘোষণা করুন; UINT br ফাইলে লেখার জন্য /// /বাফার; //বাইটের কাউন্টার রিড int main(void) ( //ডিস্ক মাউন্ট করুন যদি (pf_mount(&fs) == FR_OK) ( //নতুন ফোল্ডারে অবস্থিত ফাইলটি খুলুন if(pf_open("new/hello.txt") == FR_OK) ( // লিখুন পয়েন্টার pf_lseek(0) সেট করুন; // pf_write লিখুন(write_buff, buff_size, &br); // লিখুন pf_write(0, 0, &br); //পয়েন্টার pf_lseek( 0); // পড়ুন তাহলে pf_read(read_buff, buff_size, &br); // ডিস্ক আনমাউন্ট করুন pf_mount(NULL) যখন(1) ( ) )

FRESULT pf_opendir(DIR* dp, const char * পথ)- ফাংশনটি একটি বিদ্যমান ডিরেক্টরি খোলে এবং ডিআইআর ধরণের একটি বস্তুর জন্য একটি পয়েন্টার তৈরি করে, যা খোলা ডিরেক্টরিতে ফাইলগুলির একটি তালিকা পেতে ব্যবহার করা হবে।
ফাংশনটি কাজ করার জন্য, আপনাকে pffconf.h ফাইলে লিখতে হবে
#সংজ্ঞায়িত_ব্যবহার_ডিআইআর 1

বিকল্প:
ডিআইআর *ডিপি- DIR টাইপ একটি পরিবর্তনশীল নির্দেশক.

const char * পথ- একটি স্ট্রিং নির্দেশক যাতে ডিরেক্টরির পথ রয়েছে, ডিরেক্টরিগুলি একটি স্ল্যাশ দ্বারা পৃথক করা হয়

রিটার্ন মান:
FR_OK (0)- যদি ফাংশনটি সফলভাবে সম্পাদিত হয় তবে ফিরে আসে
FR_NO_PATH- পথ খুঁজে পাইনি
FR_NOT_READY- ডিস্ক আরম্ভ করতে ব্যর্থ হয়েছে
FR_DISK_ERR- ডিস্ক ত্রুটি
FR_NOT_ENABLED- ডিস্কটি মাউন্ট করা হয়নি

// ভেরিয়েবল ঘোষণা করুন FATFS fs; ডিআইআর ডির; // ডিস্ক মাউন্ট করুন pf_mount(&fs); // ডিরেক্টরি খুলুন pf_opendir(&dir, "MY_FOLDER");

FRESULT pf_readdir(DIR* dp, FILINFO* fno)- ফাংশন আপনাকে একটি ডিরেক্টরির বিষয়বস্তু পড়তে দেয়। এটি করার জন্য, আপনাকে pf_opendir() ফাংশন ব্যবহার করে ডিরেক্টরি খুলতে হবে এবং pf_readdir() কল করতে হবে। প্রতিবার ফাংশনটি কল করা হলে, এটি নির্দিষ্ট ডিরেক্টরিতে অবস্থিত বস্তুর নাম (ফোল্ডার/ফাইল) ফিরিয়ে দেবে। যখন এটি সমস্ত বস্তুর মাধ্যমে পুনরাবৃত্তি করে, এটি fno.fname অ্যারে উপাদানে একটি নাল স্ট্রিং প্রদান করবে।
ফাংশনটি কাজ করার জন্য, আপনাকে pffconf.h ফাইলে লিখতে হবে
#সংজ্ঞায়িত_ব্যবহার_ডিআইআর 1

বিকল্প:
ডিআইআর *ডিপি- DIR টাইপের একটি ভেরিয়েবলের দিকে নির্দেশক, যা অবশ্যই আগে ঘোষণা করা উচিত

FILINFO *fno- FILINFO টাইপের একটি ভেরিয়েবলের একটি পয়েন্টার, যা অবশ্যই আগে ঘোষণা করা উচিত।

রিটার্ন মান:
FR_OK- ফাংশন সফল সমাপ্তি
FR_DISK_ERR- ডিস্ক ত্রুটি
FR_NOT_OPENED- ডিরেক্টরি খোলা নেই

FATFS fs; FRESULT res; FILINFO fno; ডিআইআর ডির; // ডিস্ক মাউন্ট করুন pf_mount(&fs); // ডিরেক্টরি খুলুন res = pf_opendir(&dir, MY_FOLDER); //(;;)( res = pf_readdir(&dir, &fno); //এর জন্য ডিরেক্টরির বিষয়বস্তু পড়ুন; //পড়ার সময় কোন ত্রুটি ছিল কিনা তা পরীক্ষা করুন // এবং যদি নির্দিষ্ট ডিরেক্টরিতে অন্য ফাইল থাকে যদি ((res ! = FR_OK) || ( fno.fname == 0))( বিরতি; ) //আউটপুট একটি সুবিধাজনক উপায়ে fno.fname usart_sendStr(fno.name);

এবং পরিশেষে, আমি এখানে কাজের খসড়া ছেড়ে দেব

  • আন্দ্রেয়াস বলেছেন:

    আপনার নিজের হাতে একটি মেমরি স্টিক অ্যাডাপ্টার একত্রিত করা কঠিন নয় যদি আপনি একটি নির্দিষ্ট মেমরি কার্ডের কার্যকরী পিনের উদ্দেশ্য জানেন। সাধারণত একটি মেমরি কার্ডের পিনআউট বলা হয় বা, উদাহরণস্বরূপ, একটি মাইক্রোসার্কিট, চিপ ইত্যাদি। সাধারণভাবে, প্রযুক্তি সহজ। MMC (মাল্টিমিডিয়া কার্ড) মেমরি কার্ডের লেআউট PCB থেকে কেটে ফেলা হয়। ব্রেডবোর্ডে 7টি ট্র্যাক কাটা হয় (এমএমসিতে 7 পিন রয়েছে)। তারপরে, নীচের চিত্রে দেখানো পিনআউট অনুসারে, ট্র্যাকগুলি SD মেমরি কার্ডের পিনের সাথে সোল্ডার করা হয় (9টি পিন রয়েছে, যার মধ্যে 2টি ব্যবহার করা হয়নি), মাইক্রোএসডি (8টি পিন রয়েছে, যার মধ্যে 2টিও নেই ব্যবহার করা হয়েছে, কিন্তু মনে রাখবেন যে কার্ডের microSD মেমরিতে Vcc আউটপুট নেই) বা microM2 (সংশ্লিষ্ট বিষয়ে মেমরি স্টিক মাইক্রো M2 অ্যাডাপ্টারে মাইক্রোএম2 পিনআউট)। এখানেই শেষ. মেমরি স্টিক অ্যাডাপ্টার প্রস্তুত।

    পুনশ্চ. আমাদের স্টকে 1 এবং 2 GB MMC মেমরি কার্ড আছে। খরচ, যথাক্রমে, 285 এবং 360 রুবেল। ডেলিভারি বিবৃত মূল্য অন্তর্ভুক্ত করা হয়.

    এছাড়াও আপনি সস্তায় নিম্নলিখিত আকারের মেমরি কার্ড কিনতে পারেন:
    - মেমরি স্টিক এবং মেমরি স্টিক M2;
    - সিকিউর ডিজিটাল (এসডি);
    - মিনি এসডি;
    - মাইক্রো এসডি (টিএফ);
    - কমপ্যাক্ট ফ্ল্যাশ;
    -এক্সডি;
    - বিভিন্ন ডিজাইন এবং ক্ষমতার USB ফ্ল্যাশ ড্রাইভ।
    উদাহরণস্বরূপ, এইগুলি:

  • স্লাভা বলেছেন:

    যাইহোক, আমি এই লেখাগুলিতে খুব স্পষ্ট নই। আপনি সেই পৃষ্ঠায় মাইক্রোসিডি থেকে এমএমসি পর্যন্ত ট্র্যাকগুলি পেতে পারবেন না, আমি খুব কৃতজ্ঞ থাকব।

  • আন্দ্রেয়াস বলেছেন:

    মাইক্রোএসডি থেকে এমএমসি অ্যাডাপ্টার দেখতে কেমন হবে:

  • স্লাভা বলেছেন:
  • সাইটে নতুন

    >

    সবচেয়ে জনপ্রিয়