কোডটি বুটলোডার ব্যবহার করে আপলোড করা হলে কী ঘটে?


13

আমি যখন আমার আরডুইনো ইউনোতে অপটিবুট বুটলোডার ব্যবহার করে একটি নতুন স্কেচ আপলোড করি তখন কী ঘটে?

  • আরডুইনোতে কী পাঠানো হয়?
  • কীভাবে সাড়া দেয়?
  • "সিঙ্ক ইন না মানে" কী?
  • যাইহোক "সিঙ্কে" কী?

দ্রষ্টব্য: এটি একটি "রেফারেন্স প্রশ্ন" হিসাবে উদ্দিষ্ট


খুব আকর্ষণীয় পোস্ট! আরও একটি প্রশ্ন। ক্রমিক যোগাযোগ (চিত্রগুলি) সনাক্ত করতে আপনি কোন সফ্টওয়্যার ব্যবহার করছেন?
জুলিও

এটি সেলিক লজিক ৮ এর মতো লজিক বিশ্লেষকের আউটপুট sale বিক্রয় ae.com খুব সুন্দর একটি ছোট বিশ্লেষক। M 125, 150 এর জন্য 24 মেগাহার্টজ নমুনার হার ব্যবহৃত হত Current বর্তমান ক্যাপচারের গতি 100 এবং 500 মেগাহার্টজ। > এসপিআই, আই 2 সি এবং আরও> বেশিরভাগ ডিজিটাল যোগাযোগ একটি নির্দিষ্ট প্রোটোকল ব্যবহার করে যা তথ্য কীভাবে স্থানান্তরিত হয় তা নির্দিষ্ট করে। লজিক সফ্টওয়্যারটিতে প্রোটোকল বিশ্লেষক রয়েছে যা স্বয়ংক্রিয়ভাবে এসপিআই, আই 2 সি, সিরিয়াল, 1-ওয়্যার, ক্যান, ইউএনআই / ও, আই 2 এস / পিসিএম, এমপি মোড, ম্যানচেস্টার, মোডবাস, ডিএমএক্স -512, সমান্তরাল, জেটিএইচ, লিন, অটমেল এসডব্লিউআই, এমডিআইও, এসডাব্লুডি, এলসিডি এইচডি 44780, বিএসএস সি, এইচডিএলসি, এইচডিএমআই সিইসি, পিএস / 2, ইউএসবি 1.1, মিডি - বা আপনার নিজের তৈরি করুন
ক্রসরোডস

উত্তর:


21

আপনি যখন অপটিবুট লোডার চালিত কোনও ইউএন পুনরায় সেট করেন, বুটলোডার প্রথমে 13 বার তিনবার পিনটি ফ্লাশ করে।

পিন 13 ফ্ল্যাশ করা হচ্ছে

শীর্ষ রেখা (ধূসর) আরডুইনোতে প্রেরণ করা হয়, মাঝের লাইন (কমলা) আরডুইনো থেকে প্রেরণ করা হয়।

এটি হওয়ার সময়, avrdudeআপনার কম্পিউটারে চলমান প্রোগ্রামটি ডিভাইসে একটি কোয়েরি প্রেরণ করছে:

STK_GET_SYNC / CRC_EOP  (0x30/0x20)

আরডুইনো প্রথম "সিঙ্কটি পান" টিপুন না কারণ এটি 13 টি ফ্ল্যাশিং পিনে ব্যস্ত is এটি শেষ হয়ে গেলে এটি "সিঙ্ক পান" (এটি সিরিয়াল হার্ডওয়্যার দ্বারা বিভক্ত হবে) লক্ষ্য করে এবং উত্তর দেয়:

STK_INSYNC / STK_OK (0x14/0x10)

দেখে মনে হচ্ছে অ্যাড়ডুড কিছুটা অধৈর্য হয়ে উঠেছে এবং সময়সীমা শেষ হয়েছে, কারণ এটি "সিঙ্ক পান" ক্যোয়ারী দিয়ে আবার চেষ্টা করে। এবার অপটিবুট সাথে সাথে সাড়া দেয়।


বাকি আপলোডগুলি পরবর্তী ছবিতে বর্ণিত। উদাহরণটি স্টক "ব্লিঙ্ক" প্রোগ্রাম আপলোড করে।

অনুকূল বুট আপলোড প্রক্রিয়া

(একটি বড় সংস্করণ জন্য ছবিটি উপরে ক্লিক করুন)


পদক্ষেপগুলি হ'ল:

  • প্রশ্ন: সিঙ্ক পান? উত্তর: সিঙ্কে
  • প্রশ্ন: প্যারামিটার পাবেন? (প্রধান সংস্করণ) উত্তর: সংস্করণ 4।
  • প্রশ্ন: প্যারামিটার পাবেন? (গৌণ সংস্করণ) উত্তর: সংস্করণ 4।
  • ডিভাইসের পরামিতি সেট করুন। নিম্নলিখিত ডিভাইসের প্যারামিটারগুলি চিপকে প্রেরণ করা হয়েছে:

    0x42  // STK_SET_DEVICE
    0x86  // device code
    0x00  // revision
    0x00  // progtype: “0” – Both Parallel/High-voltage and Serial mode
    0x01  // parmode: “1” – Full parallel interface
    0x01  // polling: “1” – Polling may be used
    0x01  // selftimed: “1” – Self timed
    0x01  // lockbytes: Number of Lock bytes.
    0x03  // fusebytes: Number of Fuse bytes
    0xFF  // flashpollval1
    0xFF  // flashpollval2
    0xFF  // eeprompollval1
    0xFF  // eeprompollval2
    0x00  // pagesizehigh
    0x80  // pagesizelow
    0x04  // eepromsizehigh
    0x00  // eepromsizelow
    0x00  // flashsize4
    0x00  // flashsize3
    0x80  // flashsize2
    0x00  // flashsize1
    0x20  // Sync_CRC_EOP

    অপ্টিবুটগুলি সেগুলিকে অগ্রাহ্য করে এবং সিঙ্ক / ঠিক আছে সহ জবাবগুলি। :)

  • বর্ধিত ডিভাইস প্যারামিটার সেট করুন:

    0x45  // STK_SET_DEVICE_EXT
    0x05  // commandsize: how many bytes follow
    0x04  // eeprompagesize: EEPROM page size in bytes.
    0xD7  // signalpagel: 
    0xC2  // signalbs2: 
    0x00  // ResetDisable: Defines whether a part has RSTDSBL Fuse 
    0x20  // Sync_CRC_EOP

    অপ্টিবুটগুলি সেগুলিকেও উপেক্ষা করে ইন সিঙ্ক / ঠিক আছে এর সাথে উত্তর দেয়।

  • প্রোগ্রাম মোড প্রবেশ করুন। উত্তর: সিঙ্ক / ঠিক আছে।

  • স্বাক্ষর পড়ুন। 0x1E 0x95 0x0F আসলে স্বাক্ষরটি না পড়েই উত্তরগুলি বুট করুন ।

  • ফিউজ (চার বার) লিখুন। Optiboot ফিউজ লিখতে না কিন্তু উত্তর সিঙ্ক / ঠিক আছে।

  • লোড ঠিকানা (শুরুতে 0x0000)। ঠিকানাটি কথায় আছে (অর্থাত্ একটি শব্দ দুটি বাইট) tes এটি যেখানে পরবর্তী পৃষ্ঠায় ডেটা লিখিত হবে তার ঠিকানা নির্ধারণ করে।

  • প্রোগ্রাম পৃষ্ঠা (128 বাইট পর্যন্ত প্রেরণ করা হয়)। অপটিবুট অবিলম্বে "ইন সিঙ্কে" জবাব দেয়। তারপরে প্রায় 4 এমএসের বিরতি রয়েছে যখন এটি পৃষ্ঠাটি প্রোগ্রাম করে। তারপরে এটি "ঠিক আছে" জবাব দেয়।

  • লোড ঠিকানা (এখন 0x0040)। এটি দশমিক address৪ ঠিকানা, অর্থাৎ। প্রোগ্রাম মেমরি শুরু থেকে 128 বাইট।

  • আর একটি পৃষ্ঠা লেখা আছে। সমস্ত পৃষ্ঠা লিখিত না হওয়া অবধি এই ধারাবাহিকতা অব্যাহত থাকে।

  • লোড ঠিকানা (0x0000 এ ফিরে)। এটি লেখার যাচাই করার জন্য।

  • পঠন পৃষ্ঠা (128 বাইট পর্যন্ত পড়া হয়)। এটি যাচাইয়ের জন্য। মনে রাখবেন যে যাচাইকরণ ব্যর্থ হলেও, খারাপ ডেটা ইতিমধ্যে চিপে লেখা হয়েছে।

  • প্রোগ্রামিং মোড ছেড়ে দিন।


"সিঙ্ক ইন না" এর অর্থ কী?

আপনি উপরের দিক থেকে দেখতে পাচ্ছেন, প্রোগ্রামিং সিক্যুয়েন্সের প্রতিটি ধাপে আরডুইনো "ইন সিঙ্ক" (0x14) দিয়ে উত্তর দেবে বলে প্রত্যাশা করা হয়, সম্ভবত কিছু তথ্য পরে "ওকে" (0x10) অনুসরণ করবে।

যদি এটি "সিঙ্কে না থাকে" তবে এর মানে হল যে আর্দুদে "ইন সিঙ্কে" প্রতিক্রিয়া পাননি। সম্ভাব্য কারণগুলি হ'ল:

  • ভুল বাউড রেট ব্যবহৃত হয়েছে
  • আইডিইতে ভুল সিরিয়াল পোর্ট নির্বাচিত
  • আইডিইতে ভুল বোর্ড টাইপ নির্বাচিত
  • কোনও বুটলোডার ইনস্টল করা নেই
  • ভুল বুটলোডার ইনস্টল করা হয়েছে
  • বুটলোডার ব্যবহারের জন্য বোর্ড কনফিগার করা হয়নি (ফিউজে)
  • কিছু ডিভাইস সিরিয়ালি যোগাযোগের ক্ষেত্রে হস্তক্ষেপ করে আরডুইনোতে পিন ডি 0 এবং ডি 1 এ প্লাগ করে
  • ইউএসবি ইন্টারফেস চিপ (এটিমেগ 16 ইউ 2) সঠিকভাবে কাজ করছে না
  • বোর্ডের জন্য ভুল ঘড়ি
  • Atmega328P- এ ভুল ফিউজ সেটিংস (উদাঃ "8 দ্বারা বিভক্ত ঘড়ি")
  • বোর্ড / চিপ ক্ষতিগ্রস্থ হয়েছে
  • ত্রুটিযুক্ত ইউএসবি কেবল (কিছু ইউএসবি কেবল কেবল পাওয়ার সরবরাহ করে এবং ডেটার জন্য নয়, যেমন ইউএসবি অনুরাগীদের জন্য সস্তা কেবল)

"সিঙ্কে" কী?

উপরে উল্লিখিত হিসাবে, প্রতিক্রিয়া "ইন সিঙ্ক" এর অর্থ হল যে আরডুইনো (বুটলোডার) আপলোডিং প্রোগ্রামের সাথে সিঙ্ক্রোনাইজ করা হয়েছে।


কোন প্রোটোকল ব্যবহার করা হচ্ছে?

প্রোটোকল হ'ল এটিএম দ্বারা নথিভুক্ত হিসাবে STK500 প্রোটোকল। নীচে উল্লেখ দেখুন।


তথ্যসূত্র

দ্রষ্টব্য : STK500 সংস্করণ 2 অপটিবুট ব্যবহার করা হয় না, তবে আপনি মেগা 2560 এর মতো বোর্ড ব্যবহার করছেন এমন তথ্যের জন্য এটি অন্তর্ভুক্ত করা হয়েছে।


STK500 ধ্রুবক

/* STK500 constants list, from AVRDUDE */
#define STK_OK              0x10
#define STK_FAILED          0x11  // Not used
#define STK_UNKNOWN         0x12  // Not used
#define STK_NODEVICE        0x13  // Not used
#define STK_INSYNC          0x14  // ' '
#define STK_NOSYNC          0x15  // Not used
#define ADC_CHANNEL_ERROR   0x16  // Not used
#define ADC_MEASURE_OK      0x17  // Not used
#define PWM_CHANNEL_ERROR   0x18  // Not used
#define PWM_ADJUST_OK       0x19  // Not used
#define CRC_EOP             0x20  // 'SPACE'
#define STK_GET_SYNC        0x30  // '0'
#define STK_GET_SIGN_ON     0x31  // '1'
#define STK_SET_PARAMETER   0x40  // '@'
#define STK_GET_PARAMETER   0x41  // 'A'
#define STK_SET_DEVICE      0x42  // 'B'
#define STK_SET_DEVICE_EXT  0x45  // 'E'
#define STK_ENTER_PROGMODE  0x50  // 'P'
#define STK_LEAVE_PROGMODE  0x51  // 'Q'
#define STK_CHIP_ERASE      0x52  // 'R'
#define STK_CHECK_AUTOINC   0x53  // 'S'
#define STK_LOAD_ADDRESS    0x55  // 'U'
#define STK_UNIVERSAL       0x56  // 'V'
#define STK_PROG_FLASH      0x60  // '`'
#define STK_PROG_DATA       0x61  // 'a'
#define STK_PROG_FUSE       0x62  // 'b'
#define STK_PROG_LOCK       0x63  // 'c'
#define STK_PROG_PAGE       0x64  // 'd'
#define STK_PROG_FUSE_EXT   0x65  // 'e'
#define STK_READ_FLASH      0x70  // 'p'
#define STK_READ_DATA       0x71  // 'q'
#define STK_READ_FUSE       0x72  // 'r'
#define STK_READ_LOCK       0x73  // 's'
#define STK_READ_PAGE       0x74  // 't'
#define STK_READ_SIGN       0x75  // 'u'
#define STK_READ_OSCCAL     0x76  // 'v'
#define STK_READ_FUSE_EXT   0x77  // 'w'
#define STK_READ_OSCCAL_EXT 0x78  // 'x'


1
ভাল যুক্তি! আমি উত্তরে কয়েকটি রেফারেন্স যুক্ত করেছি। ধন্যবাদ।
নিক গ্যামন

মনে রাখবেন যে এখানে বর্ণিত যাচাইকরণ প্রক্রিয়াটি বিশেষত একটি পঠিত পঠন ব্যবহার করে, যার অর্থ যে কোনও বুটলোডার avrdudeডিফল্ট যাচাইকরণ আচরণ সমর্থন করে কোনও বুটলোডার যা ফ্ল্যাশ সামগ্রীগুলি পড়তে সমর্থন করে।
ক্রিস স্ট্রাটন

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