इन-सिस्टम प्रोग्रामिंग

इन-सिस्टम प्रोग्रामिंग (ISP), या जिसे इन-परिपथ सीरियल प्रोग्रामिंग (ICSP) भी कहा जाता है, कुछ प्रोग्रामेबल लॉजिक डिवाइसेस, माइक्रोकंट्रोलर्स और अन्य एम्बेडेड डिवाइसों की क्षमता है, जिन्हें चिप की आवश्यकता के बजाय एक पूर्ण सिस्टम में स्थापित करते समय प्रोग्राम किया जाता है। इसे सिस्टम में स्थापित करने से पहले प्रोग्राम किया जाना है। यह परिपथ बोर्ड पर विशेषज्ञ प्रोग्रामिंग परिपथ की आवश्यकता के बिना फर्मवेयर अपडेट को माइक्रोकंट्रोलर्स और संबंधित प्रोसेसर की ऑन-चिप मेमोरी में वितरित करने की अनुमति देता है, और डिज़ाइन कार्य को सरल करता है।

प्रोग्रामिंग माइक्रोकंट्रोलर उपकरणों के लिए इन-सिस्टम प्रोग्रामिंग प्रोटोकॉल के लिए कोई मानक नहीं है। माइक्रोकंट्रोलर्स के लगभग सभी निर्माता इस सुविधा का समर्थन करते हैं, लेकिन सभी ने अपने स्वयं के प्रोटोकॉल लागू किए हैं, जो प्रायः एक ही निर्माता के विभिन्न उपकरणों के लिए भी भिन्न होते हैं। सामान्य तौर पर, आधुनिक प्रोटोकॉल उपयोग किए जाने वाले पिनों की संख्या को कम रखने की कोशिश करते हैं, सामान्यतः 2 पिनों तक है। कुछ आईएसपी इंटरफेस इसे केवल एक पिन के साथ प्राप्त करने का प्रबंधन करते हैं, अन्य एक जेटीएजी इंटरफेस को लागू करने के लिए 4 तक का उपयोग करते हैं।

इन-सिस्टम प्रोग्रामिंग का प्राथमिक लाभ यह है कि यह इलेक्ट्रॉनिक उपकरणों के निर्माताओं को सिस्टम को असेंबल करने से पहले एक अलग प्रोग्रामिंग चरण की आवश्यकता के बजाय प्रोग्रामिंग और परीक्षण को एक एकल उत्पादन चरण में एकीकृत करने और पैसे बचाने की अनुमति देता है। यह निर्माताओं को किसी निर्माता या वितरक से पूर्व-प्रोग्राम किए गए चिप्स खरीदने के बजाय अपने स्वयं के सिस्टम की उत्पादन लाइन में चिप्स को प्रोग्राम करने की अनुमति दे सकता है, जिससे उत्पादन चलाने के बीच में कोड या डिज़ाइन परिवर्तन लागू करना संभव हो जाता है। दूसरा लाभ यह है कि उत्पादन हमेशा नवीनतम फर्मवेयर का उपयोग कर सकता है, और नई सुविधाओं के साथ-साथ बग फिक्स को लागू किया जा सकता है और प्री-प्रोग्राम्ड माइक्रोकंट्रोलर्स का उपयोग करते समय देरी के बिना उत्पादन में लगाया जा सकता है।

माइक्रोकंट्रोलर्स को सामान्यतः एक मुद्रित परिपथ बोर्ड में सीधे टांका लगाया जाता है और सामान्यतः  दूसरे कंप्यूटर के लिए एक बड़े बाहरी प्रोग्रामिंग केबल के लिए परिपथ्री या स्थान नहीं होता है।

सामान्यतः, आईएसपी का समर्थन करने वाले चिप्स में सिस्टम के सामान्य आपूर्ति वोल्टेज से किसी भी आवश्यक प्रोग्रामिंग वोल्टेज को उत्पन्न करने के लिए आंतरिक परिपथरी होती है, और एक सीरियल प्रोटोकॉल के माध्यम से प्रोग्रामर के साथ संवाद करती है। स्वचालित परीक्षण प्रक्रियाओं के साथ आसान एकीकरण की सुविधा के लिए, अधिकांश प्रोग्रामेबल लॉजिक डिवाइस ISP के लिए JTAG प्रोटोकॉल के एक प्रकार का उपयोग करते हैं। अन्य उपकरण सामान्यतः मालिकाना प्रोटोकॉल या पुराने मानकों द्वारा परिभाषित प्रोटोकॉल का उपयोग करते हैं। मध्यम रूप से बड़े ग्लू लॉजिक की आवश्यकता के लिए पर्याप्त जटिल प्रणालियों में, डिजाइनर गैर-जेटीएजी उपकरणों जैसे फ्लैश मेमोरी और माइक्रोकंट्रोलर के लिए एक जेटीएजी-नियंत्रित प्रोग्रामिंग सबसिस्टम लागू कर सकते हैं, जिससे संपूर्ण प्रोग्रामिंग और परीक्षण प्रक्रिया को एक प्रोटोकॉल के नियंत्रण में पूरा किया जा सकता है।

इतिहास
1990 के दशक की शुरुआत से माइक्रोकंट्रोलर्स की वास्तुकला में एक महत्वपूर्ण तकनीकी विकास देखा गया था। सबसे पहले, उन्हें दो संभावित समाधानों में महसूस किया गया: ओटीपी (वन-टाइम प्रोग्रामेबल) या ईपीरॉम मेमोरी के साथ। इन प्रौद्योगिकियों में, स्मृति-मिटाने की प्रक्रिया के लिए पैकेज के ऊपर एक विशिष्ट विंडो के माध्यम से चिप को पराबैंगनी प्रकाश के संपर्क में लाने की आवश्यकता होती है। 1993 में माइक्रोचिप टेक्नोलॉजी ने ईईपीरोम(EEPROM) मेमोरी के साथ पहला माइक्रोकंट्रोलर पेश किया: PIC16C84। ईईपीरोम मेमोरी को विद्युत रूप से मिटाया जा सकता है। इस सुविधा ने पैकेज के ऊपर मिटाने वाली विंडो को हटाकर और इन-सिस्टम प्रोग्रामिंग तकनीक शुरू करके वसूली लागत को कम करने की अनुमति दी। आईएसपी फ्लैशिंग प्रक्रिया के साथ उत्पादन प्रक्रिया के अंत में सीधे बोर्ड पर प्रदर्शन किया जा सकता है। इस विकास ने प्रोग्रामिंग और कार्यात्मक परीक्षण चरण और उत्पादन वातावरणों को एकजुट करने और बोर्डों के प्रारंभिक उत्पादन को शुरू करने की संभावना दी, भले ही फर्मवेयर विकास अभी तक पूरा नहीं हुआ हो। इस तरह बग को ठीक करना या बाद में बदलाव करना संभव था। उसी वर्ष, Atmel ने फ्लैश मेमोरी के साथ पहला माइक्रोकंट्रोलर विकसित किया, प्रोग्राम के लिए आसान और तेज़ और ईईपीरोम मेमोरी की तुलना में बहुत लंबे जीवन चक्र के साथ है।

आईएसपी (ISP) का समर्थन करने वाले माइक्रोकंट्रोलर सामान्यतः सीरियल संचार परिधीय द्वारा प्रोग्रामर, एक फ्लैश/ईईपीरोम मेमोरी और माइक्रोकंट्रोलर को प्रोग्राम करने के लिए आवश्यक वोल्टेज की आपूर्ति के लिए उपयोग किए जाने वाले परिपथ्री के साथ उपयोग किए जाने वाले पिन के साथ प्रदान किए जाते हैं। संचार परिधीय बदले में एक प्रोग्रामिंग परिधीय से जुड़ा होता है जो फ्लैश या ईईपीरोम मेमोरी पर काम करने के लिए कमांड प्रदान करता है।

आईएसपी प्रोग्रामिंग के लिए इलेक्ट्रॉनिक बोर्ड डिजाइन करते समय प्रोग्रामिंग चरण को यथासंभव विश्वसनीय बनाने के लिए कुछ दिशानिर्देशों को ध्यान में रखना आवश्यक है। कम संख्या में पिन वाले कुछ माइक्रोकंट्रोलर प्रोग्रामिंग लाइनों को I/O लाइनों के साथ साझा करते हैं। यदि बोर्ड के डिजाइन में आवश्यक सावधानियों को ध्यान में नहीं रखा गया तो यह एक समस्या हो सकती है; डिवाइस प्रोग्रामिंग के दौरान I/O घटकों के नुकसान का सामना कर सकता है। इसके अलावा, प्रोग्रामर द्वारा घटकों के नुकसान से बचने के लिए ISP लाइनों को उच्च प्रतिबाधा परिपथरी से जोड़ना महत्वपूर्ण है और क्योंकि माइक्रोकंट्रोलर प्रायः लाइन को पायलट करने के लिए पर्याप्त करंट की आपूर्ति नहीं कर सकता है। प्रोग्रामिंग मोड में प्रवेश करने के लिए कई माइक्रोकंट्रोलर्स को एक समर्पित रीसेट(RESET) लाइन की आवश्यकता होती है। लाइन ड्राइविंग के लिए आपूर्ति की गई वर्तमान पर ध्यान देना और रीसेट लाइन से जुड़े वॉचडॉग की उपस्थिति की जांच करना आवश्यक है जो एक अवांछित रीसेट उत्पन्न कर सकता है और इसलिए, प्रोग्रामिंग विफलता का नेतृत्व कर सकता है। इसके अलावा, कुछ माइक्रोकंट्रोलर्स को प्रोग्रामिंग मोड में प्रवेश करने के लिए एक उच्च वोल्टेज की आवश्यकता होती है और इसलिए, यह जांचना आवश्यक है कि यह मान क्षीण नहीं है और यह वोल्टेज बोर्ड पर अन्य घटकों को अग्रेषित नहीं किया गया है।

औद्योगिक आवेदन
इन-सिस्टम प्रोग्रामिंग प्रक्रिया उत्पाद के उत्पादन के अंतिम चरण के दौरान होती है और इसे उत्पादन की मात्रा के आधार पर दो अलग-अलग तरीकों से किया जा सकता है।

पहली विधि में, एक कनेक्टर मैन्युअल रूप से प्रोग्रामर से जुड़ा होता है। यह समाधान प्रोग्रामिंग प्रक्रिया में मानवीय भागीदारी की अपेक्षा करता है जिसे प्रोग्रामर को केबल के साथ इलेक्ट्रॉनिक बोर्ड से जोड़ना होता है। इसलिए, यह समाधान कम उत्पादन मात्रा के लिए है।

दूसरी विधि बोर्ड पर परीक्षण बिंदुओं का उपयोग करती है। ये मुद्रित बोर्ड, या पीसीबी पर रखे गए विशिष्ट क्षेत्र हैं, जो बोर्ड पर कुछ इलेक्ट्रॉनिक घटकों से विद्युत रूप से जुड़े होते हैं। परीक्षण बिंदुओं का उपयोग बोर्ड पर लगे घटकों के लिए कार्यात्मक परीक्षण करने के लिए किया जाता है और चूंकि वे सीधे कुछ माइक्रोकंट्रोलर पिन से जुड़े होते हैं, वे आईएसपी के लिए बहुत प्रभावी होते हैं। मध्यम और उच्च उत्पादन मात्रा के लिए परीक्षण बिंदुओं का उपयोग करना सबसे अच्छा समाधान है क्योंकि यह असेंबली लाइन में प्रोग्रामिंग चरण को एकीकृत करने की अनुमति देता है।

उत्पादन लाइनों में, बोर्ड को कीलों के एक बिस्तर पर रखा जाता है जिसे फिक्सचर कहा जाता है। बाद वाले एकीकृत हैं, उत्पादन की मात्रा के आधार पर, एटीई - स्वचालित परीक्षण उपकरण कहे जाने वाले सेमीआटोमैटिक या स्वचालित परीक्षण प्रणालियों में है। फिक्स्चर विशेष रूप से प्रत्येक बोर्ड के लिए डिज़ाइन किए गए हैं - या बोर्ड के समान कुछ मॉडलों के लिए वे डिज़ाइन किए गए थे - इसलिए ये सिस्टम वातावरण में विनिमेय हैं जहां वे एकीकृत हैं। परीक्षण प्रणाली, एक बार जब बोर्ड और स्थिरता को स्थिति में रखा जाता है, तो परीक्षण के लिए बोर्ड पर परीक्षण बिंदुओं के साथ स्थिरता की सुइयों को संपर्क में रखने के लिए एक तंत्र होता है। वह सिस्टम जो किसी आईएसपी प्रोग्रामर से जुड़ा है, या सीधे उसके अंदर एकीकृत है। इसे डिवाइस या बोर्ड पर लगे उपकरणों को प्रोग्राम करना होता है: उदाहरण के लिए, एक माइक्रोकंट्रोलर और/या एक सीरियल मेमोरी है।

माइक्रोचिप आईसीएसपी (ICSP)
अधिकांश माइक्रोचिप माइक्रोकंट्रोलर्स के लिए, आईसीएसपी (ICSP) प्रोग्रामिंग दो पिनों, घड़ी (PGC) और डेटा (PGD) का उपयोग करके की जाती है, जबकि एक उच्च वोल्टेज (12V) Vpp/MCLR पिन पर मौजूद है। कम वोल्टेज प्रोग्रामिंग (5V या 3.3V) उच्च वोल्टेज के साथ डिस्पेंस करता है, लेकिन I/O पिन के अनन्य उपयोग को सुरक्षित रखता है। हालाँकि, नए माइक्रोकंट्रोलर्स के लिए, विशेष रूप से माइक्रोचिप टेक्नोलॉजी से PIC18F6XJXX/8XJXX माइक्रोकंट्रोलर्स परिवारों के लिए, आईसीएसपी मोड में प्रवेश करना थोड़ा अलग है। आईसीएसपी प्रोग्राम/सत्यापन मोड में प्रवेश करने के लिए निम्नलिखित तीन चरणों की आवश्यकता होती है::


 * 1) वोल्टेज संक्षेप में एमसीएलआर (मास्टर क्लियर) पिन पर लागू होता है।
 * 2) पीजीडी पर एक 32-बिट कुंजी अनुक्रम प्रस्तुत किया गया है।
 * 3) वोल्टेज को एमसीएलआर में फिर से लागू किया जाता है।

हार्डवेयर का एक अलग खंड, जिसे प्रोग्रामर कहा जाता है, एक पीसी के I/O पोर्ट से एक तरफ और दूसरी तरफ PIC से कनेक्ट करने की आवश्यकता होती है। प्रत्येक प्रमुख प्रोग्रामिंग प्रकार के लिए सुविधाओं की सूची इस प्रकार है:


 * 1) पैरेलल पोर्ट - बड़ी भारी केबल, अधिकांश कंप्यूटरों में केवल एक पोर्ट होता है और संलग्न प्रिंटर के साथ प्रोग्रामिंग केबल को स्वैप करना असुविधाजनक हो सकता है। 2010 के बाद के अधिकांश लैपटॉप इस पोर्ट का समर्थन नहीं करते हैं। समानांतर पोर्ट प्रोग्रामिंग बहुत तेज है।
 * 2) सीरियल पोर्ट (COM पोर्ट) - एक समय में सबसे लोकप्रिय तरीका। सीरियल पोर्ट में सामान्यतः  पर्याप्त परिपथ प्रोग्रामिंग आपूर्ति वोल्टेज की कमी होती है। 2010 के बाद के अधिकांश कंप्यूटर और लैपटॉप में इस पोर्ट के लिए समर्थन की कमी है।
 * 3) सॉकेट (परिपथ के अंदर या बाहर) - सीपीयू को या तो परिपथ बोर्ड से हटा दिया जाना चाहिए, या एक क्लैंप को चिप बनाने वाली पहुंच से जुड़ा होना चाहिए।
 * 4) USB केबल - छोटा और हल्का वजन, वोल्टेज स्रोत के लिए समर्थन है और अधिकांश कंप्यूटरों में अतिरिक्त पोर्ट उपलब्ध हैं। प्रोग्राम किए जाने वाले परिपथ और कंप्यूटर के बीच की दूरी यूएसबी (USB) केबल की लंबाई से सीमित होती है - यह सामान्यतः  180 सेमी से कम होनी चाहिए। यह प्रोग्रामिंग उपकरणों को मशीनरी या कैबिनेट में एक समस्या बना सकता है।

आईसीएसपी (ICSP) प्रोग्रामर के कई फायदे हैं, आकार, कंप्यूटर पोर्ट उपलब्धता और बिजली स्रोत प्रमुख विशेषताएं हैं। इंटरकनेक्ट स्कीम में भिन्नता और एक माइक्रो-कंट्रोलर के आसपास के लक्ष्य परिपथ के कारण, कोई प्रोग्रामर नहीं है जो  सभी 'संभावित लक्ष्य परिपथ या इंटरकनेक्ट्स के साथ काम करता है। माइक्रोचिप एक विस्तृत ICSP प्रोग्रामिंग गाइड प्रदान करता है कई साइटें प्रोग्रामिंग और परिपथ उदाहरण प्रदान करती हैं।

PICs को पांच संकेतों का उपयोग करके प्रोग्राम किया जाता है (छठा पिन 'ऑक्स' प्रदान किया जाता है लेकिन उपयोग नहीं किया जाता है)। डेटा को दो-तार तुल्यकालिक धारावाहिक योजना का उपयोग करके स्थानांतरित किया जाता है, तीन और तार प्रोग्रामिंग और चिप शक्ति प्रदान करते हैं। क्लॉक सिग्नल को हमेशा प्रोग्रामर द्वारा नियंत्रित किया जाता है।



सिग्नल और पिनआउट

 * Vpp - प्रोग्रामिंग मोड वोल्टेज हैf। यह MCLR पिन, या कुछ बड़े पिन-काउंट PIC पर उपलब्ध वैकल्पिक ICSP पोर्ट के Vpp पिन से जुड़ा होना चाहिए। PIC को प्रोग्रामिंग मोड में डालने के लिए, यह लाइन एक निर्दिष्ट सीमा में होनी चाहिए जो PIC से PIC में भिन्न होती है। 5 V PICs के लिए, यह हमेशा Vdd से कुछ अधिक होता है, और 13.5 V जितना अधिक हो सकता है। केवल 3.3 V PIC जैसे 18FJ, 24H, और 33F श्रृंखला प्रोग्रामिंग मोड में प्रवेश करने के लिए एक विशेष हस्ताक्षर का उपयोग करते हैं और Vpp एक डिजिटल सिग्नल है वह या तो जमीन पर है या Vdd। कोई भी Vpp वोल्टेज नहीं है जो सभी PIC की मान्य Vpp सीमा के भीतर हो। वास्तव में, कुछ PIC के लिए न्यूनतम आवश्यक Vpp स्तर अन्य PIC को नुकसान पहुँचा सकता है।
 * Vdd - यह PIC का सकारात्मक पावर इनपुट है। कुछ प्रोग्रामर को इसे परिपथ द्वारा प्रदान करने की आवश्यकता होती है (परिपथ कम से कम आंशिक रूप से संचालित होना चाहिए), कुछ प्रोग्रामर इस लाइन को स्वयं ड्राइव करने की अपेक्षा करते हैं और परिपथ को बंद करने की आवश्यकता होती है, जबकि अन्य को किसी भी तरह से कॉन्फ़िगर किया जा सकता है (जैसे माइक्रोचिप ICD2) . एंबेड इंक प्रोग्रामर स्वयं Vdd लाइन को चलाने की अपेक्षा करते हैं और प्रोग्रामिंग के दौरान लक्ष्य परिपथ को बंद करने की आवश्यकता होती है।
 * Vss - PIC को नकारात्मक शक्ति इनपुट और शेष संकेतों के लिए शून्य वोल्ट संकेत है। अन्य संकेतों के वोल्टेज Vss के संबंध में निहित हैं।
 * ICSPCLK - सीरियल डेटा इंटरफ़ेस की क्लॉक लाइन। यह रेखा GND से Vdd तक घूमती है और हमेशा प्रोग्रामर द्वारा संचालित होती है। डेटा को गिरते हुए किनारे पर स्थानांतरित किया जाता है।
 * ICSPDAT - सीरियल डेटा लाइन है। सीरियल इंटरफ़ेस द्वि-दिशात्मक है, इसलिए वर्तमान ऑपरेशन के आधार पर इस लाइन को प्रोग्रामर या पीआईसी द्वारा संचालित किया जा सकता है। किसी भी स्थिति में यह रेखा GND से Vdd तक झूलती है। पीजीसी के गिरते किनारे पर थोड़ा स्थानांतरित किया जाता है।
 * AUX/PGM - नए PIC कंट्रोलर लो वोल्टेज प्रोग्रामिंग (LVP) को सक्षम करने के लिए इस पिन का उपयोग करते हैं। PGM को ऊंचा रखने से, माइक्रो-नियंत्रक LVP मोड में प्रवेश करेगा। PIC माइक्रो-कंट्रोलर LVP सक्षम के साथ भेजे जाते हैं - इसलिए यदि आप एक बिलकुल नई चिप का उपयोग करते हैं तो आप इसे LVP मोड में उपयोग कर सकते हैं। उच्च वोल्टेज प्रोग्रामर का उपयोग करके मोड को बदलने का एकमात्र तरीका है। यदि आप इस पिन से बिना किसी कनेक्शन के माइक्रो कंट्रोलर को प्रोग्राम करते हैं, तो मोड अपरिवर्तित रहता है।

RJ11 पिनआउट
ICSP प्रोग्रामर के साथ RJ11 सॉकेट का उपयोग करने के लिए एक उद्योग मानक माइक्रोचिप द्वारा समर्थित है। चित्रण उनके डेटा शीट में प्रदान की गई जानकारी का प्रतिनिधित्व करता है। हालांकि, भ्रम की गुंजाइश है। PIC डेटा शीट एक उलटा सॉकेट दिखाती है और पिनआउट का सचित्र दृश्य प्रदान नहीं करती है, इसलिए यह स्पष्ट नहीं है कि सॉकेट पिन 1 किस तरफ स्थित है। यहां प्रदान किया गया चित्रण अप्रमाणित है लेकिन फोन उद्योग मानक पिनआउट का उपयोग करता है (RJ11 प्लग/सॉकेट मूल रूप से वायर्ड डेस्कटॉप फोन के लिए विकसित किया गया था)।

यह भी देखें

 * डिवाइस प्रोग्रामर