আমি একটি বাস পাইরেট থেকে বুদ্ধিমান বিটগুলি পাওয়ার জন্য চেষ্টা করছি একটি লঞ্চপ্যাড বোর্ডের দিকে ঝুঁকে পড়ে ...)। আমার কাছে সিএস হুক আপ নেই, যেহেতু আমি কেবল পাইরেট ব্যবহার করছি কিছু নিরীক্ষণের জন্য।
বাস পাইরেট এসপিআই, 125KHz, ক্লক পোলারিটি আইডল লো, আউটপুট ক্লক এজটি অ্যাক্টিভেট, ইনপুট স্যাম্পল ফেজ মিডিল, / সিএস, আউটপুট স্বাভাবিক রয়েছে output
লঞ্চপ্যাডে, আমার কাছে একটি এমএসপি ৪৩০ জি ২২২১ রয়েছে যাতে কোনও বাহ্যিক স্ফটিক নেই। কোড সুরকার স্টুডিও ব্যবহার করে, আমার কাছে নিম্নলিখিতগুলি রয়েছে:
#include "msp430g2231.h"
volatile unsigned char value=0;
#pragma vector=USI_VECTOR
__interrupt void universal_serial_interface(void)
{
value+=1;
USISRL=value;
USICNT=8;
}
void main(void){
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ;
BCSCTL2 &= ~(DIVS_3);
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE;
USICTL1 |= USIIE;
USICKCTL = USIDIV_3 + USISSEL_2;
USICTL0 &= ~USISWRST;
USISRL=value;
USICNT = 8;
__bis_SR_register(LPM0_bits+ GIE);
}
এর বেশিরভাগটি বিভিন্ন নমুনা থেকে একসাথে আবদ্ধ। ডেটা শীটটি অনেক পড়ার পরে, দেখে মনে হচ্ছে যে ইউএসআই ঘড়িটি 125KHz (1MHz এর এসএমসিএলকে, 8 দ্বারা বিভক্ত) এ চালানো হবে, যদিও আমার এটি পরিমাপ করার সুযোগ নেই।
দৌড়ানোর সময়, বাস পাইরেট থেকে মূলত আবর্জনা যা আছে তা পেয়েছি। পি ইউএসআই বিঘ্নিত ভেক্টরের প্রথম লাইনে একটি ব্রেকপয়েন্ট রেখেছিল, এবং এটিটি তিনবার পেরিয়েছিল, তাই বাসের জলদস্যু থেকে আমার 0, 1, 2 পাওয়া উচিত ছিল
0x00(0x00)0x00(0x00)][0x40(0x00)]
এবং এটিকে বিনামূল্যে চালাতে দেওয়া, আমি কেবল এই জাতীয় জিনিস পাই:
[0xFF(0x00)][0x3F(0x00)][0x7F(0x00)][0xBF(0x00)][0xC0(0x00)0x00(0x00)][0x40(0x00)0x80(0x00)]
যা এখনও আমি প্রত্যাশা করছি তার মতো কিছুই দেখায় না।
আমি সন্ধ্যার বেশিরভাগ সময় চিপের জন্য ব্যবহারকারীদের গাইডের মধ্য দিয়ে কাটিয়েছি এবং আমি এখনও স্টাম্পড আছি।
এটি লেখার সময়, আমি আবিষ্কার করেছি যে আমি বাস পাইরেটকে একটি লজিক বিশ্লেষক (লজিকস্নিফার ব্যবহার করে) হিসাবে ব্যবহার করতে পারি এবং এটি করার জন্য এটি সেট আপ করতে পারি। আর প্রোগ্রাম 0x55 লিখতে পরিবর্তিত USISRL
, এবং পরিবর্তন USIDIV
করার জন্য USIDIV_4
একটি বিট আরো মন্দীভূত জিনিস, এবং এখানে ফলাফল আছে:
ঘড়ির সংকেতটি দেখতে দুর্দান্ত লাগছে, লজিকস্পাইফার জানিয়েছে যে এটি প্রায় 285KHz ... এবং মোশি ... বিশেষ। আমি একটি সুন্দর বিকল্প প্যাটার্ন আশা করব, যেহেতু আমি 0x55 লিখছি, এবং এটি কিছু নয়।
আমি ভুল করছি বলে কারও কি কোন চিন্তা আছে? ত্রুটিযুক্ত চিপ? অন্যকিছু?
সম্পাদনা: ঠিক আছে, আমার পক্ষ থেকে অল্প পরিমাণে বুদ্ধিমান। ইন্টারপেটে এসপিআইতে লেখা মানটি আমি পরিবর্তন করি নি। প্রত্যাশিত প্যাটার্নে এই ফলাফলগুলি করা:
যাইহোক, বর্ধিত বাইট লেখার চেষ্টা করতে ফিরে যাওয়া আমার আবর্জনা পেয়ে যায়:
সুতরাং, আমার এখনও একটি সমস্যা রয়েছে, আমি যতটা ভেবেছিলাম তার চেয়ে বড় নয় ...
সম্পাদনা 2: নীচের মন্তব্যের জন্য ধন্যবাদ, আমি বাস পাইরেট কেবলটি বন্ধ করে দিয়েছিলাম, যা পূর্বে সংযুক্ত ছিল না, আমার বিদ্যুৎ সরবরাহ বন্ধ করে দিয়েছিল (স্পার্কফুনের ব্রেডবোর্ড বিদ্যুৎ সরবরাহ)। পূর্বে, তারা ভাগ করে নেওয়া নিকটতম স্থলটি ইউএসবি হাবটিতে ছিল আমি এই সমস্ত সরঞ্জাম বন্ধ করে দিচ্ছি।
এটি কাউন্টার প্রোগ্রাম চলাকালীন এমওএসআই-তে থাকা বিচলনাকে সরিয়ে ফেলেছে এবং লজিকস্নিফার এখন নিজেরাই বাইটগুলি সঠিকভাবে ডিকোড করতে পারে:
মনিটরের মোডে থাকা বাস জলদস্যু এখনও বিজোড় ফলাফলের প্রতিবেদন করে:
[0x00(0x00)][0x04(0x00)][0x06(0x00)][0x10(0x00)][0x10(0x00)][0x10(0x00)][0x12(0x00)][0x18(0x00)]
এটি লেখার প্রান্তটি সনাক্ত করতে আরও ভাল সক্ষম বলে মনে হচ্ছে (আমি বোধন করছি বর্গাকার বন্ধনীগুলি এটিই সীমাবদ্ধ করে তোলে) তবে ডেটা ডিকোডগুলি এখনও বন্ধ রয়েছে। তরঙ্গরূপটি আরও ভাল দেখাচ্ছে বলে আমি এখন তেমন উদ্বিগ্ন নই, তবে বাস পাইরেট কেন বিভ্রান্ত হচ্ছে তা জানতে পেরে ভাল লাগবে।
while(1);
এটিকে বেরিয়ে আসা এবং এলোমেলো জিনিস করা বন্ধ করতে আমি প্রধান () এর শেষে একটি বা সমমান দেখতে পাচ্ছি না ।