Saya sedang mengerjakan proyek V-USB yang muncul sebagai Keyboard menggunakan ATmega328p. Bagian USB berfungsi dengan baik (ini bukan proyek V-USB pertama saya), tetapi setelah saya memulai tumpukan V-USB usbInit()
, semua panggilan ke perpustakaan kartu SD gagal. Jika saya memanggil fungsi yang sama sebelumnya usbInit()
, semuanya berfungsi dengan baik.
Saya menggunakan klon Arduino yang disebut Diavolino, tetapi tanpa kerangka kerja Arduino / kabel. Saya memiliki USB yang terhubung ke I / O 2 dan 3 digital, dan kartu SD ke 10-13 (jalur SPI bawaan).
Saya melihat-lihat perpustakaan kartu SD dan tidak menemukan tanda-tanda menggunakan interupsi atau register selain SPxx
. Saya juga sudah grep
memikirkan kode V-USB, tetapi bahkan tidak menyentuh SPxx
register.
Tanda pertama dari masalah adalah ketika perangkat terputus ketika seharusnya mengakses kartu SD. Kemudian saya meletakkan usbPoll()
dan wdt_reset()
memanggil semua loop penanganan kartu SD, dan menemukan bahwa dalam kasus penulisan, kartu menunggu selamanya untuk pengakuan dari kartu setelah mengirim dua byte terakhir (CRC-16).
Perpustakaan kartu SD yang saya gunakan adalah sd_raw
oleh Roland Riegel.
Jawaban:
Saya punya masalah seperti itu dengan USART dan menyelesaikannya dengan mengubah pengaturan anjing penjaga. Seperti yang Anda ketahui V-USB menggunakan anjing penjaga dan jika Anda memberikan waktu ekstra dalam satu operasi, anjing penjaga akan diaktifkan. Coba nonaktifkan anjing jaga dan jika Anda melihat semuanya berjalan dengan baik, Anda dapat mengubah waktu anjing jaga atau Anda dapat membagi kode yang mengganggu (kode kartu SD dalam kasus Anda) menjadi bagian-bagian yang lebih kecil dan "Mengatur ulang" anjing jaga di antara mereka. Tapi jangan lupa untuk mengaktifkan kembali anjing penjaga Anda setelah debug karena tidak disarankan untuk menggunakan V-USB tanpa itu.
sumber