এসপিআইতে মাইক্রোএসডি কার্ড আরম্ভের জন্য সঠিক কমান্ড সিকোয়েন্সটি কী?


18

আমি একটি সিলিকন ল্যাবস C8051F931 নিয়ামক দিয়ে একটি মাইক্রোএসডি কার্ড (2 জিবি, কিংস্টন, স্যান্ডিস্ক) ইন্টারফেস করার চেষ্টা করছি ।

শুরুর দিকে আমাকে যে ক্রমটি অনুসরণ করতে হবে তা সম্পর্কে আমি খুব বিভ্রান্ত। পিআইসি মাইক্রোকন্ট্রোলার ব্যবহার করে এসডি কার্ড প্রকল্পগুলি বইয়ের পৃষ্ঠায় ১৩৫ পৃষ্ঠা উল্লেখ করেছে:

এসডি কার্ডটি এসপিআই মোডে স্যুইচ করার পদক্ষেপগুলি নিম্নরূপ হওয়া উচিত:
পাওয়ার-আপ।
CS সিএস এবং ডেটা আউটলাইন যুক্ত যুক্তিতে "1." সেট করে কার্ডে কমপক্ষে clock৪ টি ঘড়ির ডাল প্রেরণ
করুন CD সিডি লাইনটি কম সেট করুন।
SP কার্ডটি এসপিআই মোডে রাখার জন্য 6-বাইট সিএমডি0 কমান্ড "40 00 00 00 00 95" প্রেরণ করুন।
Error কোনও ত্রুটি বিট সেট নেই তা নিশ্চিত করতে R1 প্রতিক্রিয়া পরীক্ষা করুন।
R R1 প্রতিক্রিয়াতে "ইন-ইডল-স্টেট" বিটটি "0," তে সেট না হওয়া পর্যন্ত বার বার কমান্ড সিএমডি 1 প্রেরণ করুন
• এবং কোনও ত্রুটি বিট সেট নেই। কার্ডটি এখন পড়ার / লেখার ক্রিয়াকলাপের জন্য প্রস্তুত।

আমি এটি চেষ্টা করেছি, তবে সিডিএম 1 এর জন্যও আমি 01 পাচ্ছি। 00 প্রত্যাশিত

এছাড়াও আমি এখানে একটি পৃথক কমান্ড সিকোয়েন্স দেখি যেখানে তিনি সিএমডি 8 পরে সিএমডি 8 প্রেরণ করেন। তবে বইটি বলেছে আমাকে সিএমডি 1 পাঠাতে হবে।

সঠিক ক্রম কি?

উত্তর:


34

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

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

পরবর্তী জিনিসটি হ'ল CMD1এসডি / এসডিএইচসি / এসডিএক্সসি কার্ডগুলি আরম্ভ করার জন্য আপনার কার্ড ব্যবহার করা উচিত নয় যতক্ষণ না আপনার কার্ড CMD55/ সনাক্ত না করে ACMD41; এসডি কার্ড স্পেসিফিকেশন হিসাবে বলা হয়েছে:

যে কোনও ক্ষেত্রে সিএমডি 1 এর প্রস্তাব দেওয়া হয় না কারণ হোস্টের পক্ষে মাল্টিমিডিয়াকার্ড এবং এসডি মেমোরি কার্ডের মধ্যে পার্থক্য করা কঠিন হতে পারে।

কিছু কন্ট্রোলার (বেশিরভাগ নতুন এবং উচ্চতর কার্ডের কার্ড) আপনি আইডলিতে থাকবেন যদি আপনি CMD1তাদের কাছে ইস্যু করেন। আপনার প্রথমে CMD8 0x1AAরিসেটের পরে ইস্যু করা উচিত ( CMD0) এবং তারপরে ব্যবহার করার চেষ্টা করুন CMD55 + ACMD41যদি এবং শুধুমাত্র যদি এটি ব্যর্থ হয় তবে ব্যবহার করুন CMD1

টিপি; ডাঃ এসপিআই মোডে কার্ডটি আরম্ভ করার জন্য আপনার উচিত:

  1. CMD0যুক্তি :, 0x0সিআরসি: 0x95(প্রতিক্রিয়া 0x01:) - নোট করুন যে 0xFFগার্ল্ড প্রতিক্রিয়া ক্ষেত্রে আপনার কেবল এই পদক্ষেপটি পুনরাবৃত্তি করা উচিত; আরও তথ্যের জন্য নিচে দেখুন.

  2. CMD8আরগ:, 0x000001AAসিআরসি: 0x87(প্রতিক্রিয়া: 0x01এরপরে আর্গো এর প্রতিধ্বনি অনুসরণ করে 0x000001AA) - যদিও মনে হতে পারে যে এই আদেশটি alচ্ছিক , এটি নতুন কার্ডগুলির জন্য সম্পূর্ণ বাধ্যতামূলক। যদিও 0x1AAএখানে একটি সাধারণ আরগ মান রয়েছে তবে আপনি অন্য মানগুলিও পাস করতে পারেন; "সারণী 7-5 দেখুন: এসপিআই মোডে সিএমডি 8 এর জন্য কার্ড অপারেশন", পি। 108 বিশদে বিশদ

    3a। CMD55ARG: 0x0, সিআরসি: কোন, 0x65আসলে (প্রতিক্রিয়া: 0x01; CMD55করার উপসর্গ হচ্ছে যে ACMD , যদি প্রতিক্রিয়া 0x05, আপনি একটি পুরানো কার্ড পেয়েছেন - পুনরাবৃত্তি CMD1ARG সঙ্গে 0x0[সিআরসি 0xF9] এর পরিবর্তে CMD55/ ACMD41)

    3b। ACMD41, আরগ:, 0x40000000সিআরসি: যে কোনও, 0x77আসলে (মনে রাখবেন যে এই যুক্তিটি কার্ডটি এইচসিএস হিসাবে ধরেছে, যা সাধারণত ক্ষেত্রে হয়; পুরানো কার্ডগুলির জন্য 0x0আর্গ [সিআরসি 0xE5] ব্যবহার করুন)। প্রতিক্রিয়া যদি হয় 0x0, আপনি ঠিক আছেন; যদি এটি হয় তবে 0x013 এ; যদি এটি 0x05হয় তবে এটির উপরে নোটটি দেখুন (3 এ।); যদি তা না হয় তবে এর সাথে কিছু ভুল হয়েছে (নীচে দেখুন)।

CMD1CMD0CMD8CMD55ACMD41CMD55ACMD41CMD0CMD8CMD1CMD1CMD55ACMD41CMD10x05এনএন00xFFCMD0এনCMD00xFF0x01CMD8

নোট করুন যে এমএসবি সেট রয়েছে কিন্তু প্রতিক্রিয়াগুলি 0xFFসাধারণত এমন হয় না যে আপনার এসপিআই ক্লকিংয়ের ক্ষেত্রে একটি শিফট পেয়েছে (যেমন, ভিসি ড্রপ, যা আপনি যখন এসডি হটপ্লাগগুলি করছেন তখন নিয়মিত ঘটে)। এটির সমাধানের জন্য, আপনি ডিভাইসটিকে পুরোপুরি পুনরায় সেট করার চেষ্টা করতে পারেন (পাওয়ার চালু / বন্ধ, ডিএস্রেট / এসেরেট এসেস ইত্যাদি); এটি সাধারণত কাজ করে।

এছাড়াও, জল্পনা বলে

সর্বশেষ এসডি মেমোরি কার্ড বাসের লেনদেনের পরে, হোস্টটি ক্লকটি বন্ধ করার আগে ক্রিয়াকলাপটি সম্পন্ন করার জন্য কার্ডের জন্য 8 (আট) ঘড়ি চক্র সরবরাহ করতে হবে।

এটি এটি ছাড়া কাজ করতে পারে, তবে যেহেতু 8 চক্র = 1 এসপিআই আউটপুট বাইট, এটি খুব বেশি ক্ষতি করবে না এবং এটি এটির পক্ষে ঠিক।

নোট করুন যে আপনার প্রত্যেকের আগে এবং পরে কমপক্ষে S̲S̲ (ওরফে সিএস) কম হওয়া উচিত CMD- এটির ক্ষেত্রে এটি সম্পূর্ণ বাধ্যতামূলক CMD0(ডিভাইসটি এটি ছাড়া চালু হবে না) এবং বাস্তবে CMDআপনার যদি কোনও মান থাকে তবে অন্য সমস্ত ক্ষেত্রে প্রয়োজনীয় -কম্পিয়েন্ট এসডি কার্ড কার্ডের S GS̲ কে স্থায়ীভাবে GND এর সাথে সংযুক্ত করার ফলে মনে হতে পারেআপনার কার্ডটি কেবলমাত্র ইউএস আউটপুট পিন এবং কোড দ্বারা এটি পরিচালনা করার প্রয়োজনীয়তা উভয়কেই বাঁচাতে পারে, কারণ কার্ডটি কেবলমাত্র একমাত্র এসপিআই ক্লায়েন্ট হলেই আপনার ধারণাটি ভাল হতে পারে এবং কার্ডটি ধরে নেওয়া উচিত যে এটি সমস্ত নির্বাচিত হয়েছে because সময়. বাস্তবে, কিছু কার্ড (কেবল তাদের বেশিরভাগ না হলেও) কেবলমাত্র নিম্ন সনাক্তকরণের পরিবর্তে একটি উচ্চ থেকে নীচের opeালটি চালু হওয়ার প্রত্যাশা করে এবং আপনি যদি S̲S̲ বিটটি মোটেও টগল না করেন তবে ক্রুদ্ধ হন এবং তারপরেও পিছিয়ে যান ঘড়ি বা থুতু আবর্জনা; কিছু (সাধারণত নতুন) কার্ডগুলির কাজ করা উচিত, কিছু (পুরানো) নাও হতে পারে, ওয়াইএমএমভি (এখনও আবার)। তবুও, আরও শক্তিশালী এসপিআই কনফিগারেশনের জন্য (> 1 স্লেভ ডিভাইস) প্রদত্ত এসডি কার্ডের সাথে কোনও প্রকৃত লেনদেনের আগে পিনটি কম মনে করতে হবে।

এছাড়া যখন বৈশিষ্ট বলছেন যে শুধুমাত্র CMD0এবং CMD8SPI মোডে সিআরসি থাকা উচিত, কিছু এসডি কার্ড (Transcend বেশী মত) সঠিক সিআরসি প্রয়োজন বলে মনে হচ্ছে CMD55/ ACMD41- আপনি নিরাপদ পাশ হতে চাই, কেবল তাদের জন্য একটি precalculated মান ব্যবহার।

এছাড়াও, এসপিআইকে নিজে থেকে পুলআপ / ডাউনগুলি প্রয়োজন হয় না, তবে মিসোতে 47k পুলআপ নিক্ষেপ করা ভাল ধারণা হতে পারে; কিছু ডিভাইস নির্দিষ্ট পরিস্থিতিতে তাদের ডিও পিন উচ্চ-জেড ছেড়ে দেয় (যেমন প্রাথমিকভাবে নয়) এবং ভাসমান পিনগুলি সর্বদা অদ্ভুত সমস্যার উত্স হতে পারে। আপনার ইউসির যদি 3.3 ভিসি থাকে তবে আপনি অভ্যন্তরীণ পুলআপ ব্যবহার করতে পারেন; যদি এটি 5 ভি হয় তবে আপনার এমআইএসও লাইনটিতে ইতিমধ্যে যথাযথ 5-> 3.3V লজিক অনুবাদ না থাকলে এটি করবেন না।

আরও পড়া:

এমএমসি / এসডিসি কীভাবে ব্যবহার করবেন

এসডি স্পেসিফিকেশন পার্ট 1 সরলিকৃত শারীরিক স্তর সরলীকৃত স্পেসিফিকেশন - সর্বাধিক গুরুত্বপূর্ণ বিভাগ 6.4.1 পাওয়ার আপ এবং 7.2.1 মোড নির্বাচন এবং চিত্র 7-1 সহ প্রারম্ভিককরণ : এসডি মেমোরি কার্ডের স্টেট ডায়াগ্রাম (এসপিআই মোড)


4

এসডি কার্ডগুলির জন্য চশমাগুলি এসডিকার্ড.আরগনে উপলব্ধ । সরলিকৃত সংস্করণে কিছু বিশদ রইল না, তবে আপনাকে উদাহরণের জন্য অংশ 1-এর 7-2 চিত্রের দিকে নজর দেওয়া উচিত, যেখানে এসডিএইচসি এবং এসডি কার্ডগুলির জন্য প্রারম্ভিক ক্রমগুলি ব্যাখ্যা করা হয়েছে।

মাইক্রোএসডি কার্ডগুলি <= 2 গিগাবাইট পুরানো কার্ডগুলির মতো কাজ করতে পারে, যাতে তাদের শেষ পর্যন্ত0x00 ফলাফল দেওয়া উচিত । এটি কয়েকটি পুনরায় চেষ্টা করার প্রয়োজন হতে পারে, কারণ কার্ডটি কিছু অভ্যন্তরীণ প্রসেসিং চালানোর জন্য এসপিআই বাস থেকে বাইরের ঘড়িটি ব্যবহার করতে পারে।CMD1


2

@ ভ্যাক্সকুইস উত্তরের উত্তরে যোগ করে, আমি " শারীরিক স্তর সরলীকৃত স্পেসিফিকেশন সংস্করণ 4.10 , © কপিরাইট 2001-2013 এসডি গ্রুপ (প্যানাসনিক, সানডিস্ক, তোশিবা) এবং এসডি কার্ড অ্যাসোসিয়েশন" (চিত্র 7-2) থেকে সংশ্লিষ্ট চার্টটি উদ্ধৃত করতে চাই : এসপিআই মোড ইনিশিয়ালাইজেশন ফ্লো):

এসডি কার্ড এসপিআই উদ্যোগ সিকোয়েন্স

এখানে আপনি দেখতে পাচ্ছেন কোন আদেশগুলি কোন আদেশে প্রেরণ করতে হবে এবং কার্ডের ধরণ সম্পর্কে প্রতিক্রিয়াগুলি আমাদের কী বলে। আমি মনে করি এটি আকাঙ্খিত যে কোনও ডিভাইস যতটা সম্ভব কার্ডকে সমর্থন করে; এবং যতক্ষণ না এটি 512 বাইটের ব্লক পড়ার এবং লেখার প্রাথমিক ক্রিয়াকলাপের কথা আসে, এটি কমপক্ষে সমস্ত ভি 1.x এবং ভি 2.0 এসডি এবং এইচসি কার্ডের জন্য করণীয় হওয়া উচিত।


2

আমি এটি অন্য সম্ভাবনা হিসাবে প্রস্তাব করি .. এসপিআই মোডে, স্যামসং মাইক্রোএসডি ইভিও 32 জিবি-র বৈধ সিআরসি কোড থাকতে সমস্ত কমান্ড কোডের প্রয়োজন require আমি বাজি ধরছি তারা কেবল একা নয়। আমি এমন একটি মন্তব্য পড়েছি যেখানে 32 গিগাবাইটের উপরে থাকা সমস্ত কার্ড সেভাবেই বিশ্বাস করেছিল। আমি এক সপ্তাহ ধরে একটি বাগ ডিবাগ করছি। কার্ডে প্রেরিত সমস্ত কোডের বৈধ crc কোড না হওয়া পর্যন্ত আমার কোড কাজ করবে না। আমি এটি সমস্ত সিআরসি কোডগুলি https://github.com/hazelnusse/crc7/blob/master/crc7.cc গণনা করতে ব্যবহার করেছি এমনকি আমি সিআরসি কোডগুলি বন্ধ করার জন্য 59 কমান্ডটি ব্যবহার করার চেষ্টা করেছি। আমি আশা করি এটি অন্য কারও অনেক সময় এবং প্রচেষ্টা সাশ্রয় করে।

সিআরসি মান সহ আমার সূচনা কোড ..

Power On..
Clock card at least 74 (I use 80) cycles with cs high
CMD0 0, crc=0x95
CMD8 0x01aa, crc=0x87
CMD58 0, crc=0xfd
CMD55 0, crc=0x65
CMD41 0x40000000, crc=0x77
CMD9 0, crc=0xaf
CMD16, 512, crc=0x81 (If you want block length of 512)

Some random other commands..
CMD17 0, crc=0x3b (Read one block)
CMD18 0, crc=0x57 (Read multiple blocks)
CMD24 0, crc=0x6f (set write address for single block)
CMD25 0, crc=0x03 (set write address for first block)

-2

আপনি কি নিশ্চিত যে আপনার এসপিআই বাস 400 কেএইচআরজে রয়েছে? এসডিআই বাসটি নিষ্ক্রিয় অবস্থায় রয়েছে এমনটি না হওয়া পর্যন্ত এসপিআই বাসটি 400 কিলাহার্টজ গতিতে চলতে হবে, যার উপর এসপিআই বাসের ঘড়ির হার বাড়ানো যেতে পারে (সঠিক সর্বাধিক নির্মাতাকে আলাদা করে দেখা যায়, তবে মনে হয় এটির মতো) বেশিরভাগ কার্ডের জন্য 12 মেগাহার্টজ নিরাপদ বাজি)।

এছাড়াও, এই অনুসারে: http://elm-chan.org/docs/mmc/mmc_e.html সিএমডি 1 হ'ল যথাযথ সূচনা। সিএমডি 8 কেবলমাত্র ভোল্টেজের পরিসীমা অনুসন্ধান করার জন্য প্রয়োজনীয়, যা নন-এসডিএইচসি (<= 2 জিবি) কার্ডগুলির সাথে কোনও সমস্যা হওয়া উচিত নয়।


প্রকৃতপক্ষে, অনেকগুলি এসডি কার্ড (বেশিরভাগই নতুন, আমার সনি এসআর -32 সি 4 32 জিবি এক হ'ল) CMD8আগে জারি করা ছাড়া একেবারেই শুরু হবে না । এছাড়াও, ঘড়িটি সাধারণত বুদ্ধিমানের মধ্যে না হওয়া পর্যন্ত কোনও সমস্যা হয় না it's
ভ্যাক্সকুইস

-3

হতে পারে এটি খুব দেরী হয়েছে, তবে কার্ড থেকে প্রাপ্ত প্রতিক্রিয়া ঠিক আছে! সিএমডি0 এর পরে, প্রতিক্রিয়া অবশ্যই 0x01 হওয়া উচিত - এর অর্থ হ'ল কার্ডটি আইডিএল অবস্থায় রয়েছে এবং কাজের জন্য প্রস্তুত। আপনার যদি 0b00000101 এর মতো কিছু থাকে তবে 2-এনডি জায়গায় থাকা 1 টি বলে যে এটি অবৈধ কমান্ড এবং 0-এর স্থানে থাকা 1 বলছে যে সার্ড এখনও আইডিএল অবস্থায় রয়েছে এবং কাজের জন্য প্রস্তুত। যদি প্রতিক্রিয়া 0x00 হয় তবে এর অর্থ হ'ল কার্ডটি আইডিএল অবস্থায় নেই এবং আপনাকে অবশ্যই আর একটি রিসেট আদেশ পাঠাতে হবে।


আপনি কি আদৌ প্রশ্ন পড়েছেন? ওপি স্পষ্ট করে বলা I tried this, but I am getting 01 even for CDM1- প্রতিক্রিয়ায় অলস পেয়ে CMD1মধ্যে না ঠিক আছে। আপনি আপনার "উত্তর" দিয়ে তাঁর আসল সমস্যাটির সমাধান করছেন না।
ভ্যাক্সকুইস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.