আরটিসি-কে বর্তমান সময়ে কনফিগার করতে এসটি-লিংক ইউটিলিটি ব্যবহার করা


9

আমি কি করছিলাম

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

সুতরাং আমি প্রোগ্রামিং শেষ করার পরে, আমি বর্তমান সময়টি সেট করতে চাই। আমি জানতাম যে নিম্নলিখিত কমান্ডটি ব্যবহার করে আমি এসটি-লিংক ইউটিলিটি কমান্ড লাইন ইন্টারফেস (এসটি-লিঙ্ক_সিএলআই) ব্যবহার করে ফ্ল্যাশটিতে ডেটা লিখতে সক্ষম:

ST-LINK_CLI.exe -w32 <Address> <data> -Rst

আমি একটি সাধারণ পরীক্ষার স্ক্রিপ্ট লিখেছিলাম যা বর্তমানে ইউনিক্স টাইম স্ট্যাম্পকে কোড ব্যবহার করে না এমন কোনও ঠিকানায় লিখেছে।

আমি টাইম স্ট্যাম্পটি পড়ার জন্য একটি ফাংশন লিখতে যাচ্ছিলাম এবং আরটিসি সময় সেট করতে এটি ব্যবহার করব। আমি এসটি-লিঙ্ক ইউটিলিটি ব্যবহারকারী ম্যানুয়ালটিতে নিম্নলিখিতটি না পড়ার আগে পর্যন্ত :

-w32 ফ্ল্যাশ মেমরি, ওটিপি, এসআরএম এবং আর / ডাব্লু নিবন্ধগুলিতে লেখা সমর্থন করে।

যখন ম্যানুয়ালটি বলে যে এটি আর / ডাব্লু নিবন্ধগুলিতে লেখা সমর্থন করে, এর অর্থ কি আমি সরাসরি আরটিসি রেজিস্টারগুলিতে অ্যাক্সেস করতে এবং সেগুলি সেট করতে পারি? আমি চেষ্টা করেছি, কিন্তু এই নিবন্ধগুলিতে আমি লেখার মতো বলে মনে হচ্ছে না।

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


আমি যা করতে চেয়েছিলাম

আরটিসি রেজিস্টারগুলি সেট করতে, আমি এসটিএম রেফারেন্স ম্যানুয়ালটিতে বর্ণিত হিসাবে নিম্নলিখিত পদক্ষেপগুলি করার চেষ্টা করেছি :

  • পিডাব্লুআর_সিআর রেজিস্ট্রারে ডিপিবি বিট সেট করুন
  • আরটিসি_ডব্লিউপিআর রেজিস্ট্রারে 0xCA লিখুন
  • আরটিসি_ডাব্লুপিআর রেজিস্ট্রারে 0x53 লিখুন
  • আরটিসি_আইএসআর রেজিস্ট্রারে আইএনআইটি বিট সেট করে আরটিসি বন্ধ করুন
  • আরটিসি_PRER রেজিস্ট্রারে লিখে 1Hz ঘড়িটি নির্বাচন করুন
  • আরটিসি_টিআর রেজিস্ট্রারে লিখে বর্তমান সময়টি লোড করুন
  • আরটিসি_ডিআর রেজিস্ট্রারে লিখে বর্তমান তারিখটি লোড করুন
  • আরটিসি_আইএসআর রেজিস্ট্রারে আইএনআইটি বিটটি পুনরায় সেট করে আরটিসি শুরু করুন

নিবন্ধগুলি অ্যাক্সেস করতে, আমি নিম্নলিখিত ঠিকানাগুলি ব্যবহার করেছি:

  • পিডব্লিউআর_সিআর: 0x4000 7000
  • আরটিসি_ডব্লিউপিআর: 0x4000 2824
  • আরটিসি_আইএসআর: 0x4000 280 সি
  • আরটিসি_PRER: 0x4000 2810
  • আরটিসি_টিআর: 0x4000 2800
  • আরটিসি_ডিআর: 0x4000 2804

কি ভুল ছিল

আমি এই নিবন্ধগুলির কোনওটিতেই লিখতে পারছি না। এসটি-লিংক ইউটিলিটি সহ, আমি নিম্নলিখিত বার্তাটি পেয়েছি:

স্মৃতি লেখার সময় ত্রুটি ঘটেছে!

এসটি-লিঙ্ক_সিএলআই ব্যবহার করে:

0x40007000 এ 0x00000100 লেখা হচ্ছে ... ত্রুটি!

এই রেজিস্টারগুলি পড়া কোনও সমস্যা নয় তবে আমি এসটি-লিংক ইউটিলিটি বা এর কমান্ড লাইন ইন্টারফেস ব্যবহার করে সেগুলিতে লিখতে পারি না।


প্রশ্নটি

আমি কীভাবে এসটি-লিংক ইউটিলিটি ব্যবহার করে আর / ডাব্লু নিবন্ধগুলিতে লিখতে পারি?

আরটিসি রেজিস্টারগুলিতে যা আমি উপেক্ষা করেছি তাতে লেখার অনুমতি দেওয়ার জন্য কি কোনও ধরনের রক্ষা সুরক্ষিত আছে?


কোনও কী-কোড প্রবেশ না করা পর্যন্ত সম্ভবত লেখার-সুরক্ষিত।
স্পার্ক 256

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

আমি আসলে সেভাবে ভাবিনি! আমার মনে হয় আমার এখনও এমনটি করা উচিত, যদিও আপনারও কিছু ক্রেডিট থাকতে চাই।
Spectre208

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

এটি একটি ব্যাটারিতে 10 বছর ধরে চলার কথা রয়েছে .. তবে, সমস্ত ডিভাইসগুলি একবারে তাদের ডেটা প্রেরণ করা থেকে বিরত রাখতে সময় স্কিমটি ইতিমধ্যে কিছু এলোমেলো সংখ্যা দ্বারা কিছুটা সংশোধিত হয়ে যায়। আরটিসি সময়স্রোত তাই কোনও বড় বিষয় নয়।
Spectre208

উত্তর:


4

কিছু নিবন্ধগুলি কেবলমাত্র নির্দিষ্ট অ্যাক্সেসের প্রস্থের জন্য বৈধ হয় (যেমন, - ডাব্লু 32 সঠিক নাও হতে পারে), বা লিখিত মানগুলি আবার না পড়তে পারে যা যাচাইকরণে সমস্যা তৈরি করতে পারে।

জিনিসগুলি অ্যাক্সেস করার ক্ষেত্রে ক্রম বা রাষ্ট্রীয় বিধিনিষেধও থাকতে পারে।

একটি বিকল্প যা বেশিরভাগ কল্পনাপ্রসূত বিষয়গুলির আশেপাশে কাজ করা উচিত তা হ'ল র‌্যামে চালানোর সাথে সংযুক্ত যে কাজটি করার জন্য একটি ক্ষুদ্র প্রোগ্রাম তৈরি করা। আপনি অফসেট বের করার পরে ডেটাটিকে তার বাইনারিতে প্রতিস্থাপিত করতে, পরিবর্তিত সংস্করণটি আপলোড করতে এবং এটি চালাতে পারেন। অথবা আপনি প্রোগ্রামটি ফাইলের এক্সটেন্টগুলির বাইরে র‌্যামের একটি অঞ্চল থেকে মানগুলি পেতে পারেন যা আপনি চালনার আগে সেট করেছিলেন। স্টিলিংকের সুক্ষ্ম নিয়ন্ত্রণের সাথে আপনি সিপিইউ রেজিস্টারগুলিতে মানগুলিও পাস করতে পারেন, যদিও আপনার (?) এসটি করার পরিবর্তে বিকল্প ওপেন সোর্স কমান্ড লাইন প্রোগ্রামের প্রয়োজন হতে পারে (র‌্যাম পদ্ধতিতে এই ছোট রুটিনটি ঘটনাক্রমে সেই প্রোগ্রামটি কীভাবে সম্পাদন করে? ঝলকে)


3

সুতরাং ক্রিস স্ট্রাটন যেভাবে উল্লেখ করেছেন:

কিছু নিবন্ধভুক্ত .. লিখিত মানগুলি আবার না পড়তে পারে যা যাচাইকরণে সমস্যা তৈরি করতে পারে।

এর অর্থ এই যে যাচাইকরণ ব্যর্থ হয়েছে, ত্রুটিটি প্রদর্শন করতে ব্যর্থ হয়েছিল, যদিও লেখার ক্রিয়াটি আসলে সফল হয়েছিল।

পিডাব্লুআর_আইএসআর রেজিস্টারটি পড়ার সময়, আইএনআইটি বিট সেট করে, আবার নিবন্ধটি আবার পড়ার সময় আমি যে প্রতিক্রিয়াটি পাই তা নীচে:

0x4000280C: 00000027

0x400280C তে 0x00000080 লেখা হচ্ছে ... ত্রুটি!

0x4000280C: 000000A7

এসটি-লিংক ইউটিলিটির যাচাইকরণ ঠিকানায় লিখিত মানটি ঠিকানা থেকে পাঠানো হয় কিনা তা যাচাই করে। এই ক্ষেত্রে, দুটি মান মিলছে না যদিও লেখার ক্রিয়াটি সফল হয়েছিল, যেমন এখন আইএনআইটি বিট সেট হয়েছে।

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

"সংযুক্ত আন্ডার রিসেট" বিকল্পটি কোনও নির্দেশ কার্যকর করার আগে লক্ষ্যটির সাথে সংযোগ স্থাপনের অনুমতি দেয়। এটি লক্ষ্য হিসাবে একটি কোড রয়েছে যা JTAG / SWD পিন অক্ষম করে এমন অনেক ক্ষেত্রে এটি দরকারী।

"হটপ্লাগ" বিকল্পটি থামাতে বা পুনরায় সেট না করে লক্ষ্যটির সাথে সংযোগ করতে দেয়। অ্যাপ্লিকেশন চলাকালীন র‍্যাম ঠিকানাগুলি বা আইপি রেজিস্টারগুলি আপডেট করতে এটি দরকারী

ব্যাচ ফাইলটি যেমনটি চেয়েছিল তেমনভাবে কাজ করে! কমান্ডটি এখন এটির মতো দেখাচ্ছে:

ST-LINK_CLI.exe -c HOTPLUG -w32 <Address> <data> -w32 <Address> <data> ...

1

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.