اطلاعیه

Collapse
No announcement yet.

سوال در مورد باس SPI و کلاک آن

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    سوال در مورد باس SPI و کلاک آن

    سوالی داشتم
    در هنگام استفاده از باس SPI آیا همیشه کلاک روی پایه خودش تولید میشود یا فقط هنگام ارسال داده تولید مشود ؟ در واقع سوالم اینطور بود اگه فقط هنگام ارسال داده کلاک تولید میشه آن گاه Slave چطور مشخص می کند که کلاک تولید شود تا داده هایش را به مستر ارسال کند ؟ چون که کلاک را مستر تولید می کند نه اسلیو


    تشکر
    ______

    #2
    پاسخ : سوال در مورد باس SPI و کلاک آن

    پالس کلاک فقط زمانی که دیتا در حال ارساله تولید میشه.
    چون که کلاک را مستر تولید می کند نه اسلیو
    خوب مستر هم میگه که چه موقع دیتا براش فرستاده بشه!!کار پایه ی ss چیه پس؟
    وقتی مستر یکی از اسلیو ها رو انتخاب میکنه اسلیو هم دیتاشو آماده میکنه و با شروع شدن پالس یه بایت از مستر به اسلیو و یه بایت از اسلیو به مستر شیفت میکنه.
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

    دیدگاه


      #3
      پاسخ : سوال در مورد باس SPI و کلاک آن

      سلام
      در مورد چیزی میگم مطمن نیستم اگر اشتباه هست لطفا اصلاح کنید.

      تا اونجا که من میدونم حتی زمانی که cs اسلیو فعال میشه باز هم داده ای ارسال نمیشه چون مستر باید پالس کلاک رو تولید کنه. که این با بیت فعال ساز spi میسر میشه در این موقع مستر شروع به ارسال داده میکنه که البته مهم نیست و فقط به این دلیل هست که بعد از ۸ کلاک داده اسلیو به مستر منتقل (شیفت) بشه.

      Work with what you have .Never limit yourself by things you could have had

      دیدگاه


        #4
        پاسخ : سوال در مورد باس SPI و کلاک آن

        تقریبا درسته.فقط اشکالش اینه که کلاک با بیت فعال ساز spi راه نمیفته. اگر با رابط spi کار میکنی این بیت همیشه فعاله.
        موقعی پالس شروع به تولید شدن میکنه که مستر بخواد یه بایت رو به اسلیو بفرسته.مگه از روی اسلیو اینجوری نمیخونید؟
        cs=0;
        recive_data=spi(0xFF);
        cs=1;
        با این کار مستر اول اسلیو انتخابی رو فعال میکنه.بعد یه عددی رو برای اسلیو میفرسته.با این کار پالس شروع به کار میکنه.همزمان با اینکه مستر یه عددی رو برای اسلیو میفرسته اسلیو هم دیتا رو برای مستر میفرسته.وقتی مستر ارسال داده رو تموم کرد پالس رو متوقف میکنه و داده ای که اسلیو فرستاده رو تو ریجستر SPDR میزاره.
        [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

        دیدگاه


          #5
          پاسخ : سوال در مورد باس SPI و کلاک آن

          بله دقیقا همینطوره.
          در واقع ارسال زمانی شروع میشه که داده نوشته میشه و نه زمانی که بیت فعال میشه.

          با تشکر
          Work with what you have .Never limit yourself by things you could have had

          دیدگاه


            #6
            پاسخ : سوال در مورد باس SPI و کلاک آن

            ممنون ازتون
            سوال من از این بابت بود که من یه آی سی دارم که (آی سی برای راه اندازی تاچ هست 7843 ) اول یه بار باید پیکربندی شه آی سی و بعد از اون مقدار رو به مستر می فرسته - این ارسال مقدار بعد از پیکر بندی هست - یعنی همزمان با ارسال بیت های init کردن توسط مستر ، اسلیو چیزی ارسال نمی کنه !!! پس بعدا چطور می تونه داده اش رو ارسال کنه ؟ باید دوباره یه چیزی الکی بفرستم یا دوباره init کنمش با مستر لابد ؟

            دیدگاه


              #7
              پاسخ : سوال در مورد باس SPI و کلاک آن

              نوشته اصلی توسط علی آقایی فر
              ممنون ازتون
              سوال من از این بابت بود که من یه آی سی دارم که (آی سی برای راه اندازی تاچ هست 7843 ) اول یه بار باید پیکربندی شه آی سی و بعد از اون مقدار رو به مستر می فرسته - این ارسال مقدار بعد از پیکر بندی هست - یعنی همزمان با ارسال بیت های init کردن توسط مستر ، اسلیو چیزی ارسال نمی کنه !!! پس بعدا چطور می تونه داده اش رو ارسال کنه ؟ باید دوباره یه چیزی الکی بفرستم یا دوباره init کنمش با مستر لابد ؟
              من تا حالا این ای سی رو راه ننداختم .الانم دارم میرم بیرون و وقت نیست که بخونمش.
              کتابخونه ی این ای سی رو داشتم براتون گزاشتم.اگر متوجه نشدید بگید تا منم بخونمش وبتونم کمکتون کنم
              http://www.4shared.com/file/uAi18Ro6/ads.html
              [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

              دیدگاه


                #8
                پاسخ : سوال در مورد باس SPI و کلاک آن

                پین cs برای انتخاب اسلیو است و لا غیر

                spi چند کانفیگ داره
                اول اینکه مستر باشه یا اسلیو
                دوم idle یعنی هنگام عدم ارسال اطلاعات پین کلاک 1 باشه یا 0
                سوم لبه شیفت یعنی شیفت در چه گامی از کلاک انجام بشه ؟
                باید مشخص کنیم دیتا چه زمانی شیفت بشه . یه حالتش اینه که کلاک 1 باشه و به محض 0 شدن شیفت انجام میشه و حالت دوم اینه که کلاک 0 باشه و به محض 1 شدن شیفت انجام بشه
                چهارم سرعت که از کلاک میکرو استفاده میکنه تقسیم بر یکی از ضرایب 2
                اسلیو هم با این تنظیمات میتونه تشخیص بده چه کاری انجام بده

                البته تو زبانهای مختلف ترتیبشون فرق میکنه
                به راه بادیه رفتن ، به از نشستن باطل

                دیدگاه


                  #9
                  پاسخ : سوال در مورد باس SPI و کلاک آن

                  نوشته اصلی توسط علی آقایی فر
                  ممنون ازتون
                  سوال من از این بابت بود که من یه آی سی دارم که (آی سی برای راه اندازی تاچ هست 7843 ) اول یه بار باید پیکربندی شه آی سی و بعد از اون مقدار رو به مستر می فرسته - این ارسال مقدار بعد از پیکر بندی هست - یعنی همزمان با ارسال بیت های init کردن توسط مستر ، اسلیو چیزی ارسال نمی کنه !!! پس بعدا چطور می تونه داده اش رو ارسال کنه ؟ باید دوباره یه چیزی الکی بفرستم یا دوباره init کنمش با مستر لابد ؟
                  بله آقای آقایی فر تا داده فرستاده نشه داده ای گرفته نمیشه!!
                  شما باید یه بایت با مستر بفرستید تا یه بایت از اسلیو بگیرید. در آخر اینکه مراقب باشید حتما مد spi را با توجه به دیتاشیت درست انتخاب کنید. توضیح اینکه انواع مدها در spi در پارامترهایی (که دوستمون fadelphi توضیح دادند) متفاوت هستند.

                  با تشکر

                  Work with what you have .Never limit yourself by things you could have had

                  دیدگاه


                    #10
                    پاسخ : سوال در مورد باس SPI و کلاک آن

                    سلام
                    نوشته اصلی توسط shahinbahari
                    cs=0;
                    recive_data=spi(0xFF);
                    cs=1;
                    با این کار مستر اول اسلیو انتخابی رو فعال میکنه.بعد یه عددی رو برای اسلیو میفرسته.با این کار پالس شروع به کار میکنه.همزمان با اینکه مستر یه عددی رو برای اسلیو میفرسته اسلیو هم دیتا رو برای مستر میفرسته.وقتی مستر ارسال داده رو تموم کرد پالس رو متوقف میکنه و داده ای که اسلیو فرستاده رو تو ریجستر SPDR میزاره.
                    با توجه به مطالبی که گفتید حالا اگه من بخوام اطلاعاتی رو از روی یه EEPROM بخونم باید اول پیغامی رو به Slave که همون EEPROM هست بفرستم تا برام دیتای مورد مورد نظر رو بفرسته ؟
                    تابع زیر هم داره این کارو می کنه ؟

                    BYTE read_ext_eeprom(EEPROM_ADDRESS address)
                    {
                    BYTE data;
                    output_high(EEPROM_SELECT);
                    spi_write(0x18);
                    spi_write(address);
                    data=spi_read(0);
                    output_low(EEPROM_SELECT);
                    return(data);
                    }
                    زمان تنها واحد حقیقی اندازه گیریه
                    زمان وجود ماده رو اثبات میکنه
                    بدون زمان هیچکدوم ما وجود نخواهیم داشت
                    زمان یکتاست

                    دیدگاه


                      #11
                      پاسخ : سوال در مورد باس SPI و کلاک آن

                      نوشته اصلی توسط Robo-amir
                      سلامبا توجه به مطالبی که گفتید حالا اگه من بخوام اطلاعاتی رو از روی یه EEPROM بخونم باید اول پیغامی رو به Slave که همون EEPROM هست بفرستم تا برام دیتای مورد مورد نظر رو بفرسته ؟
                      تابع زیر هم داره این کارو می کنه ؟

                      BYTE read_ext_eeprom(EEPROM_ADDRESS address)
                      {
                      BYTE data;
                      output_high(EEPROM_SELECT);
                      spi_write(0x18);
                      spi_write(address);
                      data=spi_read(0);
                      output_low(EEPROM_SELECT);
                      return(data);
                      }
                      همون طور که گفتم منطق spi اکتیو low هست یعنی با صفر کردن پین ss انتخاب میشه.پس باید خط دوم و یکی مونده به آخر رو با هم عوض کنید.
                      اون مقدار 0x18 که برای بار اول به eeprom میفرستید بستگی به نوع چیپ داره یعنی اون مقدار رو از دیتا شیت چک کنید. عموما اونو برای انتخاب خواندن یا نوشتن میفرستند.ممکن هم هست ریجستر دیگه ای برای منظور خاص در نظر گرفنه شده باشه. با مراجعه به دیتا شیت همه ی این ها رو میشه فهمید.
                      حالت کلی یرنامه درسته فقط بهتره توی data=spi_read(0); به جای صفر 0XFF بفرستی.
                      [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                      دیدگاه


                        #12
                        پاسخ : سوال در مورد باس SPI و کلاک آن

                        نوشته اصلی توسط shahinbahari
                        همون طور که گفتم منطق spi اکتیو low هست یعنی با صفر کردن پین ss انتخاب میشه.پس باید خط دوم و یکی مونده به آخر رو با هم عوض کنید.
                        اون مقدار 0x18 که برای بار اول به eeprom میفرستید بستگی به نوع چیپ داره یعنی اون مقدار رو از دیتا شیت چک کنید. عموما اونو برای انتخاب خواندن یا نوشتن میفرستند.ممکن هم هست ریجستر دیگه ای برای منظور خاص در نظر گرفنه شده باشه. با مراجعه به دیتا شیت همه ی این ها رو میشه فهمید.
                        حالت کلی یرنامه درسته فقط بهتره توی data=spi_read(0); به جای صفر 0XFF بفرستی.
                        اگه این جوری که شما میفرماییذ باشه ( اکتیو low) پسس چرا این برنامه داره جواب میده ؟
                        من تو دیتا شیت گشتم اما چیزی پیدا نکردم !
                        یه هفتست این EEPROM منو اسیر کرده ! ممنون میشم یه نیگاهی بهش بندارید اگه وقت دارید.
                        http://www.4shared.com/document/tghBjqY8/AT93C66A.html
                        زمان تنها واحد حقیقی اندازه گیریه
                        زمان وجود ماده رو اثبات میکنه
                        بدون زمان هیچکدوم ما وجود نخواهیم داشت
                        زمان یکتاست

                        دیدگاه


                          #13
                          پاسخ : سوال در مورد باس SPI و کلاک آن

                          نوشته اصلی توسط Robo-amir
                          اگه این جوری که شما میفرماییذ باشه ( اکتیو low) پسس چرا این برنامه داره جواب میده ؟
                          من تو دیتا شیت گشتم اما چیزی پیدا نکردم !
                          یه هفتست این EEPROM منو اسیر کرده ! ممنون میشم یه نیگاهی بهش بندارید اگه وقت دارید.
                          http://www.4shared.com/document/tghBjqY8/AT93C66A.html
                          مگه نمیگید برنامش جواب میده پس مشکل کجاست؟ :mrgreen:
                          من دیتا شیت رو خوندم.این EEPROM که اصلا spi نیست.یه رابط سریال سه سیمه هست. واسه همین همه چیزش فرق میکرد.با Spi میکرو میشه راه اندازیش کرد منتها اگرقطعات دیگه ای روی باس دارید حواستون به منطق انتخابیشون باشه.
                          اولین نکته valid instruction starts with a rising edge of CS
                          یعنی منطق این چیپ active high هستش.پس این جا باید برعکس spi عمل کرد.
                          دومین نکته هم اینه که برای خوندن همون صفر رو باید بفرستید a dummy bit (logic “0&rdquo
                          سومین نکته هم در مورد دستورالعمل هاست

                          این طور که توی دیتا شیت اومده دستور read مقدار 10 رو داره که باید با80 or منطقی بشه که میشه 0x82 نه18
                          هر کدوم از op code ها رو خواستی استفاده کنید اول با 80 or کنید بعد به چیپ بفرستید.
                          این چیپ تو پروتیوس نبود وگرنه یه برنامه ی تست شده براتون مینوشتم.شما این کد رو تست کنید و جوابشو بگید:
                          کد:
                          BYTE read_ext_eeprom(EEPROM_ADDRESS address)
                          {
                           BYTE data;
                            output_high(EEPROM_SELECT);
                            spi_write(0x82);
                            spi_write(address);
                            data=spi_read(0); 
                            output_low(EEPROM_SELECT);
                            return(data);
                          }
                          حواستون به فرکانس هم باشه !!از 2 mhz بالاتر نباید بره= 2MHz Clock Rate At 5V
                          [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                          دیدگاه


                            #14
                            پاسخ : سوال در مورد باس SPI و کلاک آن

                            سلام
                            از وقتی که گذاشتید واقعا ممنون
                            نوشته اصلی توسط shahinbahari
                            من دیتا شیت رو خوندم.این EEPROM که اصلا spi نیست.یه رابط سریال سه سیمه هست. واسه همین همه چیزش فرق میکرد.با Spi میکرو میشه راه اندازیش کرد منتها اگرقطعات دیگه ای روی باس دارید حواستون به منطق انتخابیشون باشه.
                            1- خوب مگه Spi همون سریال سه سیمه نمیشه؟(سریال سه سیمه با Spi جه فرقی داره؟)
                            2- میشه یه کم بیشتر در مورد OPCode و SB توضیخ بدید ؟
                            3-در مورد اینکه گفتید هر کدوم از op code ها رو خواستم استفاده کنم اول با 80 or کنم بعد به چیپ بفرستم میشه بگید این قضیه ی ORکردن با80 رو کجا توضیخ داده بود؟(یا اینکه تجربه؟)
                            4-با همه ی این تفاسیر پس چرا اون تابع اولیه داره کار میکنه ؟(البته سرعتش پایینه که خدس میزنم ربطی به SETUP_SPI(mode )داشته باشه)

                            نوشته اصلی توسط shahinbahari
                            مگه نمیگید برنامش جواب میده پس مشکل کجاست؟ :mrgreen:
                            می خوام یاد بگیرم تا بتونم . . . :read:
                            بازم ممنون
                            زمان تنها واحد حقیقی اندازه گیریه
                            زمان وجود ماده رو اثبات میکنه
                            بدون زمان هیچکدوم ما وجود نخواهیم داشت
                            زمان یکتاست

                            دیدگاه


                              #15
                              پاسخ : سوال در مورد باس SPI و کلاک آن

                              - خوب مگه Spi همون سریال سه سیمه نمیشه؟(سریال سه سیمه با Spi جه فرقی داره؟)
                              به طور کلی زیاد باهم فرق ندارند.همون طور که گفتم در spi حتما باید منطقی انتخابی active low باشه اما تو سریال سه سیمه قانونی برای این کار نیست.مثل اینجا میتونه active high باشه.تفاوت سر همینه spi برای خودش یه سری قانون داره ولی سریال سه سیمه قانون خاصی نداره. بر اساس همین شباهته که ما میتونیم از spi میکرو برای این کار استفاده کنیم.
                              - میشه یه کم بیشتر در مورد OPCode و SB توضیخ بدید ؟
                              3-در مورد اینکه گفتید هر کدوم از op code ها رو خواستم استفاده کنم اول با 80 or کنم بعد به چیپ بفرستم میشه بگید این قضیه ی ORکردن با80 رو کجا توضیخ داده بود؟(یا اینکه تجربه؟)
                              OPCode درواقع کد اون عملیاتی هست که میخواید انجام بدید.
                              SB هم یعنی start bit .وقتی شما میخواید که کد عملیات رو برای چیپ بفرستید باید اولین بیت رو یک کنید یعنی قالب دستورات اینجوریه 0b1000 00xx که xx همونکد عملیات هست.
                              این که با 80 or کنید هم از همین جااومده. 0x80=0b1000 0000 .با انجام این عمل قالب دستور درست میشه :agree:
                              -با همه ی این تفاسیر پس چرا اون تابع اولیه داره کار میکنه ؟(البته سرعتش پایینه که خدس میزنم ربطی به SETUP_SPI(mode )داشته باشه)
                              راستش نمیدونم چرا کار میکنه.من این اطلاعات رو بر اساس دیتاشیتی که دادید درآوردم.حالا یه بار هم بر این اساس بنویسید ببینید بازم کار میکنه!!!
                              در کل دیتا شیتشو خوب توضیح نداده.اگر با روال کار آشنا نباشید فهمیدنش سخت میشه.
                              اگر EEPROMخوب میخوای با سری AT25 اتمل کار کن.رابطش SPI و سرعت بالاتری هم داره.
                              می خوام یاد بگیرم تا بتونم . . . :read:
                              این جای کار مهمه :applause: :applause:
                              [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                              دیدگاه

                              لطفا صبر کنید...
                              X