কীভাবে ভি-ইউএসবি একটি এটিমেগ 328 পি এর অন্তর্নির্মিত এসপিআই স্ক্রু আপ করতে পারে?


14

আমি একটি ভি-ইউএসবি প্রকল্পে কাজ করছি যা এটিএমগ 328 পি ব্যবহার করে কী-বোর্ড হিসাবে প্রদর্শিত হবে। ইউএসবি অংশটি দুর্দান্ত কাজ করছে (এটি আমার প্রথম ভি-ইউএসবি প্রকল্প নয়) তবে আমি ভি-ইউএসবি স্ট্যাকটি চালু usbInit()করার পরে এসডি কার্ড লাইব্রেরিতে সমস্ত কল ব্যর্থ হয়। আমি যদি আগে একই ফাংশনগুলিতে কল করি তবে usbInit()সবকিছু ঠিকঠাকভাবে কাজ করে।

আমি ডায়াভোলিনো নামে একটি আরডুইনো ক্লোন ব্যবহার করি তবে আরডুইনো / তারের কাঠামো ছাড়াই। আমার কাছে ডিজিটাল আই / ও 2 এবং 3 এর সাথে ইউএসবি সংযুক্ত রয়েছে এবং এসডি কার্ডটি 10-13 (অন্তর্নির্মিত এসপিআই লাইনগুলি) এ আছে।

আমি এসডি কার্ড গ্রন্থাগারটি সন্ধান করেছি এবং এটির ব্যতীত অন্য কোনও বাধা বা নিবন্ধগুলি ব্যবহার করে এর চিহ্ন নেই SPxx। আমিও grepভি-ইউএসবি কোড থাকলেও এটি SPxxরেজিস্টারগুলিতে স্পর্শও করে না।

সমস্যার প্রথম চিহ্নটি যখন এসডি কার্ডটি অ্যাক্সেস করার কথা ছিল তখন ডিভাইসটি সংযোগ বিচ্ছিন্ন হয়ে যায়। তারপরে আমি সমস্ত এসডি কার্ড হ্যান্ডলিং লুপগুলিতে রেখেছি usbPoll()এবং wdt_reset()কল করেছি এবং দেখেছি যে লেখার ক্ষেত্রে কার্ডটি সর্বশেষ দুটি বাইট (সিআরসি -16) প্রেরণের পরে কার্ড থেকে স্বীকৃতির জন্য চিরকাল অপেক্ষা করে।

আমার ব্যবহৃত এসডি কার্ড গ্রন্থাগারটি হল sd_rawরোল্যান্ড রিগেল।


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

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

@ ডেভিটউইড - কার্ডের জন্য অপেক্ষা করতে হবে সংবেদনশীল সময় হ্যাঁ, তবে আপনার প্রোগ্রামটির জন্য কার্ডটি অপেক্ষায় রাখতে না পারার পরিপ্রেক্ষিতে ??
ক্রিস স্ট্রাটন

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

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

উত্তর:


1

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


নোট করুন যে প্রশ্নের মধ্যে ডাব্লুডিটি_সেট () কল এসডি কোডের মধ্যে ;োকানো রয়েছে; যদিও অবশ্যই এটি সম্ভব যে এটি সর্বত্র করা হয়নি।
ক্রিস স্ট্রাটন

1
হ্যাঁ তবে ঘড়ির কুকুরটি অক্ষম করার সাথে কোডটি চেষ্টা করা সত্যই is কখনও কখনও বিশেষত যখন ফেরত তথ্য একটি বিঘ্নিত রুটিনে প্রক্রিয়া করা হয়, কোডটি সেখানে আটকে যায় এবং ঘড়ির কুকুরটি পুনরায় সেট করার আগে সক্রিয় হয়ে যায়
আগস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.