সিরিয়াল যোগাযোগ কীভাবে আরডুইনোতে কাজ করে?


16

আরডুইনো ইউনো, মেগা 2560, লিওনার্দো এবং অনুরূপ বোর্ডগুলির প্রসঙ্গে:

  • সিরিয়াল যোগাযোগ কীভাবে কাজ করে?
  • সিরিয়াল কত দ্রুত?
  • আমি কীভাবে প্রেরক এবং গ্রহণকারীর মধ্যে সংযোগ করব?

দয়া করে নোট করুন: এটি একটি রেফারেন্স প্রশ্ন হিসাবে তৈরি।


দুজনের মধ্যে কেবল একটি নিয়মিত ইউএসবি প্রোগ্রামিং কেবল ব্যবহার করে পাইথন ডেটা লগার চালাচ্ছে রাস্পিয়ান সিস্টেমের সাথে সংযুক্ত ন্যানোর দু'পাশে বাফার সম্পর্কে আপনি এই আকর্ষণীয়টি খুঁজে পেতে পারেন: আরডুইনো.স্ট্যাকেক্সচেঞ্জ
সেকশনস

উত্তর:


16

অ্যাসিঙ্ক্রোনাস সিরিয়াল (সাধারণত সিরিয়াল হিসাবে পরিচিত) যোগাযোগগুলি এক ডিভাইস থেকে অন্য ডিভাইসে বাইট প্রেরণে ব্যবহৃত হয়। একটি ডিভাইস নিম্নলিখিত এক বা একাধিক হতে পারে:

  • যাও Arduino
  • পিসি
  • জিপিএস
  • আরএফআইডি কার্ড রিডার
  • LCD প্রদর্শন
  • মডেম
  • অন্যান্য

ঘড়ির হার এবং ডেটা নমুনা

এসপিআই / ইউএসবি / আই 2 সি এর বিপরীতে সিরিয়াল যোগাযোগগুলির একটি ক্লক সংকেত নেই। স্যাম্পলিং ঘড়িটি সম্মত নমুনা হার (বাউড রেট হিসাবে পরিচিত) is প্রেরক এবং প্রাপক উভয়ই একই হার ব্যবহার করার জন্য কনফিগার করতে হবে বা প্রাপক অর্থহীন ডেটা গ্রহণ করবে (বিটগুলি যেভাবে প্রেরণ করা হয়েছিল তার একই হারে নমুনা না দেওয়ার কারণে)।

সংক্রমণটি অ্যাসিনক্রোনাস যার মূলত অর্থ বাইটগুলি যে কোনও সময় পাঠানো যেতে পারে যার মধ্যে বিভিন্ন ব্যবধান রয়েছে। এই গ্রাফিকটি একটি একক বাইট প্রেরণের চিত্রিত করে:

সিরিয়াল কমস - একটি বাইট প্রেরণ

উপরের গ্রাফিকটিতে 'F' বর্ণটি প্রেরণ করা দেখানো হয়েছে। ASCII এ 0x46 (হেক্সে) বা 0b01000110 (বাইনারি)। অন্তত উল্লেখযোগ্য (কম-অর্ডার) বিট প্রথম প্রেরণ করা হয়, এইভাবে উপরে গ্রাফিক আপনি বিট অর্ডার আসার দেখুন: 01100010

বাইটগুলির মধ্যে "অলস" সময়টি অবিচ্ছিন্ন "1" বিট হিসাবে প্রেরণ করা হয় (কার্যকরভাবে, সংক্রমণ রেখাটি অবিচ্ছিন্নভাবে ধরে থাকে)।

বাইটের সূচনাটি নির্দেশ করতে, স্টার্ট বিটটি সর্বদা গ্রাফিকের মতো দেখানো রেখাটি কম টেনে ইঙ্গিত করা হয়। প্রাপক একবার প্রারম্ভিক বিটটি দেখতে পান, এটি নমুনার সময় থেকে 1.5 গুণ অপেক্ষা করে এবং তারপরে ডেটা বিটের নমুনা দেয়। এটি 1.5 বার অপেক্ষা করে যাতে এটি:

  • শুরু বিট এড়িয়ে যায়
  • নমুনা পরবর্তী বিট মাধ্যমে অর্ধেক

উদাহরণস্বরূপ, যদি 1/9600 = 0.00010416বাউডের হার 9600 বাউড হয় তবে নমুনার হারটি সেকেন্ড (104.16 µ সে) হবে।

সুতরাং, 9600 বাডে, স্টার্ট বিট পাওয়ার পরে রিসিভারটি 156.25 ডিগ্রি অপেক্ষা করে এবং তারপরে প্রতি 104.16 ডিগ্রি স্যাম্পল করে samples

বিট টাইমিং শুরু করুন

স্টপ বিটের উদ্দেশ্য হ'ল প্রতিটি বাইটের মধ্যে অবশ্যই 1 বিট রয়েছে তা নিশ্চিত করা। স্টপ বিট ব্যতীত, যদি কোনও বাইট শূন্যে শেষ হয়, তবে হার্ডওয়্যারটির পক্ষে পরবর্তী বাইটের আর বিটটির মধ্যকার পার্থক্যটি বলা অসম্ভব।

ইউনোতে উপরের আউটপুট উত্পাদন করতে আপনি এই কোডটি লিখতে পারেন:

void setup()
  {
      Serial.begin(9600);
      Serial.print("F");
  }

void loop ()
  {
  }

ডেটা বিটের সংখ্যা

সঞ্চালনের সময় বাঁচানোর জন্য (পুরানো দিনগুলিতে, হি) আপনাকে বিভিন্ন সংখ্যক ডেটা বিট নির্দিষ্ট করার অনুমতি দেওয়া হয়েছিল। এটিমেগা হার্ডওয়ারটি 5 থেকে 9 পর্যন্ত সংখ্যক ডেটা বিটকে সমর্থন করে Clear


সমতা বিট

আপনি বিকল্পভাবে একটি সমতা বিট করতে পারেন। চরিত্রের মধ্যে 1 এর সংখ্যা গণনা করে এটি গণনা করা হয়, এবং তারপরে এই সংখ্যাটি বিজোড় হয় কিনা তা নিশ্চিত করে বা প্রয়োজনীয়তার সাথে সামঞ্জস্য বিট 0 বা 1 এ সেট করেও।

উদাহরণস্বরূপ, "F" (বা 0x46 বা 0b01000110) চিঠির জন্য আপনি দেখতে পাচ্ছেন যে সেখানে 3 টি রয়েছে (01000110 এ)। সুতরাং আমরা ইতিমধ্যে বিজোড় সমতা আছে। সুতরাং, সমতা বিট নিম্নলিখিত হিসাবে হবে:

  • সমতা নেই: বাদ দেওয়া হয়েছে
  • এমনকি সমতা: একটি 1 (3 + 1 সমান)
  • বিজোড় সমতা: একটি 0 (3 + 0 বিজোড়)

প্যারিটি বিট, উপস্থিত থাকলে শেষ তথ্য বিটের পরে তবে স্টপ বিটের আগে উপস্থিত হয় appears

যদি প্রাপক সঠিক প্যারিটি বিট না পান তবে এটিকে "প্যারিটি ত্রুটি" বলা হয়। এটি ইঙ্গিত দেয় যে কিছু সমস্যা আছে। সম্ভবত প্রেরক এবং রিসিভার বিভিন্ন বাউড (বিট) হারগুলি ব্যবহার করার জন্য কনফিগার করা হয়েছে, বা লাইনে কোনও শব্দ ছিল যা শূন্যকে এক বা তদ্বিপরীত করে।

কিছু প্রাথমিক সিস্টেমগুলি "চিহ্ন" সমতা ব্যবহার করেছিল (যেখানে প্যারিটি বিট ডেটা নির্বিশেষে সর্বদা 1 ছিল), বা "স্পেস" প্যারিটি (যেখানে প্যারিটি বিট ডেটা নির্বিশেষে সর্বদা 0 ছিল)।


9-বিট সংক্রমণ

কিছু যোগাযোগ সরঞ্জাম 9-বিট ডেটা ব্যবহার করে, তাই এই ক্ষেত্রে প্যারিটি বিটটি 9 তম বিটে পরিণত হয়। এই 9 তম বিটটি প্রেরণের জন্য বিশেষ কৌশল রয়েছে (নিবন্ধগুলি 8-বিট রেজিস্টার তাই 9 ম বিটটি অন্য কোথাও স্থাপন করতে হবে)।


স্টপ বিটের সংখ্যা

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

স্টিপ বিট হওয়ার কথা যখন রিসিভারটি লজিক্যাল 1 না পায় তবে এটিকে "ফ্রেমিং ত্রুটি" বলা হয়। এটি ইঙ্গিত দেয় যে কিছু সমস্যা আছে। বেশ সম্ভবত প্রেরক এবং রিসিভার বিভিন্ন বাউড (বিট) হারগুলি ব্যবহার করতে কনফিগার করা হয়েছে।


স্বরলিপি

সাধারণত, সিরিয়াল যোগাযোগ আপনাকে গতি, ডেটা বিটের সংখ্যা, সমমানের ধরণ এবং স্টপ বিটের সংখ্যার মতো এই বলে বোঝানো হয়:

9600/8-N-1

এটি আমাদের বলছে:

  • প্রতি সেকেন্ডে 9600 বিট
  • 8 তথ্য বিট
  • সমতা নেই (পরিবর্তে আপনি দেখতে পাবেন: E = সম, ও = বিজোড়)
  • 1 স্টপ বিট

এটি গুরুত্বপূর্ণ যে প্রেরক এবং প্রাপক উপরোক্ত বিষয়ে একমত হন, অন্যথায় যোগাযোগ সফল হওয়ার সম্ভাবনা কম।


পিন আউট

আরডুইনো ইউনোতে হার্ডওয়্যার সিরিয়ালের জন্য ডিজিটাল পিন 0 এবং 1 উপলব্ধ রয়েছে:

আরডুইনো ইউনো সিরিয়াল পিনগুলি

দুটি আরডুইনোর সাথে সংযোগ স্থাপনের জন্য আপনি টিএক্স এবং আরএক্সকে এভাবে স্যুপ করে যান :

দুটি আরডুইনো একসাথে সংযুক্ত করা হচ্ছে


গতি

গতির বিস্তৃত পরিসর সমর্থিত (নীচে গ্রাফিক দেখুন)। "স্ট্যান্ডার্ড" গতি সাধারণত 300 বাউডের একাধিক (যেমন 300/600/1200/2400 ইত্যাদি)।

অন্যান্য "অ-মানক" গতি যথাযথ রেজিস্টারগুলি সেট করে পরিচালনা করা যায়। হার্ডওয়্যারশিয়াল বর্গটি আপনার জন্য এটি করে। যেমন।

Serial.begin (115200);  // set speed to 115200 baud

থাম্বের নিয়ম হিসাবে, ধরে নিয়ে আপনি 8-বিট ডেটা ব্যবহার করছেন, তবে আপনি বাড রেট 10 দ্বারা বিভক্ত করে প্রতি সেকেন্ডে যে বাইটগুলি প্রেরণ করতে পারবেন তা অনুমান করতে পারেন (স্টার্ট বিট এবং স্টপ বিটের কারণে)।

সুতরাং, 9600 বাউডে আপনি 9600 / 10 = 960প্রতি সেকেন্ডে 960 বাইট ( ) সঞ্চার করতে পারেন ।


বাড রেট ত্রুটি

আতমেগায় বাড রেট সিস্টেম ক্লকটি ভাগ করে এবং তারপরে একটি প্রাক-সেট সংখ্যা পর্যন্ত গণনা করে উত্পন্ন হয়। ডেটাশিটের এই টেবিলটি 16 মেগাহার্টজ ঘড়ির জন্য (যেমন আরডুইনো ইউনিোর একটি হিসাবে) নিবন্ধকের মানগুলি এবং ত্রুটির শতাংশ দেখায়।

বাড রেট ত্রুটি

ইউ 2 এক্সএন বিটটি ক্লক রেট বিভাজনকে প্রভাবিত করে (0 = 16 দ্বারা ভাগ করে, 1 = 8 দিয়ে ভাগ)। ইউবিআরআরএন রেজিস্ট্রারে প্রসেসর পর্যন্ত গণনা করা সংখ্যা রয়েছে।

সুতরাং উপরের টেবিল থেকে আমরা দেখতে পাচ্ছি যে আমরা 16 মেগাহার্টজ ঘড়ি থেকে নীচে 9600 বাউড পেয়েছি:

16000000 / 16 / 104 = 9615

আমরা 104 দ্বারা বিভক্ত করি এবং 103 দ্বারা নয় কারণ কাউন্টারটি শূন্য-আপেক্ষিক। সুতরাং এখানে ত্রুটিটি 15 / 9600 = 0.0016যা উপরের টেবিলের (0.02%) যা বলেছে তার নিকটবর্তী।

আপনি লক্ষ্য করবেন যে কিছু বাডের হারের তুলনায় অন্যদের চেয়ে বেশি ত্রুটির পরিমাণ থাকে।

ডাটাশিট অনুসারে 8 টি ডাটা বিটের সর্বোচ্চ ত্রুটি শতাংশ 1.5% থেকে 2.0% এর মধ্যে রয়েছে (আরও তথ্যের জন্য ডেটাশিটটি দেখুন)।


আরডুইনো লিওনার্দো

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

এ কারণে, আপনাকে সিরিয়ালটি "প্রস্তুত" হয়ে ওঠার অপেক্ষায় থাকতে হবে (সফ্টওয়্যারটি যেমন একটি ইউএসবি সংযোগ স্থাপন করে), এর সাথে অতিরিক্ত কয়েকটি লাইন যুক্ত করে:

void setup()
  {
      Serial.begin(115200);
      while (!Serial)
      {}  // wait for Serial comms to become ready
      Serial.print("Fab");
  }

void loop ()
  {
  }

তবে, আপনি যদি পিন ডি 0 এবং ডি 1 এর মাধ্যমে আসলে (ইউএসবি কেবল ব্যবহার করে) যোগাযোগ করতে চান তবে আপনার সিরিয়াল পরিবর্তে সিরিয়াল 1 ব্যবহার করা দরকার। আপনি এটি এরকম করুন:

void setup()
  {
      Serial1.begin(115200);
      Serial1.print("Fab");
  }

void loop ()
  {
  }

ভোল্টেজ স্তর

নোট করুন যে আরডুইনো সিরিয়াল যোগাযোগের জন্য টিটিএল স্তর ব্যবহার করে। এর অর্থ এটি প্রত্যাশা করে:

  • একটি "শূন্য" বিট 0 ভি
  • একটি "এক" বিট হ'ল + 5 ভি

পিসির সিরিয়াল পোর্টে প্লাগ করার জন্য ডিজাইন করা পুরানো সিরিয়াল সরঞ্জামগুলি সম্ভবত আরএস 232 ভোল্টেজ স্তর ব্যবহার করে, যথা:

  • একটি "শূন্য" বিট +3 থেকে +15 ভোল্ট
  • একটি "এক" বিট −3 থেকে −15 ভোল্ট

টিটিএল স্তরের ক্ষেত্রে এটি কেবল "উল্টানো" নয় (একটি "এক" একটি "শূন্য" এর চেয়ে বেশি নেতিবাচক), আরডুইনো তার ইনপুট পিনগুলিতে নেতিবাচক ভোল্টেজগুলি পরিচালনা করতে পারে না (5V এর চেয়ে বেশি ইতিবাচকও নয়)।

এই জাতীয় ডিভাইসগুলির সাথে যোগাযোগের জন্য আপনার প্রয়োজন একটি ইন্টারফেস সার্কিট। কেবল ইনপুট (আরডুইনো) এর জন্য, একটি সাধারণ ট্রানজিস্টার, ডায়োড এবং কয়েকজন প্রতিরোধক এটি করবে:

ইনভার্টিং বাফার

দ্বি-মুখী যোগাযোগের জন্য আপনাকে নেতিবাচক ভোল্টেজ তৈরি করতে সক্ষম হওয়া প্রয়োজন, সুতরাং আরও জটিল সার্কিটের প্রয়োজন। উদাহরণস্বরূপ, MAX232 চিপ চার্জ-পাম্প সার্কিট হিসাবে কাজ করার জন্য চার 1 µF ক্যাপাসিটরের সাথে একযোগে এটি করবে।


সফটওয়্যার সিরিয়াল

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


Mega2560

আরডুইনো "মেগা" এর 3 টি অতিরিক্ত হার্ডওয়্যার সিরিয়াল বন্দর রয়েছে। তারা বোর্ডে Tx1 / Rx1, Tx2 / Rx2, Tx3 / Rx3 হিসাবে চিহ্নিত রয়েছে x এগুলি সম্ভব হলে সফটওয়্যারসিরেলের অগ্রাধিকার হিসাবে ব্যবহার করা উচিত। এই অন্যান্য পোর্টগুলি খোলার জন্য আপনি সিরিয়াল 1, সিরিয়াল 2, সিরিয়াল 3 নামগুলি ব্যবহার করেন:

Serial1.begin (115200);  // start hardware serial port Tx1/Rx1
Serial2.begin (115200);  // start hardware serial port Tx2/Rx2
Serial3.begin (115200);  // start hardware serial port Tx3/Rx3

ব্যাঘাত

হার্ডওয়্যারশিয়ার লাইব্রেরি ব্যবহার করে পাঠানো এবং গ্রহণ করা উভয়ই বাধা ব্যবহার করে।

পাঠানো হচ্ছে

আপনি যখন কাজটি করেন Serial.print, আপনি যে ডেটা মুদ্রণের চেষ্টা করছেন তা কোনও অভ্যন্তরীণ "সংক্রমণ" বাফারে রাখা হয়। আপনার যদি 1024 বাইট বা তার বেশি র‌্যাম থাকে (যেমন ইউনোতে) আপনি একটি 64-বাইট বাফার পান, অন্যথায় আপনি 16 বাইট বাফার পান। যদি বাফারের ঘর থাকে তবে Serial.printতাৎক্ষণিকভাবে রিটার্ন দেয়, সুতরাং আপনার কোডটি বিলম্বিত করবে না। যদি কোনও জায়গা না থাকে, তবে এটি রুম থাকার জন্য বাফারকে যথেষ্ট খালি করার অপেক্ষায় এটি "ব্লক করে"।

তারপরে, হার্ডওয়্যার দ্বারা প্রতিটি বাইট সংক্রামিত হওয়ার সাথে সাথে একটি বাধা বলা হয় ("ইউএসআর্ট, ডেটা রেজিস্টার খালি" বিঘ্নিত) এবং বাধা রুটিনটি বাফার থেকে পরবর্তী বাইটটি সিরিয়াল পোর্টের বাইরে প্রেরণ করে।

গ্রহণ

ইনকামিং ডেটা প্রাপ্ত হওয়ার সাথে সাথে একটি বিঘ্নিত রুটিনকে বলা হয় ("ইউএসআর্ট আরএক্স কমপ্লিট" ইন্টারপট) এবং ইনকামিং বাইটটিকে "রিসিভ" বাফারে স্থান দেওয়া হয় (উপরে বর্ণিত ট্রান্সমিট বাফার একই আকার)।

আপনি যখন ফোন করবেন তখন Serial.availableজানতে পারবেন যে "বদ্ধ" প্রাপ্ত বাফারে কয়টি বাইট উপলব্ধ। আপনি যখন কল করেন Serial.readকোনও বাইট রিসিভ বাফার থেকে সরানো হয় এবং আপনার কোডে ফিরে আসে।

১০০০ বাইট বা আরও বেশি র‌্যাম সহ আরডিনোগুলিতে, রিসিভ বাফার থেকে ডেটা সরিয়ে নেওয়ার জন্য কোনও তাড়াহুড়া হয় না, তবে শর্ত থাকে যে আপনি এটি পূরণ না করতে পারেন। যদি এটি পূরণ হয় তবে পরবর্তী যে কোনও ডেটা ফেলে দেওয়া হবে।

মনে রাখবেন যে এই বাফারের আকারের কারণে খুব বড় সংখ্যক বাইট আসার অপেক্ষা করার কোনও অর্থ নেই, উদাহরণস্বরূপ:

while (Serial.available () < 200)
  { }  // wait for 200 bytes to arrive

এটি কখনই কাজ করবে না কারণ বাফার এতটা ধরে রাখতে পারে না।


পরামর্শ

  • পড়ার আগে সর্বদা নিশ্চিত হয়ে নিন যে ডেটা উপলব্ধ। উদাহরণস্বরূপ, এটি ভুল:

    if (Serial.available ())
      {
          char a = Serial.read ();
          char b = Serial.read ();  // may not be available
      }

    Serial.availableপরীক্ষা শুধুমাত্র নিশ্চিত আপনার আছে এক কিন্তু কোড দুই পড়া করার চেষ্টা করে বাইট পাওয়া যায়,। এটি কাজ করতে পারে, যদি বাফারে দুটি বাইট থাকে তবে না-আপনি ফিরে পাবেন -1 যা মুদ্রিত হলে 'ÿ' এর মতো দেখাবে।

  • ডেটা প্রেরণে কতক্ষণ সময় লাগে সে সম্পর্কে সচেতন হন। উপরে উল্লিখিত হিসাবে, 9600 বাউডে আপনি প্রতি সেকেন্ডে কেবল 960 বাইট প্রেরণ করেন, সুতরাং একটি এনালগ বন্দর থেকে 1000 রিডিং পাঠানোর চেষ্টা করুন, 9600 বাউড, খুব সফল হবে না।


তথ্যসূত্র


1 ম গ্রাফিকে: তীরগুলির সাথে দেখে মনে হচ্ছে স্টপ বিটটি প্রথমে সংক্রমণিত। আপনি যদি আরএক্স / টিএক্স এবং তীরের দিকের বিনিময় করেন তবে আমি মনে করি এটি কম বিভ্রান্তিকর।
অট--

এটি বাম থেকে ডানে পড়ার উদ্দেশ্য ছিল (যেমন এই বাক্যটি) এবং এভাবে বাম দিকের জিনিসগুলি প্রথমে ঘটে। এটি এটিকে রাখুন: একটি অ্যাসিলোস্কোপে, আপনি কীভাবে এটি ট্রেস দেখতে পাবেন।
নিক দম্ভোক্তি

ওসিলোস্কোপের ব্যাখ্যা দিয়ে ঠিক আছে আমি এটি কিনছি। :-)
ott--

তবে আমি ভাবছিলাম যে আপনার বক্তব্যটি অনেক অর্থবোধ করে। অন্যেরা কী ভাবেন? তীরগুলি বিপরীত হয়, এবং আমি আরএক্স / টিএক্স বিনিময় করেছি তবে এটি কি আরও পরিষ্কার হবে?
নিক দম্ভোক্তি

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