2010-08-25 17 views
5

Đó là một chip FT2232D và đèn LED được kết nối với BDBUS6.Làm cách nào để flash một đèn LED, sử dụng libftdi v0.18?

Thư viện ít tài liệu hơn tôi có thể (tốt hơn thư viện riêng của FTDI, thậm chí không hoạt động trên hạt nhân hiện đại), mã ví dụ duy nhất tôi có thể thấy điều này sử dụng hàm không được dùng nữa (tôi đã thử) nó dường như không hoạt động), và tôi hoàn toàn bối rối.

Càng cố gắng với điều này, càng khó khăn hơn. Tôi không tìm ai đó để làm bài tập về nhà cho tôi nhiều như tôi chỉ cần một cú huých đi đúng hướng. Bất kỳ trợ giúp nào được đánh giá cao (thậm chí là suy đoán).

Cập nhật: Tôi đã thử điều này, mặc dù ftdi_enable_bitbang() không còn được dùng nữa. Các mã sau đây biên dịch, nó chạy mà không cần barfing, nhưng không có blinkenlighten. Sơ đồ của thiết bị được đề cập có sẵn tại http://www.semtech.com/images/datasheet/sx1211ska_v1_std.pdf, trang 23. BDBUS6 và BDBUS7 được nối với đèn LED.

#include <stdio.h> 
#include <stdint.h> 
#include <string.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <ftdi.h> 

#define FTDI_VID    0x0403 
#define FTDI_PID    0x6010 


static struct ftdi_context ftdic_context; 

int main(void) { 
     int ret; 
     unsigned int i; 
     unsigned char c = 0; 

     // Initialize bitbang. 
//  ret = ft2232_bb_init(); 

     ftdi_usb_open(&ftdic_context, FTDI_VID, FTDI_PID); 
     ftdi_set_interface(&ftdic_context, INTERFACE_B); 
     ftdi_enable_bitbang(&ftdic_context, 0xb0); 

     // Trying to blink some lights. 
     printf("\nNow let's try to blinkenlights...\n"); 
     for (i = 0; i < 20; i++) { 
       c ^= 0x80; 
       ftdi_write_data(&ftdic_context, &c, 1); 
       sleep(1); 
     } 

     return EXIT_SUCCESS; 
} 
+0

thể trùng lặp của [Tôi gặp sự cố khi tìm mã mẫu cho chế độ mpsse của libftdi.] (Http: // stackoverflo w.com/questions/3527464/im-having-trouble-finding-example-code-for-libftdis-mpsse-spi-mode) –

+1

Không phải là bản sao, nhưng liên quan đến cùng một dự án phần mềm của tôi. –

Trả lời

8

Bạn cần khởi tạo ngữ cảnh ftdi trước khi có thể mở thiết bị với nó.

ftdi_init (& ftdic_context);

Ngoài ra, bạn cần đặt kênh giao diện trước khi mở thiết bị.

Heres chức năng tôi sử dụng để thiết lập một bối cảnh FTDI

int initFTDI(struct ftdi_context * ftdic) 
{ 
    unsigned char Mask = 0x1F; 
    int ret=0; 

    fprintf(stderr,"start init\n"); 

    ftdi_init(ftdic); 

    //for multi-channel ftdi chips eg(ft2232) 
    if(ftdi_set_interface(ftdic,INTERFACE_B)) 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if((ret = ftdi_usb_open(ftdic, VID, PID)) < 0){ 
     fprintf(stderr, "unable to open ftdi device: %d (%s)\n", ret, ftdi_get_error_string(ftdic)); 
     return EXIT_FAILURE; 
    } 
    if(ftdi_usb_reset(ftdic)) 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if(ftdi_usb_purge_buffers(ftdic)) //clean buffers 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if(ftdi_write_data_set_chunksize(ftdic,65536)) //64k transfer size 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if(ftdi_read_data_set_chunksize(ftdic,4096)) //64k transfer size 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if(ftdi_set_event_char(ftdic,false,0)) //disable event chars 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if(ftdi_set_error_char(ftdic,false,0)) //disable error chars 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if(ftdi_set_latency_timer(ftdic,2)) //Set the latency timer to 1mS (default is 16mS) 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if(ftdi_set_baudrate(ftdic,921600)) 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if(ftdi_setflowctrl(ftdic,SIO_RTS_CTS_HS)) //set flow control 
     fprintf(stderr,"%s\n",ftdi_get_error_string(ftdic)); 

    if ((ret = ftdi_set_bitmode(ftdic, 0x00, BITMODE_RESET)) < 0) 
    { 
     fprintf(stderr, "can't set bitmode to %x: %d (%s)\n", BITMODE_RESET, ret, ftdi_get_error_string(ftdic)); 
     fprintf(stderr, "RESET\n"); 
     return EXIT_FAILURE; 
    } 
    if ((ret = ftdi_set_bitmode(ftdic, Mask, BITMODE_BITBANG)) < 0) 

     fprintf(stderr, "can't set bitmode to %x: %d (%s)\n", BITMODE_BITBANG, ret, ftdi_get_error_string(ftdic)); 
     fprintf(stderr, "RESET\n"); 
     return EXIT_FAILURE; 
    } 

    //fprintf(stderr,"end init\n"); 

    return ret; 
} 
4
ftdi_enable_bitbang 

bị phản đối, bạn nên sử dụng

ftdi_set_bitmode(&ftdic, LED,BITMODE_BITBANG); 

thay vào đó, thấy documentation:

+0

Tôi chỉ muốn bạn biết rằng điều này đã được gần hai năm trước đây. Tôi thậm chí còn không làm việc ở nơi đó nữa ... họ đã đưa tôi ra khỏi ngày hôm đó tôi đã chứng minh việc sử dụng radio USB chết tiệt. –