আই 2 সি ইপ্রোম বিট-ব্যাংিং: জরিমানা লিখেছেন, তবে প্রথম বিট সেট না করা থাকলেই


9

আমি বর্তমানে এসডিএ এবং এসসিএল লাইনগুলি চালনার জন্য বিট-ব্যাং ব্যবহার করে একটি আই 2 সি ইপ্রোম প্রকল্পে কাজ করছি।

আমার পঠন ফাংশনটি দুর্দান্ত কাজ করে তবে যখনই আমি কোনও শীর্ষস্থানীয় "1" দিয়ে কোনও বাইট লিখি, আমি সর্বদা এফএফ পিছনে পড়ে থাকি; এমনকি বাইটের আগে অন্য কিছু দিয়ে প্রোগ্রাম করা হয়েছিল। শীর্ষস্থানীয় "0" নিখুঁত। এটা আমার পড়ার রুটিন নয়; যেহেতু আমি এফএফটি ফেরার সুযোগটি দেখতে পাচ্ছি।

কেন এটি হতে পারে সে সম্পর্কে আমি পরামর্শ চাইছি। এমন কোনও স্পষ্টতা কি আমি মিস করতে পারি যা সমস্যার কারণ হতে পারে? [আমি কোডটি পোস্ট করতে পারি না - সংস্থাটি গোপনীয় ... :(]

আমি যে তরঙ্গরূপটি দেখি সেগুলি নির্দিষ্টভাবে মিলিত হয়। আমি ইপ্রোমকে ডিকপল করছি। আমার টান আপগুলি 2.2 কে তাই অনুমানের মধ্যে। আমি এই প্রোটোটাইপে প্রায় 500 হার্জেড এ ক্লক করছি। চিপটি আমার প্রতিটি বাইটে ACKs প্রেরণ করছে যাতে এটি তাদের চিনতে পারে। তবে এটি ঠিক কাজ করে না ...

আমি একটি মাইক্রোচিপ 24LC256 ব্যবহার করছি ।

এক বাইটের জন্য সরলীকৃত লেখার অ্যালগরিদম:

wait
SDA low
SCL low
wait
for each bit
    if bit is set:   SDA high
    if bit is unset: SDA low
    wait
    SCL high
    wait
    wait
    SCL low
    wait
wait
SDA high 
SCL high
wait
wait
check ACK status
SDA low
SCL low
wait
return ACK status

এক বাইট জন্য সরল পাঠ্য অ্যালগরিদম:

wait
SCL low
SDA high
for each bit (8 bits)
    SCL high
    wait
    wait
    SCL low
    wait
    check and store received bit
    wait
do a NACK or ACK depending on if it is the last byte

1
@ জাস্টিন - আমি মনে করি তিনি বলছেন যে কোনও ঠিকানায় 0x7F মান লেখা কাজ করে তবে কোনও ঠিকানায় 0x80 লেখা কার্যকর হয় না।
রকেটম্যাগনেট

1
এটি এমন জিনিস যা আমাকে আই 2 সি ঘৃণা করে।
রকেটম্যাগনেট

1
আমি একটি পাগল কুঁচি পেয়েছি। আপনার প্রতিটি বিট কোডের জন্য, আপনি কি অবিচ্ছিন্নভাবে শিফট ডান ক্রিয়াকলাপ দিয়ে সাইন-প্রসারিত করছেন? আপনি যদি হন তবে আপনার শীর্ষস্থানীয় একজন আপনাকে শেষ পর্যন্ত 7 শিফট অপারেশনের পরে 0xFF দিয়ে চলে যাবে।
ভিসাতচু

3
বিদ্রূপ, এখানে, "সংস্থা গোপনীয়" কোড। এটি তাদের কাছে মূল্যবান। এখানে প্রত্যেকেই কোডটি ভাগ করে দেয় যা কাজ করে। এই সংস্থার কোডটি অন্যদের থেকে পৃথক করে কী তা কার্যকর করে না।
gbarry

2
কোনও সংস্থাকে এতটা মরিয়া হয়ে কেন কিছু আই 2 সি বিট বিং কোডিং গোপনীয় রাখা উচিত তা কল্পনা করা শক্ত। ইন্টারনেটে এর অনেক কিছুই রয়েছে much
রকেটম্যাগনেট

উত্তর:


4

আপনি আবার ঘড়ি কম পরে ডেটা পড়ছেন। ঘড়িটি উচ্চতর করা এবং এটি কম করার মধ্যে আপনাকে এটি করতে হবে। ঘড়ি কম হওয়ার পরে দাসকে ডেটা লাইন পরিবর্তন করার অনুমতি দেওয়া হয়, এটি বেশি নয়।

এখানে চিত্র বর্ণনা লিখুন

সুতরাং পড়া এই মত হওয়া উচিত:

wait
SCL low
SDA high
for each bit (8 bits)
    SCL high                      <--------
    wait
    check and store received bit  <--------
    wait
    SCL low                       <--------
    wait
    wait
do a NACK or ACK depending on if it is the last byte

এটা একটা ভাল দিক; আমি এটা ঠিক করব। যাইহোক, আমার ডেটা এখনও আমার স্কোপে সর্বজনীন (এফএফ) হিসাবে দেখায় যাতে আমার পড়ার সমস্যা হতে পারে না ... :(
থমাস ও

3

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


খুশি হয়ে আপনি এটি "লেখার সময় যাচাই করে" সমাধান করেছেন

3
আমি আপনাকে বলেছিলাম যে ওয়েভফর্মটি দেখে এটি সমাধান হবে।
রকেটম্যাগনেট

পছন্দ করেছেন
টমাস ও

হ্যাঁ, কিন্তু তুমি কি দেখিয়েছিলেন আমাদের তরঙ্গাকৃতি থাকা সত্ত্বেও আমাদের বারবার এটা করার জন্য আপনাকে জিজ্ঞাসা করছিলেন। কিছুদিন আগে আপনি এই সমস্যার সমাধান করতে পারতেন।
রকেটম্যাগনেট

@ রকেট - আমি সম্মত আমি আশা করি আমার কাছে তখন একটি ক্যামেরা পাওয়া যেত। আমি যে টেক ডিপিও ব্যবহার করছিলাম তার একটি ফ্লপি ড্রাইভ ছিল কিন্তু কোনও ফ্লপি নেই। আমি যদি একটি ছবি পোস্ট করতে পারি।
থমাস হে

2

ঠিক আছে আপনার সুযোগটি প্রমাণ করে যে পিকটিতে আসা 1 ম বাইটটি খারাপ কারণ এটি পিআইসি পড়ার ফাংশন নয়।

আপনি লেখার সময় গ্রহণের শেষে ঠিক আছে যাচাই করেছেন?

এটি নীচে উভয় মোডে ব্যর্থ হয়?

- Byte mode sequential
- Page mode Sequential

অনুমান প্রদর্শন করে "দ্য মোস্ট সিগনি fi ক্যান্ট বিট (এমএসবি) 'বি fi' প্রেরিত হয় প্রথম" বি7 = 1 যখন পুরো বাইটটি এফএফ হিসাবে আবার পড়তে হয় তখন এটিও কাকতালীয়। সুতরাং হয় হয় লিখিত হয় না এবং কেবল মুছে ফেলা হয় (দোষের শর্ত) যখন বি 7 = 1 হয়, বা এটি পূর্ববর্তী বিষয়বস্তু নির্বিশেষে এফএফ হিসাবে খারাপ পাঠ করে। যেহেতু প্রতিটি লেখাই লেখার আগে বাইট প্রশস্ত মুছে ফেলা হয়, তবুও এটি কোনও খারাপ লেখা হতে পারে বা খারাপ পড়া বা 1 ম বাইটের সময় ভিন্ন হতে পারে।

পরামর্শ: স্বাভাবিক ক্রিয়াকলাপ নিশ্চিত করতে একটি লিখন / পড়ার সময় পিটিসি সিগন্যালটি যাচাই করুন। এখানে চিত্র বর্ণনা লিখুন

পিটিসি ব্যবহার করে ই / ডাব্লু চক্রের দৈর্ঘ্যের সময় জন্য বাহ্যিক ঘড়ি ব্যবহার করার বিকল্প রয়েছে। আপনি কি এটি ব্যবহার করার চেষ্টা করেছেন?

tE / W চক্র সময়

  • অভ্যন্তরীণ দোলক 7ms টাইপ
  • বাহ্যিক ঘড়ি 4 ~ 10 এমএস মিনিট। সর্বাধিক

এটি কি এই মানদণ্ডটি পাস করে?


1

মনে হচ্ছে এটি কয়েকটি জিনিস হতে পারে:

  1. বাসে আর কি আছে? রিসেটে বা অনির্দিষ্টকৃত করা হচ্ছে এমন কোনও ডিভাইসের সাথে কি বাসের লড়াই হতে পারে?
  2. আপনি কি সঠিকভাবে I / O পিনের দিক পরিবর্তন করছেন? যদি এটি আউটপুট ক্ষেত্রে ঠিকঠাক কাজ করে, আপনি অজান্তে পিনের দিকটি ইনপুটটিতে পরিবর্তন করতে ভুলে যেতে পারেন এবং সর্বদা পড়তে পারবেন 0xFF। আপনি যখন এটি পড়তে পিনটি বাস চালনা করে আউটপুট হিসাবে ছেড়ে যেতে পারে।
  3. পিন নিজেই এবং / অথবা আই / ও লাইনগুলিতে আপনার অভ্যন্তরীণ টান আছে? মাইক্রোকন্ট্রোলাররা সাধারণত একটি নির্দিষ্ট মান না দিয়ে প্রতিরোধের একটি পরিসীমা দেয়। আপনি মাইক্রোতে থাকা পুল-আপগুলি অক্ষম করতে এবং বাসে পৃথক পৃথকগুলি ব্যবহার করতে পারেন কারণ আপনি বিচ্ছিন্ন উপাদানগুলির থেকে আরও সুনির্দিষ্ট পুল-আপ প্রতিরোধ পেতে পারেন।
  4. ঘড়ির মেরুতা - আপনি কি নিশ্চিত যে আপনি ঘড়ি / উপাত্তের মধ্যে ডান প্রান্ত / পর্যায়ে মাপছেন? সুযোগটিতে আপনার কাছে দুর্দান্ত যা দেখায় তা আপনি আটকে রাখতে পারেন, তবে এই পর্বটি যদি আপনার EEPROM এর বাইরে না থাকে তবে এটি দেখতে পাবেন 0xFF(এবং সম্ভবত এটি একটি অবৈধ আদেশ / শর্ত হিসাবে সম্ভবত ফিরে আসবে)।

1. শুধু EEPROM এবং MCU। ২. হ্যাঁ, আমি বিশ্বাস করি যে আমিই আছি, কারণ ইপ্রোম এসডিএ / এসসিএলকে ধরে রাখতে সক্ষম। ৩. EEPROM সংলগ্ন বোর্ডে 2.2k 5% পুল আপ রয়েছে।
থমাস

# 2 এর জন্য, আপনি কি নিশ্চিত যে EEPROM হ'ল বাসটি নীচে holding EEPROM এর ডেটাশিটে কোনও শর্ত আছে যেখানে এটি সমস্ত ফিরিয়ে দেবে 0xFF? আমার সম্পাদনাগুলি উপরেও দেখুন।
জোয়েল বি

# 4। EEPROM "ACK" আমার অনুরোধগুলি যুক্ত করছে এবং কিছু শব্দের সাথে কাজ করে, তবে সব কিছুই নয়।
থমাস

0

আমি এটিকে উপরের মন্তব্য হিসাবে জমা দিয়েছি, তবে উত্তরের প্রতি আমার আত্মবিশ্বাস চুপচাপ আমার মনের গভীর অবসন্নতায় বৃদ্ধি পেয়েছে তাই আমি এটিকে উত্তরে প্রচার করছি।

আমি একটি ক্রেজি কুঁচকে পেয়েছি যে এটি প্রায় অবশ্যই কিছু ভেরিয়েবলের স্বাক্ষর সম্পর্কিত একটি নিম্ন স্তরের সফ্টওয়্যার বাগ। আপনার প্রতিটি বিট কোডের জন্য, আপনি কি অবিচ্ছিন্নভাবে শিফট ডান ক্রিয়াকলাপ দিয়ে সাইন-প্রসারিত করছেন? আপনি যদি হন তবে আপনার শীর্ষস্থানীয় একজন আপনাকে শেষ পর্যন্ত 7 শিফট অপারেশনের পরে 0xFF দিয়ে চলে যাবে।

স্টিভেন একটি মন্তব্যে এটিকে ইঙ্গিত করেছেন, তবে আপনি কি কোনও অসিলোস্কোপে আপনার লেখার ক্রিয়াকলাপের পবিত্রতা প্রত্যক্ষ করেছেন, বা আপনি কি কেবলমাত্র অনুমান করেন যে তারা অর্ধেক পঠনের পিছনে ভাল দেখাচ্ছে? আপনি যদি 0xAA মানটির লেখার কাজটি দেখার চেষ্টা না করেন, তবে এটি চেষ্টা করা ভাল জিনিস হতে পারে।

আপনি যদি আপনার অভ্যন্তরীণ লুপ এবং সম্পর্কিত ভেরিয়েবলের ঘোষণাপত্রের আসল কোড সরবরাহ করতে পারেন তবে আমরা একটি বাগ চিহ্নিত করতে সক্ষম হতে পারি।


আমার লেখাগুলি ভাল; আমি এই সুযোগে দেখতে পাচ্ছি। আর একটি অদ্ভুততা: শীর্ষস্থানীয় এমএসবি সহ ঠিকানাগুলি ঠিক আছে। শুধুমাত্র তথ্য সমস্যার কারণ! আমি শীঘ্রই কোড পোস্ট করার বিষয়ে চিন্তা করি।
টমাস হে

1
এই উত্তরের সমর্থনে: এটি যদি সি কোড হয় তবে সমস্ত 'চর' ঘোষণাটি 'স্বাক্ষরবিহীন চর' তে পরিবর্তন করুন এবং আবার চেষ্টা করুন।
ওয়াউটার ভ্যান ওইজেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.