কিভাবে এসডি কার্ড লেখার গতি আরডুইনোতে বাড়ানো যায়


12

আমি একটি ডেটা-লগার সিস্টেম তৈরি করছি যা প্রতি সেকেন্ডে প্রায় 20000-30000 বাইটের উচ্চ গতিতে এসডি কার্ডে ডেটা লগ করে। তবে আরডুইনোর এসডি লাইব্রেরি বর্তমানে প্রতি সেকেন্ডে প্রায় 4500-5000 বাইটে ডেটা লিখছে যা খুব ধীর।

লেখার গতি উন্নত করতে আমি এই হ্যাকটি পড়েছি , তবে আমি স্পাইসেটিংগুলিকে সামঞ্জস্য করে আরও সরাসরি পন্থা সম্ভব কিনা তা ভাবছি


1
আপনি এসডিফ্যাট লাইব্রেরিটি চেষ্টা করতে পারেন - এটি ডিফল্ট এসডি লাইব্রেরির চেয়ে অনেক বেশি দক্ষ।
মাজেঙ্কো

আপনার এসডি কার্ডটি ভাল মানের কিনা তা আপনিও নিশ্চিত করতে চাইতে পারেন, যদিও যে কোনও ধরণের এসডি কার্ডের জন্য 5000 বাইট খুব কম বলে মনে হয়।
লেন

উত্তর:


11

ঠিক আছে. সুতরাং, আমি এসডিফ্যাট লাইব চেষ্টা করেছি। এই গ্রন্থাগারটি অ্যাড্রুইনোতে আসা ডিফল্ট এসডি লাইব্রেরির চেয়ে অবশ্যই ভাল। তবে এটি হ'ল আমি কম ডেটা-রেটের সমস্যাটি সমাধান করেছি।

আমি এই পোস্ট থেকে এসডিফ্যাট লাইব্রেরির লেখকের নির্দেশ অনুসরণ করেছি ।

ফ্যাট 16 লিবি অনুসারে , ডেটা রেট বাড়ানোর জন্য আমাদের বুদ্ধিমানভাবে ফ্লাশ () ব্যবহার করা দরকার। আমরা প্রতিটি চক্রের ডেটা () লিখতে চাই, তবে প্রতিটি চক্রের পরিমাণে কতটা ডেটা লেখা হচ্ছে তার উপর নির্ভর করে আমাদের কেবল প্রতি 100 টি চক্র () একবার ফ্লাশ করতে হবে। এছাড়াও, SD.open () তে পতাকা 'O_WRITE | হিসাবে রাখার বিষয়ে নিশ্চিত হন 'FILE_WRITE' এর পরিবর্তে O_CREAT '।

এটি নিশ্চিতভাবে একটি দুর্দান্ত গুণক দ্বারা গতি বৃদ্ধি পেয়েছে। তবে আমার আরও দরকার ছিল!

বাইনারি ডেটা সংরক্ষণ ( এই ব্লগটি দেখুন ) আরও বেশি কার্যকারিতা উন্নত করে improved

আমার বর্তমান গতিটি ক্লাস 4 এসডি কার্ড সহ প্রায় 100-120 কেবিপিএস (এটি কিলো বাইট)!

অবশেষে, আমি আপনাকে সাহায্যের জন্য আপনাকে ধন্যবাদ জানাতে চাই।


4

আপনি যদি এই কাঙ্ক্ষিত গতিতে পৌঁছাতে পারেন তবে অনেকগুলি বিষয় সিদ্ধান্ত নেয়। এর মধ্যে কেবল কয়েকটি।


1. আপনার সফ্টওয়্যার

SdFat লাইব্রেরী যতো তাড়াতাড়ি যাও Arduino আইডিই মান এসডি লাইব্রেরি। এটি স্ট্যান্ডার্ড এসডি লাইব্রেরির সাথে সামঞ্জস্যতা ফাংশনটি ব্যবহার করাও সহজ। চেষ্টা কর.

2. আপনার হার্ডওয়্যার

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


আমি কয়েক দিনের মধ্যে এটি চেষ্টা করব এবং ফলাফলগুলি আপনাকে জানাব। ধন্যবাদ।
আশীষ রঞ্জন

4

একটি বাফার পেয়ে হ্যান্ডশেক এড়ান!

SD.writ (বুফ, আকার) ব্যবহার করুন ;

প্রত্যেককে হাই, আমি একই সমস্যা নিয়ে একটি প্রকল্পে কাজ করছি। আমি আপনার একই পদক্ষেপগুলি অনুসরণ করছিলাম এবং ঠিক একই নম্বর পেয়েছি। আমি সবেমাত্র এটি ঠিক করেছি। আপনি যখন ফোন করবেন তখন সমস্যাটি হ্যান্ডশেক SD.write()

পরিবর্তে:

//for each loop, it is going to make a handshake
while(<yourCondition>){
    SD.write(<yourValue>);
}

না:

char buf[length];
while(yourCondition){
    buf[index] = yourValue;
}
SD.write(buf,index);//only one handshake

আমার প্রকল্পে প্রথমটি পেয়েছিলাম ৪১০০ বাইট এবং দ্বিতীয়টি 128 (বুফ [128]) দিয়ে বাফার ব্যবহার করে আমি আমার প্রকল্পে 145408 বাইট পেয়েছি । যথেষ্ট.


1
হ্যান্ডশেক বলতে কী বোঝাতে চেয়েছি তা আমি জানি না, কারণ আফাইক এসডি অভ্যন্তরীণভাবে কোনও (512 কেবি) বাফার ব্যবহার করে। তবে আমি আরও লক্ষ্য করেছি যে ফাইল.রাইটের সাথে পৃথক বাইটগুলি লেখা অত্যন্ত ধীর এবং সংকলকটি এটি অনুকূল করে তুলতে সক্ষম বলে মনে হচ্ছে না (সর্বোপরি এটি কেবলমাত্র একটি বাইটটি অভ্যন্তরীণ বাফারটিতে অনুলিপি করছে এবং বাফারটি পূর্ণ কিনা তা এবং এসপিআই সংক্রমণটি পরীক্ষা করা উচিত শুরু)। আমার নিজের বাফার বাইরে এবং ফাইল.ওরাইট (বাফার, আকার) ব্যবহার করে আমার অ্যাপ্লিকেশনটিতে চূড়ান্ত পারফরম্যান্সের উন্নতিও ঘটেছে।
অলিভার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.