Showing posts with label embedded. Show all posts
Showing posts with label embedded. Show all posts

Monday, May 05, 2025

FT232H + Adafruit Blinka + 0.19 inch OLED (SSD1306) on Windows 11

 FT232H + Adafruit Blinka on Windows 11

Windows Ver.24H2, OS Build 26.100.3915
Python 3.10.7

Download Zadig from its page: https://zadig.akeo.ie/

Plug FT232H board to Windows

Open Zadig and reinstall the driver for FT232H, follow the instructions in this page:
https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/windows

Make sure selecting the correct device then select "libusbK", then click on "Replace Driver"

  • Driver: FTDIBUS (...)
  • USB ID: 0403 6014


Before & After replace the driver:

  • libusbK USB Devices should appear in the Device Manager


Create python virtual env then activate python virtual env

% mkdir ws_py && cd ws_py
% python -m venv .venv
% .venv\Scripts\activate.bat

Install additional libraries to check if FT232H can be recognized

% pip3 install pyusb
% pip3 install pyftdi

Then try to run this code to show the device information

>>> import usb
>>> import usb.util
>>> dev = usb.core.find(idVendor=0x0403, idProduct=0x6014)
>>> print(dev)


Now we can try to use this with the 0.91 inch OLED SSD1306 by executing the following steps

(.venv) % pip install Pillow
(.venv) % pip install adafruit-circuitpython-ssd1306
(.venv) % pip install adafruit-blinka


(.venv) % git clone https://github.com/adafruit/Adafruit_CircuitPython_SSD1306.git
(.venv) % cd Adafruit_CircuitPython_SSD1306\examples
(.venv) % set BLINKA_FT232H=1 → Always need this ENV when using FT232H(!!!)
(.venv) % python ssd1306_simpletest.py

Now we should see something drawn on the tiny display

Done.


Raspberry Pi Zero 2W + 0.91 inch OLED (SSD1306)

Playing with this cheap OLED display:
Size: 0.91 inch
Resolution: 128 x 32 pixels
Interface: I2C
Operating voltage: 3.3 V~5V
 
Update the system once:

$ sudo apt update
$ sudo apt upgrade -y

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm

$ uname -a
Linux pizero2w 6.12.25+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.25-1+rpt1 (2025-04-30) aarch64 GNU/Linux

Setup I2C for Raspi

$ sudo raspi-config → then enable I2C communication from "Interface Options" menu
$ sudo reboot

Install I2C utilities

$ sudo apt install i2c-tools

Connect the display to raspi

Display GND →  Raspi GND pin no.5
Display VCC →  Raspi 3V pin no.1
Display SDA  →  Raspi pin no.2
Display SCK  →  Raspi pin no.3

Check if Raspi can detect the display 

$ i2cdetect -y 1 → this command should show "0x3C" address


Install the following packages for python environment:

$ sudo apt install python3-pip
$ sudo apt install python3-venv

Create python virtual environment

$ mkdir $HOME/ws_py
$ cd $HOME/ws_py && python -m venv .venv

Activate python virtual environment (current working directory is $HOME/ws_py)

$ . .venv/bin/activate
(.venv) ~/ws_py $

After python virtual environment is activated, install python packages using pip

$ pip install Pillow
$ pip install RPi.GPIO
$ pip install adafruit-circuitpython-ssd1306
$ pip install adafruit-blinka

Check if the display is working properly using example code from Adafruit

$ cd $HOME/ws_py
$ git clone https://github.com/adafruit/Adafruit_CircuitPython_SSD1306.git
$ cd examples
$ python ssd1306_stats.py

The display should show the IP address, CPU, memory and disk info of the raspberry pi after this step




Friday, September 02, 2016

2進数 printf binary format

Example to printf in binary data ( for only data size <= uint32_t )

バイナリ形式にprintf出力したいが、いいサンプルが見つからなかったため、作成しました。

#include <stdio.h>
#include <stdint.h>
#include <limits.h>
#include <assert.h>

#define PRINTB(x) { \
        uint32_t sz = sizeof(x) * CHAR_BIT; \
        uint32_t va = 0; \
        assert(sz <= sizeof(uint32_t) * CHAR_BIT); \
        while (sz){ \
            va = 1 << (sz-1); \
            (x & va) ? printf("1") : printf("0") ; \
            va = 0; \
            sz = sz - 1; \
        } \
        printf("\n"); }

int main()
{
    char x = 0x1;
    PRINTB(x);

    return 0;
}

Wednesday, October 14, 2015

beagleboard C4 not -xM not bone startup parameters and msg

Texas Instruments X-Loader 1.5.0 (Jun 14 2011 - 22:04:07)
Beagle Rev C5
Reading boot sector
Loading u-boot.bin from mmc


U-Boot 2011.03-rc1-00000-g9a3cc57-dirty (Apr 01 2011 - 17:41:42)

OMAP3530-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 720 mHz
OMAP3 Beagle board + LPDDR/NAND
I2C:   ready
DRAM:  256 MiB
NAND:  512 MiB
MMC:   OMAP SD/MMC: 0
In:    serial
Out:   serial
Err:   serial
Beagle Rev C4
timed out in wait_for_pin: I2C_STAT=0
No EEPROM on expansion board
Die ID #530000040000000004037f660901d01b
Hit any key to stop autoboot:  0
OMAP3 beagleboard.org #
OMAP3 beagleboard.org # printenv
baudrate=115200
beaglerev=C4
bootcmd=if mmc rescan ${mmcdev}; then if userbutton; then setenv bootenv user.txt;fi;echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;if run loaduimage; then run mmcboot;fi;fi;run nandboot;
bootdelay=3
buddy=none
camera=none
console=ttyS2,115200n8
defaultdisplay=dvi
dieid#=530000040000000004037f660901d01b
dvimode=640x480MR-16@60
filesize=30E004
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
loadaddr=0x80200000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
loadramdisk=fatload mmc ${mmcdev} ${rdaddr} ramdisk.gz
loaduimage=ext2load mmc ${mmcdev}:2 ${loadaddr} /boot/uImage
loaduimagefat=fatload mmc ${mmcdev} ${loadaddr} uImage
mmcargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype}
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${loadaddr}
mmcdev=0
mmcroot=/dev/mmcblk0p2 rw
mmcrootfstype=ext3 rootwait
mpurate=auto
mtddevname=x-loader
mtddevnum=0
mtdids=nand0=nand
mtdparts=mtdparts=nand:512k(x-loader),1920k(u-boot),128k(u-boot-env),4m(kernel),-(fs)
nandargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype}
nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} 280000 400000; bootm ${loadaddr}
nandroot=ubi0:beagleboard-rootfs ubi.mtd=4
nandrootfstype=ubifs
partition=nand0,0
ramargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${ramroot} rootfstype=${ramrootfstype}
ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr}
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=0x81000000,64M
ramrootfstype=ext2
rdaddr=0x81000000
usbtty=cdc_acm
vram=12M
writeenv=setenv nandrootfstype ubifs;setenv nandroot 'ubi0:beagleboard-rootfs ubi.mtd=4';setenv uenvcmd;setenv bootenv;saveenv
writemlo=ext2load mmc 0:2 82000000 /boot/MLO;nandecc hw;nand erase.part x-loader;nand write 82000000 0 ${filesize}
writeuboot=ext2load mmc 0:2 82000000 /boot/u-boot.bin;nandecc sw;nand erase 80000 160000;nand write 82000000 80000 160000
writeuimage=ext2load mmc 0:2 82000000 /boot/uImage;nandecc sw;nand erase 280000 400000;nand write 82000000 280000 400000

Environment size: 2760/131068 bytes
OMAP3 beagleboard.org #



Texas Instruments X-Loader 1.5.0 (Jun 14 2011 - 22:04:07)
Beagle Rev C5
Reading boot sector
Loading u-boot.bin from mmc


U-Boot 2011.03-rc1-00000-g9a3cc57-dirty (Apr 01 2011 - 17:41:42)

OMAP3530-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 720 mHz
OMAP3 Beagle board + LPDDR/NAND
I2C:   ready
DRAM:  256 MiB
NAND:  512 MiB
MMC:   OMAP SD/MMC: 0
In:    serial
Out:   serial
Err:   serial
Beagle Rev C4
timed out in wait_for_pin: I2C_STAT=0
No EEPROM on expansion board
Die ID #530000040000000004037f660901d01b
Hit any key to stop autoboot:  0
The user button is currently NOT pressed.
SD/MMC found on device 0
usage: fatload     [bytes]
Loading file "/boot/uImage" from mmc device 0:2 (xxa2)
3203076 bytes read
Booting from mmc ...
## Booting kernel from Legacy Image at 80200000 ...
   Image Name:   Angstrom/2.6.32/beagleboard
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3203012 Bytes = 3.1 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux................................................................................................................................................................................................................. done, booting the kernel.
[    0.000000] Linux version 2.6.32 (joel@chase-ubuntu) (gcc version 4.3.3 (GCC) ) #3 PREEMPT Mon Jul 18 23:22:40 CDT 2011
[    0.000000] CPU: ARMv7 Processor [411fc083] revision 3 (ARMv7), cr=10c53c7f
[    0.000000] CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
[    0.000000] Machine: OMAP3 Beagle Board
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] OMAP3430/3530 ES3.1 (l2cache iva sgx neon isp 720m )
[    0.000000] SRAM: Mapped pa 0x40200000 to va 0xfe400000 size: 0x100000
[    0.000000] Reserving 12582912 bytes SDRAM for VRAM
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 65024
[    0.000000] Kernel command line: console=ttyS2,115200n8 mpurate=auto buddy=none camera=none vram=12M omapfb.mode=dvi:640x480MR-16@60 omapdss.def_disp=dvi root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait
[    0.000000] Beagle expansionboard: none
[    0.000000] Beagle cameraboard: none
[    0.000000] PID hash table entries: 1024 (order: 0, 4096 bytes)
[    0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
[    0.000000] Memory: 256MB = 256MB total
[    0.000000] Memory: 240384KB available (5900K code, 673K data, 204K init, 0K highmem)
[    0.000000] Hierarchical RCU implementation.
[    0.000000] NR_IRQS:402
[    0.000000] Clocking rate (Crystal/Core/MPU): 26.0/332/500 MHz
[    0.000000] Reprogramming SDRC clock to 332000000 Hz
[    0.000000] GPMC revision 5.0
[    0.000000] IRQ: Found an INTC at 0xfa200000 (revision 4.0) with 96 interrupts
[    0.000000] Total of 96 interrupts on 1 active controller
[    0.000000] OMAP GPIO hardware version 2.5
[    0.000000] OMAP clockevent source: GPTIMER12 at 32768 Hz
[    0.000000] Console: colour dummy device 80x30
[    0.000000] Calibrating delay loop... 487.36 BogoMIPS (lpj=1904640)
[    0.000000] Mount-cache hash table entries: 512
[    0.000000] CPU: Testing write buffer coherency: ok
[    0.000000] tmpfs: No value for mount option 'mode'
[    0.000000] devtmpfs: initialized
[    0.000000] regulator: core version 0.5
[    0.000000] NET: Registered protocol family 16
[    0.000000] OMAP3 Beagle Rev: C4
[    0.000000] Found NAND on CS0
[    0.000000] Registering NAND on CS0
[    0.000000] Unable to get DVI reset GPIO
[   10.857788] OMAP DMA hardware revision 4.0
[   10.866699] bio: create slab  at 0
[   10.868286] SCSI subsystem initialized
[   10.870056] usbcore: registered new interface driver usbfs
[   10.870239] usbcore: registered new interface driver hub
[   10.870483] usbcore: registered new device driver usb
[   10.879852] i2c_omap i2c_omap.1: bus 1 rev3.12 at 2600 kHz
[   10.882965] twl4030: PIH (irq 7) chaining IRQs 368..375
[   10.882995] twl4030: power (irq 373) chaining IRQs 376..383
[   10.883392] twl4030: gpio (irq 368) chaining IRQs 384..401
[   10.885070] regulator: VUSB1V5: 1500 mV normal standby
[   10.885375] regulator: VUSB1V8: 1800 mV normal standby
[   10.885681] regulator: VUSB3V1: 3100 mV normal standby
[   10.887176] twl4030_usb twl4030_usb: Initialized TWL4030 USB module
[   10.887786] regulator: VMMC1: 1850 <--> 3150 mV normal standby
[   10.888122] regulator: VDAC: 1800 mV normal standby
[   10.888458] regulator: VPLL2: 1800 mV normal standby
[   10.888793] regulator: VSIM: 1800 <--> 3000 mV normal standby
[   10.889221] regulator: VAUX3: 1800 mV normal standby
[   10.889648] regulator: VAUX4: 1800 mV normal standby
[   10.902740] i2c_omap i2c_omap.2: bus 2 rev3.12 at 400 kHz
[   10.903015] i2c_omap i2c_omap.3: bus 3 rev3.12 at 100 kHz
[   10.904602] Switching to clocksource 32k_counter
[   10.917053] musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=0
[   10.919830] musb_hdrc: USB OTG mode controller at fa0ab000 using DMA, IRQ 92
[   10.919860] musb_hdrc musb_hdrc: MUSB HDRC host driver
[   10.920013] musb_hdrc musb_hdrc: new USB bus registered, assigned bus number 1
[   10.920196] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[   10.920227] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   10.920257] usb usb1: Product: MUSB HDRC host driver
[   10.920257] usb usb1: Manufacturer: Linux 2.6.32 musb-hcd
[   10.920288] usb usb1: SerialNumber: musb_hdrc
[   10.921173] hub 1-0:1.0: USB hub found
[   10.921203] hub 1-0:1.0: 1 port detected
[   10.922515] NET: Registered protocol family 2
[   10.922760] IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
[   10.923431] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
[   10.923675] TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
[   10.923828] TCP: Hash tables configured (established 8192 bind 8192)
[   10.923858] TCP reno registered
[   10.923858] UDP hash table entries: 256 (order: 0, 4096 bytes)
[   10.923889] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[   10.924224] NET: Registered protocol family 1
[   10.924743] RPC: Registered udp transport module.
[   10.924774] RPC: Registered tcp transport module.
[   10.924774] RPC: Registered tcp NFSv4.1 backchannel transport module.
[   10.925903] omap-iommu omap-iommu.0: isp registered
[   10.928100] VFS: Disk quotas dquot_6.5.2
[   10.928314] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[   10.929687] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[   10.930725] JFFS2 version 2.2. (NAND) (SUMMARY)  c 2001-2006 Red Hat, Inc.
[   10.931762] msgmni has been set to 469
[   10.937255] alg: No test for stdrng (krng)
[   10.937622] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
[   10.937652] io scheduler noop registered
[   10.937652] io scheduler deadline registered
[   10.937835] io scheduler cfq registered (default)
[   10.998718] OMAP DSS rev 2.0
[   10.998779] OMAP DISPC rev 3.0
[   10.998840] OMAP VENC rev 2
[   10.999145] OMAP DSI rev 1.0
[   11.339508] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[   11.360626] serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654
[   11.380798] serial8250.1: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654
[   11.400970] serial8250.2: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654
[   11.954193] console [ttyS2] enabled
[   11.966583] brd: module loaded
[   11.973999] loop: module loaded
[   11.978607] omap2-nand driver initializing
[   11.983123] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xbc (Micron NAND 512MiB 1,8V 16-bit)
[   11.992340] cmdlinepart partition parsing not available
[   11.997619] Creating 5 MTD partitions on "omap2-nand":
[   12.002868] 0x000000000000-0x000000080000 : "X-Loader"
[   12.009521] 0x000000080000-0x000000260000 : "U-Boot"
[   12.016265] 0x000000260000-0x000000280000 : "U-Boot Env"
[   12.022644] 0x000000280000-0x000000680000 : "Kernel"
[   12.030212] 0x000000680000-0x000020000000 : "File System"
[   12.245422] usbcore: registered new interface driver catc
[   12.250915] catc: v2.8:CATC EL1210A NetMate USB Ethernet driver
[   12.257019] usbcore: registered new interface driver kaweth
[   12.262634] pegasus: v0.6.14 (2006/09/27), Pegasus/Pegasus II USB Ethernet driver
[   12.270294] usbcore: registered new interface driver pegasus
[   12.276031] rtl8150: v0.6.2 (2004/08/27):rtl8150 based usb-ethernet driver
[   12.283081] usbcore: registered new interface driver rtl8150
[   12.288909] usbcore: registered new interface driver asix
[   12.294464] usbcore: registered new interface driver cdc_ether
[   12.300476] usbcore: registered new interface driver dm9601
[   12.306274] usbcore: registered new interface driver smsc95xx
[   12.312194] usbcore: registered new interface driver gl620a
[   12.317871] usbcore: registered new interface driver net1080
[   12.323730] usbcore: registered new interface driver plusb
[   12.329406] usbcore: registered new interface driver rndis_host
[   12.335510] usbcore: registered new interface driver cdc_subset
[   12.341583] usbcore: registered new interface driver zaurus
[   12.347320] usbcore: registered new interface driver MOSCHIP usb-ethernet driver
[   12.355590] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[   12.362579] ehci-omap ehci-omap.0: OMAP-EHCI Host Controller
[   12.368713] ehci-omap ehci-omap.0: new USB bus registered, assigned bus number 2
[   12.376403] ehci-omap ehci-omap.0: irq 77, io mem 0x48064800
[   12.396942] ehci-omap ehci-omap.0: USB 2.0 started, EHCI 1.00
[   12.402862] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
[   12.409759] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   12.417083] usb usb2: Product: OMAP-EHCI Host Controller
[   12.422454] usb usb2: Manufacturer: Linux 2.6.32 ehci_hcd
[   12.427886] usb usb2: SerialNumber: ehci-omap.0
[   12.433319] hub 2-0:1.0: USB hub found
[   12.437194] hub 2-0:1.0: 3 ports detected
[   12.467468] Initializing USB Mass Storage driver...
[   12.472595] usbcore: registered new interface driver usb-storage
[   12.478668] USB Mass Storage support registered.
[   12.483795] mice: PS/2 mouse device common for all mice
[   12.489501] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[   12.497619] input: twl4030_pwrbutton as /devices/platform/i2c_omap.1/i2c-1/1-0049/twl4030_pwrbutton/input/input1
[   12.508422] i2c /dev entries driver
[   12.512756] Linux video capture interface: v2.00
[   12.517791] omap-iommu omap-iommu.0: isp: version 1.1
[   12.524993] vpfe_init
[   12.527954] OMAP Watchdog Timer Rev 0x31: initial timeout 60 sec
[   12.534912] cpuidle: using governor ladder
[   12.539123] cpuidle: using governor menu
[   12.647277] mmci-omap-hs mmci-omap-hs.1: err -16 configuring card detect
[   12.654357] Registered led device: beagleboard::usr0
[   12.659576] Registered led device: beagleboard::usr1
[   12.665924] Registered led device: beagleboard::pmu_stat
[   12.673889] usbcore: registered new interface driver usbhid
[   12.679565] usbhid: USB HID core driver
[   12.683654] Advanced Linux Sound Architecture Driver Version 1.0.21.
[   12.690734] usbcore: registered new interface driver snd-usb-audio
[   12.764556] usb 2-2: new high speed USB device using ehci-omap and address 2
[   12.780700] No device for DAI omap-mcbsp-dai-0
[   12.785156] No device for DAI omap-mcbsp-dai-1
[   12.789672] No device for DAI omap-mcbsp-dai-2
[   12.794158] No device for DAI omap-mcbsp-dai-3
[   12.798675] No device for DAI omap-mcbsp-dai-4
[   12.803192] OMAP3 Beagle SoC init
[   12.808319] asoc: twl4030 <-> omap-mcbsp-dai-0 mapping ok
[   12.821594] ALSA device list:
[   12.824615]   #0: omap3beagle (twl4030)
[   12.828643] oprofile: using arm/armv7
[   12.832611] TCP cubic registered
[   12.835937] NET: Registered protocol family 17
[   12.840454] NET: Registered protocol family 15
[   12.845092] lib80211: common routines for IEEE802.11 drivers
[   12.850860] ThumbEE CPU extension supported.
[   12.855133] Power Management for TI OMAP3.
[   12.860931] SmartReflex driver initialized
[   12.876037] ------------[ cut here ]------------
[   12.880706] WARNING: at arch/arm/mach-omap2/dpll.c:439 omap3_noncore_dpll_set_rate+0x228/0x26c()
[   12.889526] Modules linked in:
[   12.892639] [] (unwind_backtrace+0x0/0xdc) from [] (warn_slowpath_common+0x4c/0x80)
[   12.902099] [] (warn_slowpath_common+0x4c/0x80) from [] (omap3_noncore_dpll_set_rate+0x228/0x26c)
[   12.912780] [] (omap3_noncore_dpll_set_rate+0x228/0x26c) from [] (omap2_clk_set_rate+0x24/0x34)
[   12.923278] [] (omap2_clk_set_rate+0x24/0x34) from [] (clk_set_rate+0x4c/0xac)
[   12.932281] [] (clk_set_rate+0x4c/0xac) from [] (program_opp+0xe0/0x180)
[   12.940795] [] (program_opp+0xe0/0x180) from [] (resource_set_opp_level+0xf0/0x16c)
[   12.950225] [] (resource_set_opp_level+0xf0/0x16c) from [] (set_opp+0x3c/0x100)
[   12.959320] [] (set_opp+0x3c/0x100) from [] (update_resource_level+0xa8/0xcc)
[   12.968261] [] (update_resource_level+0xa8/0xcc) from [] (set_freq+0x110/0x138)
[   12.977355] [] (set_freq+0x110/0x138) from [] (update_resource_level+0xa8/0xcc)
[   12.986450] [] (update_resource_level+0xa8/0xcc) from [] (omap_target+0x5c/0x78)
[   12.995666] [] (omap_target+0x5c/0x78) from [] (__cpufreq_driver_target+0x5c/0x78)
[   13.005035] [] (__cpufreq_driver_target+0x5c/0x78) from [] (cpufreq_governor_performance+0x48/0x5c)
[   13.015869] [] (cpufreq_governor_performance+0x48/0x5c) from [] (__cpufreq_governor+0x160/0x1bc)
[   13.026458] [] (__cpufreq_governor+0x160/0x1bc) from [] (__cpufreq_set_policy+0x190/0x220)
[   13.036529] [] (__cpufreq_set_policy+0x190/0x220) from [] (cpufreq_add_dev+0x3dc/0x564)
[   13.046325] [] (cpufreq_add_dev+0x3dc/0x564) from [] (sysdev_driver_register+0xb0/0x120)
[   13.056243] [] (sysdev_driver_register+0xb0/0x120) from [] (cpufreq_register_driver+0xec/0x1cc)
[   13.066741] [] (cpufreq_register_driver+0xec/0x1cc) from [] (do_one_initcall+0x5c/0x1bc)
[   13.076629] [] (do_one_initcall+0x5c/0x1bc) from [] (kernel_init+0xa4/0x128)
[   13.085479] [] (kernel_init+0xa4/0x128) from [] (kernel_thread_exit+0x0/0x8)
[   13.094329] ---[ end trace b368982c5321ef30 ]---
[   13.099243] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 1
[   13.107635] registered taskstats version 1
[   13.112945] fbcvt: 640x480@60: CVT Name - .307M3-R
[   13.128906] Console: switching to colour frame buffer device 80x30
[   13.142272] regulator_init_complete: incomplete constraints, leaving VAUX3 on
[   13.152801] regulator_init_complete: incomplete constraints, leaving VDAC on
[   13.160522] omap_vout omap_vout: probed for an unknown device
[   13.166748] Waiting for root device /dev/mmcblk0p2...
[   13.172882] usb 2-2: New USB device found, idVendor=05e3, idProduct=0608
[   13.179656] usb 2-2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[   13.186859] usb 2-2: Product: USB2.0 Hub
[   13.191833] hub 2-2:1.0: USB hub found
[   13.196105] hub 2-2:1.0: 4 ports detected
[   13.225433] mmc0: new high speed SDHC card at address ebdd
[   13.231353] mmcblk0: mmc0:ebdd S08GE 7.31 GiB
[   13.236175]  mmcblk0: p1 p2
[   13.491271] usb 2-2.3: new low speed USB device using ehci-omap and address 3
[   13.620239] usb 2-2.3: New USB device found, idVendor=093a, idProduct=2510
[   13.627227] usb 2-2.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   13.634613] usb 2-2.3: Product: ELECOM USB Optical Mouse
[   13.639984] usb 2-2.3: Manufacturer: PixArt
[   13.648956] input: PixArt ELECOM USB Optical Mouse as /devices/platform/ehci-omap.0/usb2/2-2/2-2.3/2-2.3:1.0/input/input2
[   13.660430] generic-usb 0003:093A:2510.0001: input: USB HID v1.11 Mouse [PixArt ELECOM USB Optical Mouse] on usb-ehci-omap.0-2.3/input0
[   13.756896] usb 2-2.4: new low speed USB device using ehci-omap and address 4
[   13.887237] usb 2-2.4: New USB device found, idVendor=046d, idProduct=c31c
[   13.894195] usb 2-2.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   13.901611] usb 2-2.4: Product: USB Keyboard
[   13.905975] usb 2-2.4: Manufacturer: Logitech
[   13.918121] input: Logitech USB Keyboard as /devices/platform/ehci-omap.0/usb2/2-2/2-2.4/2-2.4:1.0/input/input3
[   13.928710] generic-usb 0003:046D:C31C.0002: input: USB HID v1.10 Keyboard [Logitech USB Keyboard] on usb-ehci-omap.0-2.4/input0
[   13.950988] input: Logitech USB Keyboard as /devices/platform/ehci-omap.0/usb2/2-2/2-2.4/2-2.4:1.1/input/input4
[   13.961517] generic-usb 0003:046D:C31C.0003: input: USB HID v1.10 Device [Logitech USB Keyboard] on usb-ehci-omap.0-2.4/input1
[   22.298767] EXT3-fs (mmcblk0p2): warning: maximal mount count reached, running e2fsck is recommended
[   22.308074] kjournald starting.  Commit interval 5 seconds
[   22.680114] EXT3-fs (mmcblk0p2): using internal journal
[   22.685394] EXT3-fs (mmcblk0p2): recovery complete
[   23.054473] EXT3-fs (mmcblk0p2): mounted filesystem with writeback data mode
[   23.061676] VFS: Mounted root (ext3 filesystem) on device 179:2.
[   23.070465] devtmpfs: mounted
[   23.073547] Freeing init memory: 204K
INIT: version 2.86 booting
Please wait: booting...
Starting udev
[   24.860473] twl_rtc twl_rtc: rtc core: registered twl_rtc as rtc0
[   25.100097] twl_rtc twl_rtc: Power up reset detected.
[   25.285583] twl_rtc twl_rtc: Enabling TWL-RTC.
Remounting root file system...
Caching udev devnodes
Populating dev cache
[   33.610198] Bluetooth: Core ver 2.15
[   33.614959] NET: Registered protocol family 31
[   33.619537] Bluetooth: HCI device and connection manager initialized
[   33.625976] Bluetooth: HCI socket layer initialized
[   33.650756] Bluetooth: L2CAP ver 2.14
[   33.654449] Bluetooth: L2CAP socket layer initialized
[   33.679992] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[   33.826782] NET: Registered protocol family 10
[   33.902038] NET: Registered protocol family 23
[   33.925933] IrCOMM protocol (Dag Brattli)
[   34.062225] Bluetooth: RFCOMM TTY layer initialized
[   34.067169] Bluetooth: RFCOMM socket layer initialized
[   34.072784] Bluetooth: RFCOMM ver 1.11
ALSA: Restoring mixer settings...
Configuring network interfaces... /usr/sbin/alsactl: parse:1655: Unable to open file '/usr/share/alsa/init/00main': No such file or directory
/usr/sbin/alsactl: set_control:1267: failed to obtain info for control #24 (No such file or directory)
ifconfig: SIOCGIFFLAGS: No such device
ifconfig: SIOCGIFFLAGS: No such device
eth0      No such device

ifconfig: SIOCGIFFLAGS: No such device
ifconfig: SIOCGIFFLAGS: No such device
ifconfig: SIOCGIFFLAGS: No such device
usb0      No such device

ifconfig: SIOCGIFFLAGS: No such device
done.
Starting portmap daemon: portmap.
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
Sat Jun 25 06:31:00 BST 2011
INIT: Entering runlevel: 5/S99finish.sh: line 10
Starting system message bus: dbus.
Starting Hardware abstraction layer hald
Configuring leds:
  beagleboard::pmu_stat: none
  beagleboard::usr0: heartbeat
  beagleboard::usr1: mmc0
Starting Dropbear SSH server: dropbear.
Starting advanced power management daemon: No APM support in kernel
(failed.)
Starting Vixie-cron.
Starting Samba: smbd nmbd.
Starting syslogd/klogd: done
Starting internet superserver: xinetd.
 * Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon                       [ ok ]
Starting PVR
cups: started scheduler.
User button not pressed, not flashing NAND
Starting GNOME Display Manager gdm
Starting Pulseaudio in system mode..

.-------.
|       |                  .-.
|   |   |-----.-----.-----.| |   .----..-----.-----.
|       |     | __  |  ---'| '--.|  .-'|     |     |
|   |   |  |  |     |---  ||  --'|  |  |  '  | | | |
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'
                -'  |
                '---'

The Angstrom Distribution beagleboard ttyS2

Angstrom 2010.7-test-20110220 beagleboard ttyS2

beagleboard login:

Thursday, November 08, 2012

Beagleboard/Beaglebone AM335X SDK

Beagleboard/Beaglebone AM335X linux SDK [ original page ]

■仮想環境
基本は、Ubuntu 10.04だけをサポートするが、他のバージョンも使用出来る事を確認した。(SDKのOSバージョンチェックのシェルを書き換えればOk)。仮想マシーンの構築はこのページを参照。

■SDKのインストール
このページから"ti-sdk-am335x-evm-x.x.x.x-Linux-x86-Install"ファイルをダウンロード。
実行すると、インストール先を聞いてくるので、下記Dirを指定
$HOME/ti-sdk-am335x-evm-...-linux-x86 (以降 $TI_SDK_PATH とする)
これで、SDKファイルが展開される。続いては、SDKのセットアップは下記の順番で行う
  • ホストPCのUbuntuバージョンチェック
  • ホストPCに必要なパッケージのインストール
  • ターゲットファイル・システムインストール
  • NFS設定
  • TFTP設定
  • Minicom設定
  • U-boot設定
  • ロードブードスクリプト作成
●1.SDK設定シェルの実行
$ cd $TI_SDK_PATH; ./setup.sh
ここでもし、Ubuntu 10.04を使用しなければエラーが出る。別のバージョンのubuntuにインストールしたい場合は、シェールスクリプトのOSバージョンチェックを書き換える必要がある。

2.ホストPCに必要なパッケージインストール
下記のパッケージがホストPCになければ、自動的にインストールされる
  • telnet
  • menuconfig, kernel configuration tool
  • mounting filesystem via nfs
  • tftp
  • minicom
  • rebuild u-boot
手動でパッケージを事前にインストールしたい場合は下記を実行
$ sudo apt-get install xinetd tftpd nfs-kernel-server minicom build-essential libncurses5-dev uboot-mkimage autoconf automake
3.ターゲットファイルシステムのインストールターゲットファイル・システムはデフォルトで下記の場所に作成される
$TI_SDK_PATH/targetNFS
4.tftp設定
tftpの設定で、ホストPCのルートDirに "/tfptboot"が作成され、tftpの設定は"/etc/xinetd.d/tftp"に保存される

5.minicom設定
Usb-to-Serialケーブルを使用する場合は、"/dev/ttyUSBx"、そうでない場合は"/dev/ttyS0"を指定する

6.uboot設定
  • ホストのIPアドレス確認
  • カーネルロケーションの指定
    -TFTPを選択する場合は、"/tftpboot"のDirを適切に指定
    -SD cardを選択する場合は、SDカードの最初のパーティション("boot"という名前)になる
  • ファイル・システムの指定

■ PowerVR SGX SDKインストール [ページ1、ページ2]
BeagleBoneのハードウェア

  • SOC : AM335x
  • SGX Core : SGX530
  • SGX Core rev. : 1.2.5
  • SDK folder suffix : es8.x
  • Max SGX Core Freq : 200 Mhz
●Graphic SDKのインストール:
SDKのインストール時、展開されたパッケージの中に既に"Graphic_SDK_setuplinux_[version].bin"が入っているので、これを実行すれば、Graphic SDKをインストールできる。

また、ウェブからGraphic SDKをダウンロードしてインストールする場合はこのページから"Graphics_SDK_setuplinux_4_08_00_01.bin"をダウンロードしてくる。

ターゲットボードに入れる必要があるのは、
  • Kernel Modules
  • Graphic SDK (examples, headers, lib ...)

■U-bootビルド

$ cd $TI_SDK_PATH
$ make u-boot-spl O=am335x

O=am335xを指定すると、"$TI_SDK_PATH/board-support/u-boot-[version]/am335x"が作成され、make結果がここに格納される(推奨方法)

上の実行結果で、"u-boot.img"と"MLO"という2つのファイルが作成される($TI_SDK_PATH/board-support/u-boot-[version]/am335xの中)、SDカードからブートする場合は、これらのファイルをSDカードに入れる必要がある。UART経由でロードしたい場合は、spl/u-boot-spl.binを利用する。

■SDカードのフォーマット
SDカードの作成で、ブート用のFat32、ファイル・システムのext3を作成する。作成方法は難しくないので省略(参考ページのre-partition SD cardの部分)


■Master Makefile
linux_install:
 @echo ===================================
 @echo     Installing the Linux Kernel
 @echo ===================================
 install -d $(DESTDIR)/boot
 install $(LINUXKERNEL_INSTALL_DIR)/arch/arm/boot/uImage $(DESTDIR)/boot
 install $(LINUXKERNEL_INSTALL_DIR)/vmlinux $(DESTDIR)/boot
 install $(LINUXKERNEL_INSTALL_DIR)/System.map $(DESTDIR)/boot
 $(MAKE) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) INSTALL_MOD_PATH=$(DESTDIR) modules_install

DESTDIR=$TI_SDK_PATH/targetNFS
LINUXKERNEL_INSTALL_DIR=$TI_SDK_PATH/board-support/linux-[version].sdk

下記:U-boot のprintenv

U-Boot# printenv
autoload=yes
baudrate=115200
bootargs=console=ttyO0,115200n8 root=ubi0:rootfs rw ubi.mtd=7,2048 noinitrd rootfstype=ubifs rootwait=1 ip=none
bootargs_defaults=setenv bootargs console=${console} ${optargs}
bootcmd=if mmc rescan; then echo SD/MMC found on device ${mmc_dev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;if run mmc_load_uimage; then run mmc_args;bootm ${kloadaddr};fi;fi;run nand_boot;
bootdelay=3
bootenv=uEnv.txt
bootfile=uImage
console=ttyO0,115200n8
ethact=cpsw
ethaddr=00:18:31:e1:37:6a
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
ip_method=none
kloadaddr=0x80007fc0
loadaddr=0x82000000
loadbootenv=fatload mmc ${mmc_dev} ${loadaddr} ${bootenv}
mmc_args=run bootargs_defaults;setenv bootargs ${bootargs} root=${mmc_root} rootfstype=${mmc_root_fs_type} ip=${ip_method}
mmc_boot=run mmc_args; run mmc_load_uimage; bootm ${kloadaddr}
mmc_dev=0
mmc_load_uimage=fatload mmc ${mmc_dev} ${kloadaddr} ${bootfile}
mmc_root=/dev/mmcblk0p2 rw
mmc_root_fs_type=ext3 rootwait
nand_args=run bootargs_defaults;setenv bootargs ${bootargs} root=${nand_root} noinitrd rootfstype=${nand_root_fs_type} ip=${ip_method}
nand_boot=echo Booting from nand ...; run nand_args; nandecc hw 2; nand read.i ${kloadaddr} ${nand_src_addr} ${nand_img_siz}; bootm ${kloadaddr}
nand_img_siz=0x500000
nand_root=ubi0:rootfs rw ubi.mtd=7,2048
nand_root_fs_type=ubifs rootwait=1
nand_src_addr=0x280000
net_args=run bootargs_defaults;setenv bootargs ${bootargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp
net_boot=echo Booting from network ...; setenv autoload no; dhcp; tftp ${kloadaddr} ${bootfile}; run net_args; bootm ${kloadaddr}
nfsopts=nolock
nor_args=run bootargs_defaults;setenv bootargs ${bootargs} root={nor_root} rootfstype=${nor_root_fs_type} ip=${ip_method}
nor_boot=echo Booting from NOR ...; run nor_args; cp.b ${0x08080000} ${kloadaddr} ${nor_img_siz}; bootm ${kloadaddr}
nor_img_siz=0x280000
nor_root=/dev/mtdblock3 rw
nor_root_fs_type=jffs2
nor_src_addr=0x08080000
rootpath=/export/rootfs
script_addr=0x81900000
spi_args=run bootargs_defaults;setenv bootargs ${bootargs} root=${spi_root} rootfstype=${spi_root_fs_type} ip=${ip_method}
spi_boot=echo Booting from spi ...; run spi_args; sf probe ${spi_bus_no}:0; sf read ${kloadaddr} ${spi_src_addr} ${spi_img_siz}; bootm ${kloadaddr}
spi_bus_no=0
spi_img_siz=0x380000
spi_root=/dev/mtdblock4 rw
spi_root_fs_type=jffs2
spi_src_addr=0x62000
static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
stderr=serial
stdin=serial
stdout=serial

Environment size: 2777/8188 bytes
U-Boot#

-----------------
■BeagleboneをXPマシーンに接続する時のTrouble shooting
USBの認識トラブルはこのページを参考にドライバをインストールする




1. Learning embedded linux system through the file system: a top-down approach [pdf]
2. Labs instructions for Enabling BeagleBone with TI SDK 5.x [pdf]
3. Introduction to BeagleBoard [pdf]
4. u-bootのマニュアル [pdf]
5. AM335x u-boot user's guide
6. AMSDK u-boot user's guide
7. Building the Arago Linux Kernel for Beaglebone

__END__

Friday, September 16, 2011

gmail pop imap 受信 (kuroboxから)

送信は先日できたが、こんどは受信。

use Mail::IMAPClient;
use IO::Socket::SSL;

2つのモジュールを入れて、受信できました。 問題があったのはメールのSubjectの部分で、エンコード、デコードしない場合、

=?ISO-2022-JP?B?Base64でエンコードされたSubject?=

になるので、まず、

Base64でエンコードされたSubjectの部分をDecodeして、そのあと ISO-2022-JPからutf8にDecodeすればよい。具体的には
use Encode;
use MIME::Base64;
$subject =~ s/=\?ISO-2022-JP\?B\?([A-Za-z0-9\+\/=]*)\?=/ decode_base64($1)/eg;
print decode("ISO-2022-JP", $subject), "\n"; 

Saturday, September 10, 2011

時間あわせ ntpd, ntpdate

時間あわせ

# hwclock;date
Sat Sep 10 00:25:49 2011  -0.204517 seconds
Sat Sep 10 00:27:03 JST 2011

ハードウェアクロックとシステムクロックの時間に誤差があり、
合わせる必要がある

# hwclock --systohc
# hwclock;date
Sat Sep 10 00:28:33 2011  -0.670399 seconds
Sat Sep 10 00:28:32 JST 2011

同じになった。


-----------------------------------------------------------------------------
# ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 210.173.160.27  210.173.160.86   2 u    5   64    7   25.119  71299.2   0.310
 210.173.160.57  210.173.176.4    2 u    3   64    7   27.898  71298.9   0.047
 210.173.160.87  210.173.176.4    2 u    5   64    7   25.001  71298.8   0.483

# ntpq -pd
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp1.jst.mfeed. 210.173.160.86   2 u   43   64  377   24.471    0.349   0.508
+ntp2.jst.mfeed. 210.173.160.86   2 u   41   64  377   27.768   -0.081   0.395
+ntp3.jst.mfeed. 210.173.160.56   2 u   36   64  377   24.733    0.051   4.143

Wednesday, January 26, 2011

Wednesday, September 02, 2009

ArduinoのPWM出力

ソフトウェアでdigitalWriteとdelayMicrosecondで行っていたが効率が悪い.MsTimer2というライブラリがあって,Arduinoの割込を簡単に利用できるのでこれもいいけど,ArduinoのanalogWriteを使ってpin 3,5,6,8,9,10,11でPWMを出力している.これらのpinを使うことにした.ただし注意しないといけないのはこれらのpinから出力されるPWMの周波数は異なる.オシロスコープでこれを確認した.

pin 3, 8, 9, 10, 11は周期約2.04msのPWMを出力するが,pin 5,6ではその半分の約1.02msの周期でPWMを出力している.持っているサーボはpin 5,6の出したPWMだと反応が遅い.ArduinoのanalogWriteのページで周波数490HzのPWMを出しているという情報はpin 3,8,9,10,11の方のことだな

Friday, June 26, 2009

ArmadilloでWebカメラを使用しようとしているが...

Armadillo300でWebカメラを使用しようとしているが,まだわからないことがたくさんあって,苦労するわ~.疲れるなこの作業...

とりあえずメモしておこう.Qcam Pro 4000を使用する.カーネルの再構築でpwcドライバモジュール,Video for Linuxも入れ,カメラを差し込んだら認識してくれた.ただffmpegを起動するとI/Oエラーが出る...

■ffmpeg-0.4.8はMLでも書いてあったが,gcc 3.xでやらないとダメみたい.下のエラーが出た
make -C libavcodec all
make[1]: ディレクトリ `/tmp/ffmpeg-0.4.8/libavcodec' に入ります
gcc -g -O3 -Wall -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 \
-D_LARGEFILE_SOURCE -D_GNU_SOURCE -c -o common.o common.c
In file included from avcodec.h:14,
from common.c:27:
common.h:66: error: array type has incomplete element type
common.h:70: error: array type has incomplete element type
make[1]: *** [common.o] エラー 1
make[1]: ディレクトリ `/tmp/ffmpeg-0.4.8/libavcodec' から出ます
make: *** [lib] エラー 2
■で,疲れたのでもう辞めたいだが,一旦全部リセットしてやり直し...ソース取得からやろう.今度はsvnではなくgitで.理由:成功した先行者がいたからだ...意味ない...
$ git clone git://git.mplayerhq.hu/ffmpeg/
$ cd ffmpeg/
$ git clone git://git.mplayerhq.hu/libswscale/
$ ./configure
$ make
ffmpegをコンパイルするとき赤の部分でconfigureする.MLから抜き出した.これ助かるわ~
ファイルの先頭に、configure時に指定したオプションが表示されていませんでしたか?
それを見せて欲しかったです。。

こちらの環境では、以下のようになっています。

config.logの先頭
ffmpeg$ cat config.log | head -10
% ./configure --cross-prefix=arm-linux-gnu- --enable-cross-compile \
--cc=arm-linux-gnu-gcc --arch=arm --logfile=config.log

ARCH_EXT_LIST='
altivec
armv5te
armv6
armvfp
iwmmxt
mmi
mmx
mmx2

config.makの先頭
ffmpeg$ cat config.mak | head -10
# Automatically generated by configure - do not modify!
FFMPEG_CONFIGURATION=--cross-prefix=arm-linux-gnu- --enable-cross-compile \
--cc=arm-linux-gnu-gcc --arch=arm --logfile=config.log
prefix=/usr/local
LIBDIR=$(DESTDIR)${prefix}/lib
SHLIBDIR=$(DESTDIR)${prefix}/lib
INCDIR=$(DESTDIR)${prefix}/include
BINDIR=$(DESTDIR)${prefix}/bin
MANDIR=$(DESTDIR)${prefix}/share/man
CC=arm-linux-gnu-gcc
YASM=arm-linux-gnu-yasm

という感じに、CCにarm-linug-gnu-gccを使うように指定できています。

■で,無事コンパイルできた.特権ユーザでコンパイルする必要がない.

■後Armadilloに移動してやってみるだけ.だけどArmadillo300がない.なぜならコンパイルができたのは家に帰ってからだ.明日続きを...

Armadillo 300にPingしても応答なし



Armadillo-300にPingしても応答なし.iptablesが原因

Friday, April 03, 2009

DIP-IC用テストクリップ


[STC-20A] DIP-IC用テストクリップ

Thursday, March 26, 2009

とりあえずメモ

Armadillo300にてCFにdebianをインストールし、エラーもなく起動することがで
きましたが、VGAからログインする事ができずに困っています。

【症状】
・CFのdebian起動でVGAからログインプロンプトが出ない
 起動メッセージは出力されているがログインプロンプトは出力されない
 シリアル接続の方では接続可能。

設定状況は
hermitでは
hermit> setenv noinitrd root=/dev/hda2 console=tty1
video=ns9750fb:CRT-VGA,16bpp,enable

 にてテキスト通りtty1に設定済み、VGAもenable状態です。

よくわかっていないのでシリアル接続のコンソールが ttyAM0の様でしたので
hermitでttyAM1を試してみたのですがNGでした。。。

どなたかアドバイス頂ければ幸いです
よろしくお願いします

=================
--と申します。

/etc/inittabをviで編集

1:2345:respawn:/sbin/getty 38400 tty1 ←この行のコメントをはずす
これでいけると思います。

================
1: console=tty
2: video=ns9750fb:enable,CRT-SVGA

Wednesday, March 18, 2009

Tuesday, March 17, 2009

Fonera で compile own program

Foneraで自作のプログラムを動かしたい.クロス開発環境の構築を考えている.とても参考になっているのはこのサイトです.Armadilloの開発と同じようなやり方ですね~.でもやっぱりわからないことがたくさん残っています.DD-WRTをクロスコンパイルしようとして,検索したらDD-WRT Communityでは"toolchains"をダウンロードするやり方があったが,今ダウンロードできない(このページ).Open-WrtとDD-Wrtと互換性がありそうなのでsdkt4aさんのサイトのやり方で試しているところ.コンパイル時間がめちゃめちゃかかります.

root@DD-WRT:~# wget http://www.***.**/***/test.o
Connecting to www.***.** (*.*.*.*:80)
test.o 100% |*******************************| 5665 --:--:-- ETA
root@DD-WRT:~# ls
test.o
root@DD-WRT:~# chmod 755 test.o
root@DD-WRT:~# ./test.o
hello world!!


話は変わりますが,検索途中でなんかDD-WRTはあまりよくないという意見をいっている人もいるみたいです.よんでみたらなるほど,こんなことがあるか~と思いました.
DD-WRT sucks. Why? See http://www.bitsum.com/about-ddwrt.htm


自分も純粋なopen sourceの方が好きで,使う抵抗もないし,Communityにrecontributeするときも楽しい,だがなんか↑の話があるとちょっとDD-WRTを疑ってしまいます.

Thursday, March 12, 2009

Fonera DD-WRT化メモ

■ Fonera DD-WRT化メモ
まずSSHを有効にする方法はめんどくさい.だけどシリアルで書き換える方法もめんどくさい.シリアルケーブルがないし!
だけどArduinoが横においてあった^^.これはラッキー.そしてやっぱり,先行者がいました.
というわけでArduinoをシリアルインタフェースとして働いてもらい,DD-WRTをFONに流し込んだ.
手順はシリアルでアクセスできたら,次にこのサイトの手順で行う.

問題なのはシリアルのボートレートの設定RedBootとDD-WRTのシリアル設定は異なるためDD-WRTをきどうしたらシリアルコンソールが文字化けする.この辺,焦りました.

■ SSHでログインできるためにはこのサイトの説明でできる.Authorized KeysはPuttyで生成し,貼り付ける.Puttyの設定もセクションの認証ファイルも指定する必要がある.

■ DD-WRTのシリアル速度のデフォルトは「115200」とほとんどの先行者のサイトに書いてあった.しかし!実際はどうなるか?自分がインストールした時点は2009-03-12でDD-WRTのバージョンはv24-sp1でネットの情報からsttyコマンドを実行していみると(なぜかこのコマンドはFonera+とか新しいDD-WRTはBusyboxに入っていないという情報もたくさんネット上にあったが,自分がインストールしたDD-WRTはあった?なんで?)

■ DD-WRT化手順:(incomplete)
www.dd-wrt.com > Downloads > stable > dd-wrtv24-SP1 > Consummer > Fon > Fonera > fonera-firmware.bin & linux.bin をダウンロード.RedBootにアクセスして,linux.binをFonに流す.

-----------
■ 気になるトッピクス

Monday, March 09, 2009

Kimio Kosaka様のサイト

いつも楽しく拝見させていただいております.感謝感謝です.
Akibaduino
Arduino Diecimilaを使う

とりあえず買う...か?

■ Arduinoイーサネットアダプタ @ ストロベリ
(¥3480) ほしいなぁ~


これネットと接続できるが,それだけでなく,基盤の上にSDカードスロットも付いているのではないか!これはいろいろ使えそう...ってやっぱり先行者1がいました.やっぱりねlol案の定.先行者2

Arduino Diecimila x2 @ ストロベリ
(¥2835)

AVR ATEMEGA 評価ボード @ ストロベリ
(¥1980) 液晶については秋月の方が安い(バックライト付)

LCD @ 秋月 (¥700)

ATMEL AVR ISP @ 秋月
(¥4000) 今は自作するべきでない

クリスタル発振子 @ 秋月
(¥500.1パック10個入り)

AVRマイコン @ 千石
(¥470 Atmel ATmega168-20PU )

AVRマイコン @ スイッチサイエンス
(¥500 Atmel ATmega328P) ATmega168の2倍の容量を持つ

■ 買いすぎか?lol また今月お金がない...

Thursday, February 26, 2009

termios周辺,シリアル通信など

シリアル通信はなんで端末操作に関係しているだろう??まだよくわからない.そもそも端末とは何?ターミナルとは??
Linux系ではこの部分はtermiosというものと関係している.いろいろ調べてみた.

Linux FAQ : 3節に端末のIOが参考になる.その他にもたくさんの情報がおもしろい
参考2 :
onisi-lab.jp : サンプルプログラム,その他いろいろ,面白いサイト
ネットワークサービスは必ずfork()しよう : なるほど,確かにスレッドより安全
Advance Linux Programming : 本をPDFで全部見れる(公開)

Sunday, November 16, 2008

シリアル通信メモ

参考:
[1] シリアル通信プログラム
[2] プログラム例
[3] Manpage of TERMIOS

[4] Serial Programming:Unix/termios
[5] Serial Programming Guide for Posix Operating Systems 非常に簡潔に説明してある.わかりやすい09-03-27
[6] シリアル通信の“Space voltage” の説明ページ ( [pdf])またここの説明もわかりやすい09-03-27
[7] プログラム例2 結構詳細なコメントがある
■ Openning A Serial Port [5]

   fd = open("/dev/ttyS0", O_RDWR  O_NOCTTY  O_NDELAY);
if (fd == -1)
{
/*
* Could not open the port.
*/
perror("open_port: Unable to open /dev/ttyS0 - ");
}
else
fcntl(fd, F_SETFL, 0);

と書いてある.なぜ“fcntl()”を使用したのか?をずっと考えてみた.“open()”の部分だけで十分じゃないのかと思った.ネット上のサンプルシリアルプログラムはこの部分はない.なぜだ?

オープンファイル記述 (open file description) には、ファイル記述毎に設定される状態フラグがいくつかある。これらのフラグは open(2) によって初期化され、 fcntl(2) により変更することもできる
(Manpage of FCNTL より)

どうもファイルの状態を変更したいからそうやったみたいだな.
■ O_NOCTTY ( output --> no control tty )

ttyを制御しない.
という説明でわかるか!
ファイルをOpenするときに,open()で指定したファイルはもしデバイスファイルであれば,たとえばそのプロセスが制御端末を持っていなくても,Openしたファイルは制御端末にならない.つまりopenして放置するということ.例えば“Ctrl+C”が発生しても終了しないとか,いろいろ端末に対する制御を無視
ってやっぱりよくわからん.試してみるしかないな~,指定するとしないときの違い
制御端末という言葉はこのサイトの説明はわかりやすい(daemon起動時の2重forkの理由節)

*追記2009-04-01:
O_NOCTTYの日本語の説明は“ttyを制御しない” と説明しているが,“/usr/include/fcntl.h”を読んだらO_NOCTTYの行のコメントは

#define O_NOCTTY 0x8000 /* don't assign controlling terminal */
でした.やっと意味がわかった.なんでdon't assign controlling terminalをttyを制御しないと訳したんだ?自分もだけどO_NOCTTYをno control ttyの略と勘違いして決めつけちゃったかもしれない.わかりにくい!!!.これはユーザのプログラムがオープンしたファイルはデバイスファイル(シリアルポート)でこのファイルをプログラムの制御端末にしないでほしいということだ.シリアルポートをそれを開いたプログラムに制御端末として割り当てないでほしい!なるほど~.よく組み込みLinuxで外部からシリアル―シリアル接続で制御を行うときシリアルポートを制御端末として使っているじゃん.でもここではその機能がほしくないからO_NOTTYをセットしているの!

■ カノニカル&非カノニカル 入力,同期 & 非同期入力

  • カノニカル:入力はEnterキーを押すまで入力バッファにデータが貯められる(Default設定)
  • 非カノニカル:read()で決まった文字を読み出す.足りないときはブロックになるのか?まだわからん
  • 同期:入力が終わるまでread()はブロックされる(Default設定)
  • 非同期:read()はブロックされることなく,終了になる.

カノニカル入力処理
これは端末に対しての通常の処理モードですが、他のデバイスとの通信の時にも便利です。全ての入力は行単位で処理されます。つまり、read は入力の1行全体のみを返してきます。デフォルトでは、行はNL(ASCII のLF)、ファイル終端、行終端文字のいずれかで終ります。標準の設定では、CR (DOS/Windows のデフォルトの行終端文字)は行の終端とはなりません。
カノニカル入力処理では、消去(erase)、単語の削除(delete word)、文字の再出力(reprint characters)、CRのNLへの変換などを扱うことができます。

非カノニカル入力処理
非カノニカル入力処理は、read 毎に決まった数の文字を扱う方法で、キャラクタタイマを利用することもできます。このモードはアプリケーションが決まった文字数のキャラクタを読み込む時や、接続したデバイスが大量の文字を送ってくる場合に使用します。

非同期入力
上記2つのモードは、同期及び非同期モードで使うことができます。デフォルトは、入力がうまくいくまで read 文がブロックされる同期モードです。非同期モードでは、read 文は即座に終了し、後で読み込みが完了した時にプログラムにシグナルが送られます。このシグナルは、シグナルハンドラを使って受け取ります。
■ DCD(Data Carrier Detect) 1番ピン(9ピンポートの場合)
これはモデムが相手とつながっているかどうかを検出するためのものです.下の図(wikipediaより)はDCDがRTSとつながっていることがわかる.The Linux Serial HOWTO:ピン配置と信号節でポートのオープンを禁止する方法について

シリアルポートのlocalフラグを無効にする場合,DCDがオン(+12V)になるまではシリアルポートをOpenできない
と書いてある.シリアルポートをOpenするとにに
fd = open("/dev/ttyS0", O_RDWR O_NOCTTY O_NDELAY)
のようにOpenする.オプションO_NDELAYはDCDのシグナル線を無視するようになる.もしこれを指定しないとDCDシグナル線がSpace Voltage(オン)になるまでプロセスはSleep状態になるらしい[5] , [6] なるほど




ピン番号 ピン番号 略称 正式名称 方向 動作および目的
9ピン 25ピン
3 2 TxD Transmit Data → PC からバイトデータを送信する
2 3 RxD Receive Data ← PC がバイトデータを受け取る
7 4 RTS Request To Send → RTS/CTS フロー制御
8 5 CTS Clear To Send ← RTS/CTS フロー制御
6 6 DSR Data Set Ready ← 通信可能になったことを知らせる
4 20 DTR Data Terminal Ready → 通信可能になったことを知らせる
1 8 DCD Data Carrier Detect ← モデムが相手と繋がっていることを示す
9 22 RI Ring Indicator ← 電話のベルが鳴っている状態を示す
5 7 Signal Ground


■ Cooked モード,Raw モード?
Cookedモードはキーボードから入力した“キー”(特に制御キー,特殊キー,例:Backspace, Delete, Ctrl+ D, など)を処理してからプログラムに渡すモードで,どのように処理するかはOSによって異なる.これに対しRawモードは入力したキーをそのまま前処理せずに渡す.

例えば“ABC<BackSpace>D”を入力すると
  • Cookedモードではプログラムに渡されるのは“ABD”になり
  • Rawモードでは“ABC<BackSpace>の文字コードD”になる
■STOP BIT, START BIT
キャラクタ(1文字)の前後に、文字を識別できるように必ず付けるのがスタートビットおよびストップビットです。スタートビットは1ビットですが、ストップビットは1ビット・1.5ビット・2ビットがあります。

■パリティビット
EVEN(偶数)、ODD(奇数)、なし、の3つから選択します。EVENまたはODDのときは、データビットとパリティビットの中でビットが1となる数をEVENまたはODDになるよう調整します。シリアル通信で必要な機能:
ボーレート設定
read()
write()

[未完成]