Tình hình là mình đang viết ứng dụng cho PIC18F4450, VS1053, ESP8266
Nguồn PIC18F4550 là 5V, ESP 3.3V. 2 con này giao tiếp bằng UART. Lúc trước mình không để ý lắm, h mới thấy 2 cái này chêch mức logic vậy sài lâu có vấn đề gì không. Vẫn chậy ào ào mấy bác.
Thứ 2 nữa là giao tiếp SPI giữa VS1053. Mình sài cái Shield của Andruino và thiết kế lại cho PIC. Schematic của module này http://www.tme.vn/upload/pdf/TMe_VS1053_Shield.pdf. Shield này đã có đệm 5V ra ngoài.
Mình đã đọc kĩ datasheet và hiểu rõ hoạt động của nó rồi.
Ở đây mình cần đọc dữ liệu trong thanh ghi SCI_MODE (giá trị mặc định là 0x4800): clear chân CS => send opcode 0x03 vào VS1053n=> send tiếp địa chỉ 8bit của SCI_MODE => chờ đọc 2 bytes dữ liệu trả về => set lại chân CS. Mình làm đúng như vậy mà trả về toàn là 0x0000 và 0xffff.
Code mình viết như này.
clearCS và setCS đã viết rồi
Mấy bác mình sai chỗ nào. Không biết cái mode của SPI có quan trọng không mà không thấy datasheet của VS1053 không nhắc tới. Với BITS = ?? trong khai báo SPI có ý nghĩa gì?. Mình đã thử đổi 8 và 16 vẫn không được.
Và hàm spi_read(dt) có tham số để làm gì vậy mấy bác, không viết tham số có sao không
Nguồn PIC18F4550 là 5V, ESP 3.3V. 2 con này giao tiếp bằng UART. Lúc trước mình không để ý lắm, h mới thấy 2 cái này chêch mức logic vậy sài lâu có vấn đề gì không. Vẫn chậy ào ào mấy bác.
Thứ 2 nữa là giao tiếp SPI giữa VS1053. Mình sài cái Shield của Andruino và thiết kế lại cho PIC. Schematic của module này http://www.tme.vn/upload/pdf/TMe_VS1053_Shield.pdf. Shield này đã có đệm 5V ra ngoài.
Mình đã đọc kĩ datasheet và hiểu rõ hoạt động của nó rồi.
Ở đây mình cần đọc dữ liệu trong thanh ghi SCI_MODE (giá trị mặc định là 0x4800): clear chân CS => send opcode 0x03 vào VS1053n=> send tiếp địa chỉ 8bit của SCI_MODE => chờ đọc 2 bytes dữ liệu trả về => set lại chân CS. Mình làm đúng như vậy mà trả về toàn là 0x0000 và 0xffff.
Code mình viết như này.
Code:
#USE SPI (MASTER, SPI1, MODE=0, BITS=16, STREAM=SPI_1, MSB_FIRST) #define SCI_MODE 0x00 .......................... setup_spi(spi_master|spi_l_to_h|spi_clk_div_16); clearCS(); delay_ms(100); spi_write(0x03); spi_write(SCI_MODE); delay_ms(100); d0=spi_read(); delay_ms(100); d1=spi_read(); delay_ms(200); setCS();
Mấy bác mình sai chỗ nào. Không biết cái mode của SPI có quan trọng không mà không thấy datasheet của VS1053 không nhắc tới. Với BITS = ?? trong khai báo SPI có ý nghĩa gì?. Mình đã thử đổi 8 và 16 vẫn không được.
Và hàm spi_read(dt) có tham số để làm gì vậy mấy bác, không viết tham số có sao không
