NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3397 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 8 از 8

موضوع: راه اندازی spi کوبی برد

  1. #1
    عضو جدید
    تاریخ عضویت
    Jun 2008
    نوشته ها
    6
    تشکر
    0
    تشکر شده 9 بار در 2 پست

    Gadid راه اندازی spi کوبی برد

    دوستان کسی رابط spi مربوط به کوبی را راه اندازی کرده یا نه؟؟؟
    من یک کد با زبان c < یک کد به زبان پایتون زدم ولی کار نمی کنند.کسی میدونه مشکلش چیه؟

    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <string.h>
    #include <sys/ioctl.h>
    #include <linux/spi/spidev.h>


    static const char *spi_name = "/dev/spidev0.0";

    int main(void)
    {
    int res = 0; // We can use this to monitor the results of any operation.
    int j=0;
    int i = 0;


    // As usual, we begin the relationship by establishing a file object which
    // points to the SPI device.
    int spiDev = open(spi_name, O_RDWR);
    if(spiDev < 1)
    {
    printf("can not open spi device\n");
    return -1;
    }
    // We'll want to configure our SPI hardware before we do anything else. To do
    // this, we use the ioctl() function. Calls to this function take the form
    // of a file descriptor, a "command", and a value. The returned value is
    // always the result of the operation; pass it a pointer to receive a value
    // requested from the SPI peripheral.

    // Start by setting the mode. If we wanted to *get* the mode, we could
    // use SPI_IOC_RD_MODE instead. In general, the "WR" can be replaced by
    // "RD" to fetch rather than write. Also note the somewhat awkward
    // setting a variable rather than passing the constant. *All* data sent
    // via ioctl() must be passed by reference!
    int mode = 0;//SPI_MODE0;
    ioctl(spiDev, SPI_IOC_WR_MODE, &mode);
    ioctl(spiDev,SPI_IOC_RD_MODE,&mode);
    printf("spi mode set to:%d\n",mode);
    // The maximum speed of the SPI bus can be fetched. You'll find that, on the
    // pcDuino, it's 12MHz.
    int maxSpeed = 0;
    ioctl(spiDev, SPI_IOC_RD_MAX_SPEED_HZ, &maxSpeed);
    printf("Max speed: %dHz\n", maxSpeed);

    // In rare cases, you may find that a device expects data least significant
    // bit first; in that case, you'll need to set that up. Writing a 0
    // indicates MSb first; anything else indicates LSb first.
    int lsb_setting = 0;
    ioctl(spiDev, SPI_IOC_WR_LSB_FIRST, &lsb_setting);

    // Some devices may require more than 8 bits of data per transfer word. The
    // SPI_IOC_WR_BITS_PER_WORD command allows you to change this; the default,
    // 0, corresponds to 8 bits per word.
    int bits_per_word = 8;
    ioctl(spiDev, SPI_IOC_WR_BITS_PER_WORD, &bits_per_word);

    // Okay, now that we're all set up, we can start thinking about transferring
    // data. This, too, is done through ioctl(); in this case, there's a special
    // struct (spi_ioc_transfer) defined in spidev.h which holds the needful
    // info for completing a transfer. Its members are:
    // * tx_buf - a pointer to the data to be transferred
    // * rx_buf - a pointer to storage for received data
    // * len - length in bytes of tx and rx buffers
    // * speed_hz - the clock speed, in Hz
    // * delay_usecs - delay between last bit and deassertion of CS
    // * bits_per_word - override global word length for this transfer
    // * cs_change - strobe chip select between transfers?
    // * pad - ??? leave it alone.

    // For this example, we'll be reading the address location of an ADXL362
    // accelerometer, then writing a value to a register and reading it back.
    // We'll do two transfers, for ease of data handling: the first will
    // transfer the "read register" command (0x0B) and the address (0x02), the
    // second will dump the response back into the same buffer.

    struct spi_ioc_transfer xfer;
    memset(&xfer, 0, sizeof(xfer));
    char dataBuffer[3];
    char rxBuffer[3];
    dataBuffer[0] = 0x0B;
    dataBuffer[1] = 0x02;
    dataBuffer[2] = 0x00;
    xfer.tx_buf = (unsigned long)dataBuffer;
    xfer.rx_buf = 0;//(unsigned long)rxBuffer;
    xfer.len = 3;
    xfer.speed_hz = 500000;
    xfer.cs_change = 1;
    xfer.bits_per_word = 8;
    while(1)
    {
    res = write(spiDev,dataBuffer,3);
    // res = ioctl(spiDev, SPI_IOC_MESSAGE(1), &xfer);
    if(res<3)
    {
    printf("SPI can not send result: %d\n", res);
    // return -1;
    }
    else{
    printf("read Device ID: %d - %d - %d\n", rxBuffer[2], rxBuffer[1], rxBuffer[0]);
    }
    for(i=0;i<0xffffff;i++);
    }
    }





    و این هم کد پایتون:
    import spidev
    import time

    spi = spidev.SpiDev()
    spi.open(0,0)

    while 1:
    spi.writebytes([0,0,0])
    time.sleep(1)
    print("send char\n")

    در ضمن تنظیمات مربوط به spi در کرنل هم تنظیم کردم

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    عضو جدید
    تاریخ عضویت
    Jun 2008
    نوشته ها
    6
    تشکر
    0
    تشکر شده 9 بار در 2 پست

    پیش فرض

    مشکل مربوط به تنظیمات پایه در اسکریپ تنظیمات بود.در ضمن یادتون باشه این رابط spi به صورت halfduplex می باشد و من با دستور read ,write تونستم با میکروی lpc1768 ارتباط برقرار کنم با سرعت حداکثر 8mhz
    مشکل داشتید مطرح کنید جواب بدم.

  4. تشکرها از این نوشته :


  5. #3
    همکار silentshot آواتار ها
    تاریخ عضویت
    Dec 2010
    نام
    مهندس رحمانی
    نوشته ها
    138
    تشکر
    176
    تشکر شده 170 بار در 83 پست

    پیش فرض

    با تشکر اگه راه اندازی این رابط رو تحت یک اموزش بزارید ممنون می شیم
    در ضمن دوستان هم به اسم شما در بخش ویکی قرار می دن

    با تشکر
    ما زنده به آنیم که آرام نگیریم

  6. تشکرها از این نوشته :


  7. #4
    عضو جدید
    تاریخ عضویت
    Jun 2008
    نوشته ها
    6
    تشکر
    0
    تشکر شده 9 بار در 2 پست

    پیش فرض

    این اموزش تکمیلی تری هست که به صورت یک فایل برای استفاده دوستان اپلود کردم امیدوارم به درد بخورد.
    فايل هاي پيوست شده فايل هاي پيوست شده

  8. کاربران : 8 تشکر کرده اند از شما saeedhadi برای ارسال این پست سودمند:


  9. #5
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2007
    نوشته ها
    29
    تشکر
    3
    تشکر شده 0 بار در 0 پست

    پیش فرض

    مشکلی که من دارم اینه که بعد از کامپل کرنل با وجود استفاده از دستور modeprob هیچ چیزی به عنوان spi تو پوشه ی dev نمی یاد.

  10. #6
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2007
    نوشته ها
    29
    تشکر
    3
    تشکر شده 0 بار در 0 پست

    پیش فرض

    مشکل dev حل شد. حالا برنامه تستی که در pdf i هست رو اجرا که می کنم هیچ دیتایی روی اسکوپ تو پایه های spi نمی بینم.لطفا کمک کنید.fex فایل هم اینه
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: rar vedro.rar (4.2 کیلو بایت, 18 نمايش)

  11. #7
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2012
    نوشته ها
    30
    تشکر
    1
    تشکر شده 23 بار در 13 پست

    پیش فرض

    ابتدا سعی کنید از آخرین نسخه ی کرنل به روز شده استفاده کنید،با توجه به مسیر توسعه ی چیپ های فوق - spi برای تمامی چیپ ها تکمیل شده است.
    دسترسی به اخرین نسخه ای که از کوبین انتشار یافت . میتونی config کرنل رو هم برای Spi چک کنی تا مطمئن بشی.

    دستور
    modeprob برای ماژل هاست،اگه اشتباه نکنم، همچنین spi به عنوان درایور ثابت کرنل اضافه شده باشه نیازی به modeprob نیست.
    دسترسی به سند اصلی spi

    سایت حمایت از کوبی و برد های لینوکس (در اینده ای نزدیک مثال های spi و I2c رو قرار خواهیم داد) :
    bir-robotic.ir
    bir-robotic.ir

  12. کاربران : 2 تشکر کرده اند از شما ahravan برای ارسال این پست سودمند:


  13. #8
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2007
    نوشته ها
    29
    تشکر
    3
    تشکر شده 0 بار در 0 پست

    پیش فرض

    من modprobe رو انجام دادم.تو dev هم میاد تو نرم افزار هم ظاهرا همه چی درسته و داده ها دارن ارسال میشن ولی با اسکوپ چیزی رو پایه های کارت نمیبینم.
    نکنه باید حتما به یه جایی وصلش کنم؟

موضوعات مشابه

  1. ره اندازی smt160 با پورت موازی
    توسط M.ABDOLLAHI در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 27-04-2009, 21:34

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •