*目次 [#h3a27dc7] #contents *概要 [#d249131f] -BeagleBone --Linuxが搭載可能 --Linuxから高速にAD入出力が可能(アナログ出力はPWM) --USBホストあり -Originalと --BeagleBoneとBeagleBoneBlackがある. --Originalは全てのピンが使えるが,BlackはHDMIとeMMC supportで予約されているピンがある. --Beagle Bone Blackは内部のフラッシュにOSが入っているが,Beagle Boneはいっていない.SDからのみ. *導入 [#t4376ca5] -OSインストール --OSは[[ここ>http://www.elinux.org/Beagleboard:BeagleBone]]のAngstrom for BeagleBoneをddコマンドでSDカードに書き込み -シリアル設定 --Macでは,Getting Startedが使えない.このコマンドが使える→sudo screen /dev/tty.usbserial-hogehogeB 115200 @ Bの方 --Windows8では,Getting Started参照. -ネットワーク設定 --not yet *ログイン [#t3e67784] **Serial [#v570126c] ***Mac 10.9.4 [#o447c53e] sudo screen /dev/tty.usbserial-TIVAYAS4B 115200 # Bの方. **参考:screenコマンド [#mda84d95] -終了:終わったら"[Ctr]+[a], [Ctr]+[\]"でQuit & Kill -デタッチ:[Ctr]+[a], [Ctr]+[d] -スクリーン一覧:screen -ls -再生:screen -r id(screen -r 12345など) *参考 [#w6460a37] -[[ものすごく低位から頑張っているブログ>http://beagle1.blog.so-net.ne.jp/2011-06-05]] -[[C言語@BBBのサンプルコード>http://d.hatena.ne.jp/rti7743/20131219/1387447643]] -[[BeagleBoneの基本的なサンプルコード>http://www.cs.gunma-u.ac.jp/~nagai/wiki/index.php?BeagleBone%20%A4%CE%BB%C8%A4%A4%CA%FD]] *ピンアサイン [#jc78a356] -BeagleBone --GPIO: P8_3-P8_46とP9_11-P9_31とP9_41-P9_42 --AIN: P9_33とP9_35-40 --[[データシート>https://github.com/CircuitCo/BeagleBone-RevA5/blob/master/BeagleBone_revA5_SRM.pdf?raw=true]](55ページらへん) &ref(./BBBlackGPIOMap.png,30%); *GPIO [#ieee4879] -GPIO0-GPIO3までのモジュールがある. --どのモジュールの何ビット目がGPIOかは,[[データシート>https://github.com/CircuitCo/BeagleBone-RevA5/blob/master/BeagleBone_revA5_SRM.pdf?raw=true]]55ページのMode7で見てとれる.(gpio3[17]なら,GPIO3の17bit目.) --モジュールのそれぞれに先頭アドレスがある. #define GPIO0_BASE 0x44E07000 #define GPIO1_BASE 0x4804C000 #define GPIO2_BASE 0x481AC000 #define GPIO3_BASE 0x481AE000 #define GPIO_SIZE 0x00000FFF --先頭アドレスに以下のbitを足したアドレスから,重要な3つのアドレス空間がある #define GPIO_OE 0x134 // PINのInputかOutputかを設定 #define GPIO_SETDATAOUT 0x194 // このアドレスのbitに1を代入することで,PinをHIGHにする. #define GPIO_CLEARDATAOUT 0x190 // このアドレスのbitに1を代入することで,PinをLOWにする. --OEの設定 ---n bit目のピンは,*gpio_oe_addr & (1<<n)が,0なら出力で1なら入力 --STARTDATAOUTとCLEARDATAOUTの設定 ---*gpio_setdataout_addr &= (1 << n); ---*gpio_cleardataout_addr &= (1 << n); *リアルタイムOSの導入について [#j8bee116] -[[yonekenさんのページ>http://blog.livedoor.jp/k_yon/archives/52499027.html]] *APIの使い方 [#j0b5e89b] -[[PIOとAIO両方>http://d.hatena.ne.jp/rti7743/20120603/1338686912]] -[[Arduino風プログラムhttps://github.com/justjoheinz/beagleboneIO/]] °サンプルプログラム **LEDチカチカ(OnBoard) [#de9567a8] -いちいちCloseしないと反映されなかった. #include <iostream> #include <stdio.h> using namespace std; int main() { FILE *LEDHandle = NULL; const char *LEDBrightness = "/sys/class/leds/beaglebone::usr3/brightness"; for (int i = 0; i < 10; i++) { if (( LEDHandle = fopen( LEDBrightness, "r+")) != NULL ) { fwrite("1", sizeof(char), 1, LEDHandle); fclose(LEDHandle); } sleep(1); if (( LEDHandle = fopen( LEDBrightness, "r+")) != NULL ) { fwrite("0", sizeof(char), 1, LEDHandle); fclose(LEDHandle); } sleep(1); } return 0; } *指令 [#o6934800] -/sys/class/leds/beaglebone::usr{数字}/trigger --UserLEDが,どのような信号によってトリガーされるか(割り込みで) --catすると,現在何によって割り込みトリガーされるかを表示する. cat /sys/class/leds/beaglebone::usr[数字]/trigger --自分で制御したい場合はtriggerにnoneを設定する echo none > /sys/class/leds/beaglebone::usr[数字]/trigger -/sys/class/leds/beaglebone::usr[数字]/brightness --書き換えると,GPIOの電圧を設定(0でLOW,それ以外でHIGH) echo 0 > /sys/class/leds/beaglebone:green:usr0/brightness *Beagle Boneのsysfsは遅い [#cf3495e5] -GPIOを1回変えるだけで,0.1msもかかる! ** libgpiommap [#g0fb84b5] -[[ehayonさんが作ったGPIOライブラリを改変したもの>https://github.com/hamko/BeagleBone-GPIO]] --digitalWriteとdigitalReadは,/dev/memを開くものなので,高速 --pinModeは,/sys/kernel/debug/omap_muxを開くので,低速 --全ての関数で,/dev/memを開いていなければ開こうとする.initは必須ではないが,やらないと一番初めだけ遅くなる. -[[インストール方法>https://github.com/hamko/BeagleBone-GPIO/blob/master/README.md]] --転送 # 親機内 git clone https://github.com/hamko/BeagleBone-GPIO scp -r BeagleBone-GPIO-master root@beaglebone:~ --コンパイルとインストール # Beagle Board内 cd BeagleBone-GPIO make install --サンプル cd ~/BeagleBone-GPIO gcc main.c -lgpiommap ./a.out #ピカピカ光る **/dev/mem/を書き換える方法 [#k53b696a] -一回の書き換えに,250nsくらい. -http://stackoverflow.com/questions/13124271/driving-beaglebone-gpio-through-dev-mem --注意点:GPIO Driverとコンフリクトする可能性. -LEDチカチカ(BeagleBoneWhiteで動作確認済み) --beaglebone_gpio.h #ifndef _BEAGLEBONE_GPIO_H_ #define _BEAGLEBONE_GPIO_H_ #define GPIO1_START_ADDR 0x4804C000 #define GPIO1_END_ADDR 0x4804DFFF #define GPIO1_SIZE (GPIO1_END_ADDR - GPIO1_START_ADDR) #define GPIO_OE 0x134 #define GPIO_SETDATAOUT 0x194 #define GPIO_CLEARDATAOUT 0x190 #define USR0_LED (1<<21) #define USR1_LED (1<<22) #define USR2_LED (1<<23) #define USR3_LED (1<<24) #endif --gpiotest.c(拡張子はcでないとコンパイルできない) #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> #include <sys/stat.h> #include <fcntl.h> #include "beaglebone_gpio.h" int main(int argc, char *argv[]) { volatile void *gpio_addr = NULL; volatile unsigned int *gpio_oe_addr = NULL; volatile unsigned int *gpio_setdataout_addr = NULL; volatile unsigned int *gpio_cleardataout_addr = NULL; unsigned int reg; int fd = open("/dev/mem", O_RDWR); printf("Mapping %X - %X (size: %X)\n", GPIO1_START_ADDR, GPIO1_END_ADDR, GPIO1_SIZE); gpio_addr = mmap(0, GPIO1_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIO1_START_ADDR); gpio_oe_addr = gpio_addr + GPIO_OE; gpio_setdataout_addr = gpio_addr + GPIO_SETDATAOUT; gpio_cleardataout_addr = gpio_addr + GPIO_CLEARDATAOUT; if(gpio_addr == MAP_FAILED) { printf("Unable to map GPIO\n"); exit(1); } printf("GPIO mapped to %p\n", gpio_addr); printf("GPIO OE mapped to %p\n", gpio_oe_addr); printf("GPIO SETDATAOUTADDR mapped to %p\n", gpio_setdataout_addr); printf("GPIO CLEARDATAOUT mapped to %p\n", gpio_cleardataout_addr); reg = *gpio_oe_addr; printf("GPIO1 configuration: %X\n", reg); reg = reg & (0xFFFFFFFF - USR1_LED); *gpio_oe_addr = reg; printf("GPIO1 configuration: %X\n", reg); printf("Start blinking LED USR1\n"); while(1) { printf("ON\n"); *gpio_setdataout_addr= USR1_LED; sleep(1); printf("OFF\n"); *gpio_cleardataout_addr = USR1_LED; sleep(1); } close(fd); return 0; } **PRUを使う方法 [#u513cde4] -http://mitaka1954.cocolog-nifty.com/blog/2014/03/beaglebone-blac.html *Tips [#yf233bd4] -可変CPU速度をやめる sudo cpufreq-set --min 1GHz |