我們先嘗試驅動GPIO來點亮LED。
根據樹莓派驅動GPIO的網頁說明,有幾種模式:
1. C語言
2. C#語言
3. Ruby
4. Perl
5. Python
6. Scratch
7. Java
8. Shell
我們採用最接近單晶片形式的C語言來開發。
根據一份GPIO速度實驗的報告顯示
直接使用 C Native library 的速度最快,BCM 2835 則次之。
而乍看之下 BCM 2835 library 的複雜度也不算太高,跟 C Native library 相比是簡單多了。
於是根據 BCM 2835 library 網站的操作流程,下載函式庫並且解壓縮安裝:
tar zxvf bcm2835-1.35.tar.gz
cd bcm2835-1.35
./configure
make
sudo make check
sudo make install
經過編譯並且執行的結果卻是完全沒反應。
於是用盡了各種檢查手段,並且使用示波器確認信號,
示波器信號顯示完全是零,沒有反應就是沒有反應。
但是使用了這邊寫的以sysfs來操作GPIO卻是可以點亮。
這顯示硬體沒有壞,其實一切是正常的,那代表函式庫可能有問題了。
經過一番資料搜查,發現在一開始的頁面裡有段字句:
Note: For Raspberry Pi 2, change BCM2708_PERI_BASE to 0x3F000000 for the code to work.
並且底下附的程式碼是:
硬體的位址在 0x20000000 這似乎是針對 Pi 1 使用的。
於是檢查BCM2835的原始碼,也就是 bcm2835.h,裡面關於硬體位址則是
所以說,硬體位址不一樣,導致存取成功但是並沒有GPIO輸出嗎?
經過搜索,在樹莓派的專屬論壇有人提出類似問題,找到了這段對話
也就是說變更位址後應該就可以使用了吧。
於是將 bcm2835.h 內的位址資料加以變更
把圓框標記的位址變更為 Pi 2 的位址,也就是 0x3F000000。
並且把整個函式庫重新compiler一次,按照前面所講的安裝程序弄一次。
寫好的程式也要跟新的函式庫鏈結重新compiler一次。
而這次執行編譯完的檔案,LED就會閃亮了。
您好 想跟您請教 我可以在哪裡找到 bcm2835.h 這個檔案
回覆刪除我應該是遇到跟您一樣的問題 blink 沒有反應
您好 想跟您請教 我可以在哪裡找到 bcm2835.h 這個檔案
回覆刪除我應該是遇到跟您一樣的問題 blink 沒有反應
從這個頁面
刪除http://www.airspayce.com/mikem/bcm2835/index.html
下載檔案 bcm2835-1.52.tar.gz 解壓縮後
在src目錄下可以找到。