冰楓論壇

 找回密碼
 立即註冊
ads_sugarbook
搜索
查看: 752|回覆: 0
打印 上一主題 下一主題

[討論] USB隨身碟

[複製鏈接]

2609

主題

0

好友

945

積分

高級會員

Rank: 4

UID
373967
帖子
7386
主題
2609
精華
0
積分
945
楓幣
946
威望
925
存款
26000
贊助金額
0
推廣
0
GP
1205
閱讀權限
50
在線時間
405 小時
註冊時間
2023-1-12
最後登入
2024-4-28

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-5-5 20:08:45 |只看該作者 |倒序瀏覽
PIC16F877A微控制器制作可拆卸2TB以上容量USB隨身碟:

元件列表
PIC16F877A 微控制器
USB 3.0 控制器
存儲器模塊(2TB以上容量)
USB-A 連接器
空白電路板

腳位連接
以下是PIC16F877A微控制器與其他元件之間的連接方式:

PIC16F877A 的VCC腳位與USB 3.0控制器和存儲器模塊的VCC線連接。
PIC16F877A 的GND腳位與USB 3.0控制器和存儲器模塊的GND線連接。
PIC16F877A 的RA0-RX腳位與USB 3.0控制器的D+線連接。
PIC16F877A 的RA1-TX腳位與USB 3.0控制器的D-線連接。
存儲器模塊的CS、MOSI、MISO和SCK腳位分別與PIC16F877A的RB0、RB1、RB2和RB3腳位連接。
USB-A連接器的VCC、D+、D-和GND腳位分別與PIC16F877A的VCC、RA0、RA1和GND腳位連接。

程式碼
以下是PIC16F877A程式碼示例
用於控制USB隨身碟的基本功能
包括初始化微控制器、USB控制器和存儲器模塊
並且從存儲器模塊讀取數據並將其傳送到USB控制器
或者從USB控制器接收數據並將其寫入存儲器模塊。


#include <pic.h>
#include <usb.h>
#include <storage.h>

// 定義存儲器的容量(單位:字節)
#define STORAGE_CAPACITY (2UL * 1024UL * 1024UL * 1024UL * 2UL)

// 定義存儲器的扇區大小(單位:字節)
#define STORAGE_SECTOR_SIZE 512

// 定義存儲器的起始扇區位置
#define STORAGE_START_SECTOR 0

// 定義存儲器的結束扇區位置
#define STORAGE_END_SECTOR (STORAGE_CAPACITY / STORAGE_SECTOR_SIZE)

void main() {
    // 初始化 PIC16F877A 微控制器
    TRISB = 0; // 設置 RB 引腳
    TRISA = 0b00000011; // 設置 RA0 和 RA1 引腳
    ANSEL = 0; // 禁用 ADC
    CMCON = 0x07; // 禁用比較器
    PORTB = 0; // 清空 RB 引腳
    PORTA = 0; // 清空 RA 引腳

// 初始化 USB 控制器
usb_init(); // 初始化 USB 控制器
usb_wait_for_enumeration(); // 等待 USB 連接

// 初始化存儲器模塊
storage_init(STORAGE_CAPACITY, STORAGE_SECTOR_SIZE, STORAGE_START_SECTOR, STORAGE_END_SECTOR);

// 循環處理主要邏輯
while (1) {
    // 檢查是否有數據可從 USB 控制器讀取
    if (usb_has_data()) {
        // 從 USB 控制器讀取數據
        uint8_t buffer[64];
        uint8_t size = usb_receive_data(buffer, 64);

        // 將數據寫入存儲器模塊
        uint32_t sector = storage_get_next_write_sector();
        storage_write_sector(sector, buffer, size);
    }

    // 檢查是否有數據可從存儲器模塊讀取
    if (storage_has_data()) {
        // 從存儲器模塊讀取數據
        uint8_t buffer[64];
        uint32_t sector = storage_get_next_read_sector();
        storage_read_sector(sector, buffer, 64);

        // 將數據傳送到 USB 控制器
        usb_send_data(buffer, 64);
    }
}
}



此代碼使用了一些函數庫,如USB庫和存儲器庫,可以通過PIC C編譯器進行編譯和燒錄到PIC16F877A微控制器上。
該代碼的主要邏輯是檢查USB控制器和存儲器模塊中是否有數據可供讀取或寫入,並根據需要進行相應的操作。
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1骰子
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們職位招聘本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-4-28 07:26

回頂部