[Module CC1101 - SPI] Hướng dẫn cách dùng Module CC1101 giao tiếp SPI

minh_t57

Thành Viên PIF
Chào các bạn :6cool_boss:,
Hôm nay, mình sẽ hướng dẫn các bạn dùng Module CC1101 với giao tiếp bằng chuẩn giao tiếp SPI. Đối với bài này, mình sẽ không đi sâu vào cách hoạt động của chip CC1101 mà mình chỉ hướng dẫn sử dụng và dùng code mẫu.

Ngoài thị trường thì có nhiều loại Module CC1101 với giao tiếp SPI, nhưng cơ bản các chân giao tiếp sẽ giống nhau. Các thông số kỹ thuật thì các bạn xem trên các trang bán hàng để biết nguồn cấp, tốc độ giao tiếp SPI, tần số sóng,...

(Hình ảnh minh họa được lấy từ Internet)
Để tìm hiểu sâu hơn về chip CC1101, bạn có thể xem datasheet tại đây.

Code truyền và nhận cho Module CC1101:
  1. Download code mẫu tại đây.
  2. Import vào CCS.
    • Nếu bạn gặp lỗi
      Code:
      Error: Import failed for project 'Test_CC1101' because its compiler definition is not available. Please install the ARMv17.6 compiler before importing this project - click 'View > CCS App Center' to check if compiler updates are available, or install the compiler manually and register it with CCS through 'Preferences > CCS > Build > Compilers'
      thì hãy cài đặt lại đúng phiên bản compiler hoặc tự tạo project rồi copy những file cần thiết vào.
    • Các bạn nhớ chỉnh lại đường TIVAWare và driverlib nhé.
  3. Kết nối Module vào kit theo sơ đồ chân sau:
    Code:
    //            |   TIVA C   |        |  MODULE CC1101 |
    //            |         3v3|------->|VCC             |
    //            |         GND|------->|GND             |
    //            |         PB4|------->|CLK             |
    //            |         PB6|------->|MISO            |
    //            |         PB7|------->|MOSI            |
    //            |         PE0|------->|CSN             |
    //            |         PB2|------->|DO              |
    //            |         PB5|------->|D2              |
  4. Build code, nạp code và chạy thôi :6cool_boss:.
    • Nếu kit TIVA đang đóng vai trò là con phát tín hiệu thì bạn bỏ comment tại dòng
      Code:
      //#define TX
    • Nếu kit TIVA đang đóng vai trò là con nhận thì giữ nguyên.
Giải thích code:
  • Bạn muốn thay đổi sang SPI khác điều khiển cho Module, thì bạn vào file CC1101_spi.h thay đổi thành SPI mong muốn. Ở đây, mình dùng SSI2 (SSI được hiểu là SPI trong project này) để giao tiếp với CC1101.
    Code:
    #define CC1101_GDO0_PIN             GPIO_PIN_2
    #define CC1101_GDO2_PIN             GPIO_PIN_5
    #define CC1101_MOSI_PIN             GPIO_PIN_7
    #define CC1101_MISO_PIN             GPIO_PIN_6
    #define CC1101_SCLK_PIN             GPIO_PIN_4
    #define CC1101_CS_PIN               GPIO_PIN_0
    #define CC1101_GDO0_PORT            GPIO_PORTB_BASE
    #define CC1101_GDO2_PORT            GPIO_PORTB_BASE
    #define CC1101_MISO_PORT            GPIO_PORTB_BASE
    #define CC1101_MOSI_PORT            GPIO_PORTB_BASE
    #define CC1101_SCLK_PORT            GPIO_PORTB_BASE
    #define CC1101_CS_PORT              GPIO_PORTE_BASE
    #define CC1101_SPI                  SSI2_BASE
    
    #define CC1101_MISO_AF              GPIO_PB6_SSI2RX
    #define CC1101_MOSI_AF              GPIO_PB7_SSI2TX
    #define CC1101_SCLK_AF              GPIO_PB4_SSI2CLK
    
    #define CC1101_GDO0_CLK_ENABLE()    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB)
    #define CC1101_GDO2_CLK_ENABLE()    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB)
    #define CC1101_CS_CLK_ENABLE()      ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE)
    #define CC1101_SCLK_CLK_ENABLE()    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB)
    #define CC1101_MOSI_CLK_ENABLE()    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB)
    #define CC1101_MISO_CLK_ENABLE()    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB)
    #define CC1101_SPI_CLK_ENABLE()     ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2)
    
    #define CC1101_SPI_IRQn             INT_SSI2
    #define CC1101_GDO0_IRQn            INT_GPIOB
    #define CC1101_GDO2_IRQn            INT_GPIOB
  • Bạn muốn gửi chuỗi đi thì dùng hàm cc1101_forceSend(uint8_t *txBuffer, char size) với txBuffer là nơi chứa dữ liệu bạn muốn gửi và size là kích thước của khối dữ liệu bạn muốn gửi đi.
  • Bạn muốn nhận dữ liệu gửi về, bạn dùng hàm cc1101_receivepacket(uint8_t *rxBuffer, char *length) với rxBuffer là nơi chứa dữ liệu (nên đưa mảng vào) và length là số kí tự muốn đọc.
Như vậy, bạn có thể giao tiếp các Module CC1101 bằng chuẩn SPI với nhau. :1cool_byebye::1cool_byebye::1cool_byebye:
 
Last edited:
Top