2016年9月8日 星期四

Published 下午4:59 by with 3 comments

[實驗] Raspberry Pi 3 之 LED 閃亮

為了要能夠讓樹莓派做點簡單的小事,
我們先嘗試驅動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就會閃亮了。




      edit

3 則留言:

  1. 您好 想跟您請教 我可以在哪裡找到 bcm2835.h 這個檔案
    我應該是遇到跟您一樣的問題 blink 沒有反應

    回覆刪除
  2. 您好 想跟您請教 我可以在哪裡找到 bcm2835.h 這個檔案
    我應該是遇到跟您一樣的問題 blink 沒有反應

    回覆刪除
    回覆
    1. 從這個頁面
      http://www.airspayce.com/mikem/bcm2835/index.html
      下載檔案 bcm2835-1.52.tar.gz 解壓縮後
      在src目錄下可以找到。

      刪除