第9章 Linuxカーネル仕様

本章では、工場出荷状態のArmadillo-400 シリーズ のLinuxカーネル仕様について説明します。

9.1. デフォルトコンフィギュレーション

工場出荷状態のフラッシュメモリに書き込まれているLinuxカーネルイメージには、デフォルトコンフィギュレーションが適用されています。 Armadillo-400 シリーズ用のデフォルトコンフィギュレーションが記載されているファイルは、Linux カーネルソースファイル(linux-3.14-at[version].tar.gz)に含まれるarch/arm/configs/armadillo4x0_defconfigです。

armadillo4x0_defconfigで有効になっている主要な設定を表9.1「Linuxカーネル主要設定」に示します。

表9.1 Linuxカーネル主要設定

コンフィグ説明
NO_HZTickless System (Dynamic Ticks)
HIGH_RES_TIMERSHigh Resolution Timer Support
PREEMPTPreemptible Kernel
AEABIUse the ARM EABI to compile the kernel
COMPACTIONAllow for memory compaction
BINFMT_ELFKernel support for ELF binaries

9.2. デフォルト起動オプション

工場出荷状態のArmadillo-400 シリーズ のLinuxカーネルの起動オプションについて説明します。デフォルト状態では、次のように設定されています。

表9.2 Linuxカーネルのデフォルト起動オプション

起動オプション説明
console=ttymxc1,115200起動ログなどが出力されるイニシャルコンソールにttymxc1を、ボーレートに 115200bps を指定します。
root=/dev/ram0ルートファイルシステムにRAMディスクを指定します。

9.3. Linuxドライバ一覧

Armadillo-400 シリーズで利用することができるデバイスドライバについて説明します。 各ドライバで利用しているソースコードの内主要なファイルのパスや、コンフィギュレーションに必要な情報、及びデバイスファイルなどについて記載します。

9.3.1. Armadillo-400

Armadillo-400 シリーズの初期化手順やハードウェアの構成情報、ピンマルチプレクスの情報などが定義されています。

関連するソースコード

arch/arm/mach-imx/mach-armadillo4x0.c
arch/arm/mach-imx/armadillo4x0_extif.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                                  <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                                     <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                                     <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                                     <MACH_ARMADILLO440>
                Device options  --->
                Armadillo-400 Board options  --->
                            :

9.3.2. フラッシュメモリ

Armadillo-400 シリーズでは、フラッシュメモリを制御するソフトウェアとして MTD(Memory Technology Device) を利用しています。MTDのキャラクタデバイスまたはブロックデバイスを経由して、ユーザーランドからアクセスすることができます。

関連するソースコード

drivers/mtd/cmdlinepart.c
drivers/mtd/maps/physmap.c
drivers/mtd/mtd_blkdevs.c
drivers/mtd/mtdblock.c
drivers/mtd/mtdchar.c
drivers/mtd/mtdconcat.c
drivers/mtd/mtdcore.c
drivers/mtd/mtdpart.c
drivers/mtd/mtdsuper.c
drivers/mtd/chips/cfi_cmdset_0001.c
drivers/mtd/chips/cfi_probe.c
drivers/mtd/chips/cfi_util.c
drivers/mtd/chips/chipreg.c
drivers/mtd/chips/gen_probe.c

デバイスファイル
デバイスファイルデバイスタイプ対応するパーティション名
/dev/mtd0キャラクタbootloader
/dev/mtd0ro
/dev/flash/bootloader
/dev/flash/nor.bootloader
/dev/mtdblock0ブロック
/dev/mtd1キャラクタkernel
/dev/mtd1ro
/dev/flash/kernel
/dev/flash/nor.kernel
/dev/mtdblock1ブロック
/dev/mtd2キャラクタuserland
/dev/mtd2ro
/dev/flash/userland
/dev/flash/nor.userland
/dev/mtdblock2ブロック
/dev/mtd3キャラクタconfig
/dev/mtd3ro
/dev/flash/config
/dev/flash/nor.config
/dev/mtdblock3ブロック
カーネルコンフィギュレーション
  Device Drivers  --->
      <*> Memory Technology Device (MTD) support  --->                                <MTD>
          <*> Command line partition table parsing                      <MTD_CMDLINE_PARTS>
          [*] Read-only switching user interface support                        <MTD_RO_IF>
          <*> Caching block device access to MTD devices                        <MTD_BLOCK>
              RAM/ROM/Flash chip drivers  --->
              <*> Detect flash chips by Common Flash Interface (CFI) probe        <MTD_CFI>
              <*> Support for Intel/Sharp flash chips                    <MTD_CFI_INTELEXT>
              Mapping drivers for chip access  --->
              <*> Flash device in physical memory map                         <MTD_PHYSMAP>

9.3.3. UART

Armadillo-400 シリーズのシリアルは、i.MX257 の UART(Universal Asynchronous Receiver/Transmitter) を利用しています。

i.MX25 プロセッサは UART1 から UART5 までの 5 つの UART モジュールを内蔵しています。Armadillo-400 シリーズでは、UART2をコンソールとして利用しています。

フォーマット

データビット長: 7 or 8ビット
ストップビット長: 1 or 2ビット
パリティ: 偶数 or 奇数 or なし
フロー制御: CTS/RTS or XON/XOFF or なし
最大ボーレート: 4Mbps

関連するソースコード

drivers/tty/n_tty.c
drivers/tty/tty_buffer.c
drivers/tty/tty_io.c
drivers/tty/tty_ioctl.c
drivers/tty/tty_ldisc.c
drivers/tty/tty_ldsem.c
drivers/tty/tty_mutex.c
drivers/tty/tty_port.c
drivers/tty/serial/serial_core.c
drivers/tty/serial/imx.c

デバイスファイル
シリアルインターフェースデバイスファイル
UART1/dev/ttymxc0
UART2/dev/ttymxc1
UART3/dev/ttymxc2
UART5/dev/ttymxc4
カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                           <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                     <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                     <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                     <MACH_ARMADILLO440>
                Device options  --->
                  -*- Enable UART2 module                       <SERIAL_MXC_SELECT2>
                  -*- Enable UART2 HW Flow Control             <SERIAL_MXC_HW_FLOW2>
                  [*] Enable UART3 module                       <SERIAL_MXC_SELECT3>  12
                  [*] Enable UART3 HW Flow Control             <SERIAL_MXC_HW_FLOW3>  34
                  [*] Enable UART4 module                       <SERIAL_MXC_SELECT4>  5
                  [*] Enable UART4 HW Flow Control             <SERIAL_MXC_HW_FLOW4>  6
                  [*] Enable UART5 module                       <SERIAL_MXC_SELECT5>  7
                  [*] Enable UART5 HW Flow Control             <SERIAL_MXC_HW_FLOW5>  8
                Armadillo-400 Board options  --->
                  [*] Enable UART3 at CON9                 <ARMADILLO4X0_UART3_CON9>  1
                  [*] Enable UART3 at CON11               <ARMADILLO4X0_UART3_CON11>  2
                  [*]   Enable UART3 HW flow control at CON9
                                                   <ARMADILLO4X0_UART3_HW_FLOW_CON9>  3
                  [*]   Enable UART3 HW flow control at CON11
                                                  <ARMADILLO4X0_UART3_HW_FLOW_CON11>  4
                  [*] Enable UART4 at CON11               <ARMADILLO4X0_UART4_CON11>  5
                  [*]   Enable UART4 HW flow control at CON11
                                                  <ARMADILLO4X0_UART4_HW_FLOW_CON11>  6
                  [*] Enable UART5 at CON9                 <ARMADILLO4X0_UART5_CON9>  7
                  [*]   Enable UART5 HW flow control at CON9
                                                   <ARMADILLO4X0_UART5_HW_FLOW_CON9>  8
  Device Drivers  --->
      Character devices  --->
          [*] Enable TTY                                                       <TTY>
              Serial drivers  --->
                  <*> IMX serial port support                           <SERIAL_IMX>
                  [*]   Console on IMX serial port               <SERIAL_IMX_CONSOL>

1

CON9にUART3を割り当てる場合に設定します。デフォルトで有効化されています。

2

CON11にUART3を割り当てる場合に設定します。デフォルトで無効化されています。ARMADILLO4X0_UART3_CON11は、ARMADILLO4X0_UART3_CON9 を無効化しなければ、選択出来ません。

3

CON9のUART3のハードウェアフローコントロールを有効にします。デフォルトで無効化されています。

4

CON11のUART3のハードウェアフローコントロールを有効にします。デフォルトで無効化されています。ARMADILLO4X0_UART3_HW_FLOW_CON11は、ARMADILLO4X0_UART3_CON11 を有効化しなければ、選択出来ません。

5

CON11にUART4を割り当てる場合に設定します。デフォルトで無効化されています。

6

CON11のUART4のハードウェアフローコントロールを有効にします。デフォルトで無効化されています。

7

CON9にUART5を割り当てる場合に設定します。デフォルトで有効化されています。

8

CON9のUART5のハードウェアフローコントロールを有効にします。デフォルトで無効化されています。

9.3.4. Ethernet

Armadillo-400 シリーズのEthernet(LAN)は、i.MX257 の FEC(Fast Ethernet Controller)を利用しています。

機能

通信速度: 100Mbps(100BASE-TX), 10Mbps(10BASE-T)
通信モード: Full-Duplex(全二重), Half-Duplex(半二重)
Auto Negotiationサポート
キャリア検知サポート
リンク検出サポート

関連するソースコード

drivers/net/Space.c
drivers/net/loopback.c
drivers/net/mii.c
drivers/net/ethernet/freescale/fec_main.c
drivers/net/ethernet/freescale/fec_ptp.c
drivers/net/phy/mdio_bus.c
drivers/net/phy/phy.c
drivers/net/phy/phy_device.c

ネットワークデバイス

eth0

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] Network device support  --->                                         <NETDEVICES>
          [*]   Ethernet driver support  --->                                    <ETHERNET>
              [*]   Freescale devices                                <NET_VENDOR_FREESCALE>
              <*>     FEC ethernet controller (of ColdFire and some i.MX CPUs)        <FEC>

9.3.5. SDホスト

Armadillo-400 シリーズのSDホストは、i.MX257 の eSDHC(Enhanced Secured Digital Host Controller)を利用しています。

i.MX257はSDホストコントローラを 2個搭載しており、ArmadilloのCON1(SDインターフェース)にeSDHC1が割り当てられています。また、カーネルコンフィギュレーションを変更することにより、CON9にeSDHC2を割り当てる事ができます。

機能

カードタイプ: SD/SDHC/SDXC
バス幅: 4bit
スピードモード: Default Speed(24MHz), High Speed(48MHz)
カードディテクトサポート(CON9のみ)
ライトプロテクトサポート(CON9のみ)

デバイスファイル

メモリカードの場合は、カードを認識した順番で/dev/mmcblkN (Nは'0'からの連番)となります。
I/Oカードの場合は、ファンクションに応じたデバイスファイルとなります。

関連するソースコード

drivers/mmc/card/block.c
drivers/mmc/card/queue.c
drivers/mmc/core/
drivers/mmc/host/sdhci-esdhc-imx.c
drivers/mmc/host/sdhci-pltfm.c
drivers/mmc/host/sdhci.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                           <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                     <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                     <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                     <MACH_ARMADILLO440>
                Device options  --->
                  [*] Enable eSDHC1                                <MMC_MXC_SELECT1>
                  [*] Enable eSDHC2                                <MMC_MXC_SELECT2>  1
                Armadillo-400 Board options  --->
                  [*] Enable SDHC2 at CON9                 <ARMADILLO4X0_SDHC2_CON9>  1
                  [*]   Enable PWREN for SDHC2 at CON9_1
                                                   <ARMADILLO4X0_SDHC2_PWREN_CON9_1>  1
  Device Drivers  --->
      <*> MMC/SD/SDIO card support  --->                                       <MMC>
          [*]   Additional delay after SDIO reset       <MMC_DELAY_AFTER_SDIO_RESET>
                *** MMC/SD/SDIO Card Drivers ***
          <*>   MMC block device driver                                  <MMC_BLOCK>
          (8)     Number of minors per block device               <MMC_BLOCK_MINORS>
          [*]     Use bounce buffer for simple hosts              <MMC_BLOCK_BOUNCE>
                *** MMC/SD/SDIO Host Controller Drivers ***
          <*>   Secure Digital Host Controller Interface support         <MMC_SDHCI>
          <*>   SDHCI platform and OF driver helper                <MMC_SDHCI_PLTFM>
          <*>     SDHCI support for the Freescale eSDHC/uSDHC i.MX controller
                                                                <MMC_SDHCI_OF_ESDHC>
          [*]       Enforce to use multi-block transfer
                                     <MMC_SDHCI_ESDHC_IMX_FORCE_MULTIBLOCK_TRANSFER>

1

CON9にeSDHC2を割り当てる場合に設定します。デフォルトでは無効化されています。

9.3.6. USBホスト

Armadillo-400 シリーズのUSBホストは、i.MX257 の UTMI-USB-PHY および USBOH(Universal Serial Bus OTG and Host) を利用しています。

Armadillo-400 シリーズでは、USB ホストインターフェース下段のOTGポートおよびUSB ホストインターフェース上段のHOSTポートを利用することができます。

機能

Universal Serial Bus Specification Revision 2.0 準拠
Enhanced Host Controller Interface (EHCI)準拠
転送レート(OTG): USB2.0 High-Speed (480Mbps), Full-Speed (12Mbps), Low-Speed (1.5Mbps)
転送レート(Host): USB2.0 Full-Speed (12Mbps), Low-Speed (1.5Mbps)

デバイスファイル

メモリデバイスの場合は、デバイスを認識した順番で/dev/sdN (Nは'a'からの連番)となります。

関連するソースコード

drivers/usb/chipidea/ci_hdrc_imx.c
drivers/usb/chipidea/ci_hdrc_msm.c
drivers/usb/chipidea/ci_hdrc_zevio.c
drivers/usb/chipidea/core.c
drivers/usb/chipidea/host.c
drivers/usb/chipidea/otg.c
drivers/usb/chipidea/usbmisc_imx.c
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-hub.c
drivers/usb/phy/phy-generic.c

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] USB support  --->                                                   <USB_SUPPORT>
          <*>   Support for Host-side USB                                             <USB>
                  *** USB Host Controller Drivers ***
          <*>     EHCI HCD (USB 2.0) support                                 <USB_EHCI_HCD>
          <*>   ChipIdea Highspeed Dual Role Controller                      <USB_CHIPIDEA>
          [*]     ChipIdea host controller                              <USB_CHIPIDEA_HOST>
                USB Physical Layer drivers  --->
              <*>     NOP USB Transceiver Driver                            <NOP_USB_XCEIV>

9.3.7. フレームバッファ

Armadillo-440 のビデオ出力機能は、フレームバッファデバイスとして実装しています。

Armadillo-440 液晶モデルの標準は、Armadillo-400シリーズLCD拡張ボードに合わせ、解像度 480 × 272 ピクセル、カラーフォーマット RGB 565 に設定されています。

機能

最大解像度 SVGA
カラーフォーマット: RGB 565カラー

デバイスファイル
フレームバッファデバイスファイル
バックグラウンドプレーン/dev/fb0
関連するソースコード

drivers/video/imxfb.c
drivers/video/logo/logo_armadillo_clut224.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                               <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                         <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                         <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                         <MACH_ARMADILLO440>
                Device options  --->
                    [*] Enable LCDC module                             <LCDC_MXC_SELECT>
                Armadillo-400 Board options  --->
                        LCD panel (FG040360DSSWBG03)  --->    <FB_MODE_FG040360DSSWBG03>
  Device Drivers  --->
      Graphics support  --->
          <*> Support for frame buffer devices  --->                                <FB>
                    *** Frame buffer hardware drivers ***
              <*>   Freescale i.MX1/21/25/27 LCD support                        <FB_IMX>
              Console display driver support  --->
              <*> Framebuffer Console support                      <FRAMEBUFFER_CONSOLE>
          [*] Bootup logo  --->                                                   <LOGO>
              [*]   224-color Armadillo Linux logo                   <ARMADILLO_CLUT224>

9.3.8. LED バックライト

Armadillo-440の LEDバックライト機能は、バックライトクラスとして実装しています。

Armadillo-440は、汎用のPWM機能を使用しバックライトの制御を行なっています。PWM機能の詳細に関しては「PWM」を参照してください。

[注記]

Armadillo-400シリーズで採用している i.MX25プロセッサが内蔵している LCDC (Liquid Crystal Display Controller)は、バックライト制御機能を有していますが、Armadillo-440では、これを使用していません。

機能

256段階 輝度調整

sysfs バックライトクラスディレクトリ

バックライト輝度調整: /sys/class/backlight/pwm-backlight/brightness
バックライト点灯/消灯制御: /sys/class/backlight/pwm-backlight/bl_power

関連するソースコード

drivers/video/backlight/backlight.c
drivers/video/backlight/pwm_bl.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                                  <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                           <MACH_ARMADILLO_410>
          [*] Support Armadillo-410 platform                           <MACH_ARMADILLO_420>
          [*] Support Armadillo-440 platform                           <MACH_ARMADILLO_440>
                Device options  --->
                    [*] Enable LCDC module                                <LCDC_MXC_SELECT>
  Device Drivers  --->
      Graphics support  --->
          [*] Backlight & LCD device support  --->                  <BACKLIGHT_LCD_SUPPORT>
              <*>   Lowlevel Backlight controls                    <BACKLIGHT_CLASS_DEVICE>
              <*>     Generic PWM based Backlight Driver                    <BACKLIGHT_PWM>
          [*] Pulse-Width Modulation (PWM) Support  --->                              <PWM>
              <*>   i.MX PWM support                                              <PWM_IMX>

9.3.9. タッチスクリーン

Armadillo-440 の タッチスクリーン機能は、インプットデバイスとして実装されており、ユーザーランドとのインターフェースとして、イベントインターフェースを提供しています。

タッチスクリーンは、次に示すイベントが発生します。

表9.3 タッチスクリーンイベント

TypeCodeValue
EV_KEY(1)BTN_TOUCH(330)0 or 1
EV_ABS(3)ABS_X(0)100〜4000
EV_ABS(3)ABS_Y(1)100〜4000
EV_ABS(3)ABS_PRESSURE(24)0 or 1

タッチスクリーンイベントデバイス

/dev/input/event1

[警告]

イベントデバイスの番号は、検出された順番に割り振られます。そのため、USBキーボードなど他のインプットデバイスが起動時に検出されると、タッチスクリーンのイベントデバイス番号は変わる可能性があります。

関連するソースコード

drivers/imx/adc/imx_adc.c
drivers/input/touchscreen/imx_adc_ts.c

カーネルコンフィギュレーション
  Device Drivers  --->
      Input device support  --->
          -*- Generic input layer (needed for keyboard, mouse, ...)              <INPUT>
          <*>   Event interface                                            <INPUT_EVDEV>
          [*]   Touchscreens  --->                                   <INPUT_TOUCHSCREEN>
              <*>   Freescale i.MX ADC touchscreens                    <TOUCHSCREEN_IMX>
              IMX support drivers  --->
                          IMX support drivers  --->
                              <*> enable ADC driver                            <IMX_ADC>
                              [*]   Use internal reference voltage for general ADC
                                                      <USE_INTERNAL_REF_FOR_GENERAL_ADC>
[ティップ]

Atmark Distで作成したユーザーランドは、タッチスクリーンへの入力は、タッチスクリーンデバイスドライバを通り、タッチスクリーン用ライブラリ(tslib)経由でアプリケーションプログラムに伝わります。入力位置の補正は、tslibのレイヤーで行う事ができます。具体的な方法は、HowTo: Armadillo-400シリーズのタッチスクリーンの位置ずれを補正するを参照してください。

9.3.10. オーディオ

Armadillo-400シリーズのオーディオ機能は、ALSAデバイスとして実装しています。

Armadillo-400シリーズLCD拡張ボードには、オーディオコーデックとしてWolfson WM8978が採用されています。Armadillo-400シリーズの標準では、オーディオコーデックをWM8978として実装しています。

オーディオデバイスの制御は、ALSAライブラリ(libasound2) を通じて行う事ができます。

[警告]

Armadillo-400シリーズのオーディオドライバーは、録音と再生を同時に行う事はできません

機能

Playback(2ch) / Capture(1ch)
サンプリング周波数: 48k,32k,16k,8k [Hz]
フォーマット: Signed 16/24 bit, Little-endian

[警告]

現状のカーネルは、モノラル録音に対応していません。Armadillo-400シリーズLCD拡張ボードのモノラルマイク入力(CON3)が Lチャンネルに、無音がRチャンネルに 録音される実装になっています。

関連するソースコード

sound/soc/codecs/wm8978.c
sound/soc/fsl/armadillo4x0-wm8978.c
sound/soc/fsl/imx-audmux.c
sound/soc/fsl/imx-pcm-dma.c
sound/soc/fsl/imx-ssi.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                              <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                       <MACH_ARMADILLO_410>
          [*] Support Armadillo-420 platform                       <MACH_ARMADILLO_420>
          [*] Support Armadillo-440 platform                       <MACH_ARMADILLO_440>
                Device options  --->
                    [*] Enable I2C3 module                            <I2C_MXC_SELECT3>
                    [*] Enable MX25 SSI1 module                       <SSI_MXC_SELECT1>
                Armadillo-400 Board options  --->
                    [*] Enable I2C3 at CON11                  <ARMADILLO4X0_I2C3_CON11>
                    [*]   Enable WM8978 Audio Codec on I2C2
                                                       <ARMADILLO4X0_I2C3_CON11_WM8978>
                    [*] Enable AUD5 at CON11                  <ARMADILLO4X0_AUD5_CON11>  1
                    [ ] Enable AUD6 at CON9                    <ARMADILLO4X0_AUD6_CON9>  2
  Device Drivers  --->
      <*> Sound card support  --->                                              <SOUND>
          <*>   Advanced Linux Sound Architecture  --->                           <SND>
              <*>   ALSA for SoC audio support  --->                          <SND_SOC>
                  <*>   SoC Audio for Freescale i.MX CPUs  --->           <SND_IMX_SOC>
                      <*>   SoC Audio support for Armadillo4x0 boards with wm8978
                                                          <SND_SOC_ARMADILLO4X0_WM8978>
                  -*-   Wolfson Microelectronics WM8978 CODEC          <SND_SOC_WM8978>

1

CON11にオーディオ機能を出力する場合に設定します。デフォルトで有効化されています。

2

CON9にオーディオ機能を出力する場合に設定します。デフォルトで無効化されています。

i.MX25 は、オーディオマルチプレクスにより、オーディオ機能をどのピンで使用するかを選択することができます。オーディオマルチプレクスは、カーネルコンフィギュレーションにより、オーディオ機能を AUD5(CON11)で使用するか、AUD6(CON9)で使用するかを選択する事ができます。Armadillo-440 の標準状態では、AUD5 を使用するようになっており、オーディオ機能は CON11 に接続されます。

[注記]

Armadillo-400シリーズLCD拡張ボードを接続せずに、標準イメージをArmadillo-440で起動すると、以下のメッセージが数回表示されます。 これは、オーディオドライバが、LCD拡張ボードに搭載されているWM8978 コーデックを検出できないために発生します。

armadillo4x0_wm8978 armadillo4x0_wm8978.0: ASoC: CODEC wm8978.2-001a not registered
armadillo4x0_wm8978 armadillo4x0_wm8978.0: snd_soc_register_card failed (-517)
platform armadillo4x0_wm8978.0: Driver armadillo4x0_wm8978 requests probe deferral 

AUD5(CON11)のオーディオ機能が不要な場合は、ARMADILLO4X0_AUD5_CON11を無効化してください。

9.3.11. リアルタイムクロック

Armadillo-400 シリーズ LCD拡張ボード、RTCオプションモジュール、WLANオプションモジュール(AWL13対応)には、リアルタイムクロック(セイコーインスツル社製 S-35390A)が搭載されています。 Armadillo-420/440でリアルタイムクロック機能を使用する場合は、拡張ボードまたはオプションモジュールと組み合わせて使用する必要があります。 また、WLAN オプションモジュール(AWL13対応)を使用している場合はアラーム割り込み機能を利用できます[21]

機能

アラーム割り込みサポート

デバイスファイル

/dev/rtc
/dev/rtc0
/dev/rtc1

関連するソースコード

drivers/rtc/class.c
drivers/rtc/hctosys.c
drivers/rtc/interface.c
drivers/rtc/rtc-dev.c
drivers/rtc/rtc-lib.c
drivers/rtc/rtc-proc.c
drivers/rtc/rtc-s35390a.c
drivers/rtc/rtc-sysfs.c
drivers/rtc/systohc.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                             <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                       <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                       <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                       <MACH_ARMADILLO440>
                Armadillo-400 Board options  --->
                  [*] Enable I2C2 at CON14                   <ARMADILLO4X0_I2C2_CON14>  1
                  [*]   Enable RTC S35390A on I2C2   <ARMADILLO4X0_I2C2_CON14_S35390A>  1
                  [*] Enable I2C3 at CON11                   <ARMADILLO4X0_I2C3_CON11>  2
                  [*]   Enable RTC S35390A on I2C3   <ARMADILLO4X0_I2C3_CON11_S35390A>  2
                  [*] Enable RTC alarm interrupt at CON9_2
                                                     <ARMADILLO4X0_RTC_ALM_INT_CON9_2>  3
  Device Drivers  --->
      <*> Real Time Clock  --->
          [*]   Set system time from RTC on startup and resume           <RTC_HCTOSYS>
          [*]   Set the RTC time based on NTP synchronization            <RTC_SYSTOHC>
          (rtc0)  RTC used to set the system time                 <RTC_HCTOSYS_DEVICE>
                *** RTC interfaces ***
          [*]   /sys/class/rtc/rtcN (sysfs)                           <RTC_INTF_SYSFS>
          [*]   /proc/driver/rtc (procfs for rtcN)                     <RTC_INTF_PROC>
          [*]   /dev/rtcN (character devices)                           <RTC_INTF_DEV>
          [*]     RTC UIE emulation on dev interface           <RTC_INTF_DEV_UIE_EMUL>
                *** I2C RTC drivers ***
          <*>   Seiko Instruments S-35390A                           <RTC_DRV_S35390A>

1

CON9のI2C2に接続されたRTCを使用する場合に設定します。デフォルトで有効化されています。

2

CON11のI2C3に接続されたRTCを使用する場合に設定します。デフォルトで有効化されています。

3

CON9_2 をアラーム割り込み入力に使用します。デフォルトでは無効化されています。

リアルタイムクロックはI2Cバスに接続された I2Cスレーブデバイスとして動作します。リアルタイムクロックとI2Cバスとの接続を表9.4「リアルタイムクロック I2Cバス接続」に示します。

表9.4 リアルタイムクロック I2Cバス接続

RTC搭載ボード/オプションモジュール名I2Cバスアドレス優先順位
Armadillo-400シリーズ RTC オプションモジュールI2C20x301
Armadillo-400シリーズ WLAN オプションモジュール(AWL13対応)I2C20x301
Armadillo-400 シリーズ LCD 拡張ボードI2C30x302

リアルタイムクロックは、デバイスファイルまたはsysfsファイルを使用して操作することができます。デバイスファイルは/dev/rtcN(Nは0から始まる数値)に、sysfsファイルは/sys/class/rtc/rtcN/ディレクトリ以下に作成されます。リアルタイムクロックが一つだけ接続されている場合、/dev/rtc0デバイスファイルまたは/sys/class/rtc/rtc0ディレクトリ以下のsysfsファイルでリアルタイムクロックを操作することができます。 システムにリアルタイムクロックが二つ以上存在する場合、表9.4「リアルタイムクロック I2Cバス接続」の「優先順位」の数字が小さいものから順に/dev/rtc0, /dev/rtc1と割り当てられます[22]。この場合、atmark-distに含まれるhwclock等のアプリケーションでは、/dev/rtc0だけが使用されます。有効にするリアルタイムクロックはカーネルコンフィギュレーションで選択することができます。

アラーム割り込みは、sysfs RTCクラスディレクトリ以下のファイルから利用できます。[23]

wakealarmファイルにUNIXエポックからの経過秒数、または先頭に+を付けて現在時刻からの経過秒数を書き込むと、アラーム割り込み発生時刻を指定できます。アラーム割り込み発生時刻を変更するにはwakealarmファイルに"+0"を書き込み、アラーム割り込みのキャンセル後に再設定する必要があります。アラーム割り込みの利用例を次に示します。

[armadillo ~]# cat /proc/interrupts | grep rtc-s35390a 1
 95:          0  gpio-mxc  15  rtc-s35390a
[armadillo ~]# echo +60 > /sys/class/rtc/rtc0/wakealarm 2
[armadillo ~]# cat /sys/class/rtc/rtc0/wakealarm 3
1434522480
[armadillo ~]# cat /sys/class/rtc/rtc0/since_epoch 4
1434522481
[armadillo ~]# cat /proc/interrupts | grep rtc-s35390a 5
 95:          1  gpio-mxc  15  rtc-s35390a

1

アラーム割り込みの発生回数を確認します。この例では0回です。

2

アラーム割り込みの発生時刻を60秒後に設定します。秒単位は切り捨てられるため、アラーム発生時刻は厳密に60秒後とならない点に注意してください。

3

アラーム割り込みの発生時刻(UNIXエポックからの経過秒数)を確認します。この例では1434522480秒です。

4

現在時刻(UNIXエポックからの経過秒数)を確認します。アラーム割り込みの発生時刻を超えるまで待ちます。

5

再度アラーム割り込みの発生回数を確認します。1増えているのでアラーム割り込みが発生したことを確認できます。

[注記]

デバイスファイル(/dev/rtc0)経由でもアラーム割り込みを利用することができます。サンプルプログラムなどのより詳細な情報については、Linuxカーネルのソースコードに含まれているドキュメント(Documentation/rtc.txt)を参照してください。

[ティップ]

dateコマンドを利用して、UNIXエポックからの経過秒数を日時に変換することができます。

[armadillo ~]# date --date=@`cat /sys/class/rtc/rtc0/since_epoch`
Wed Jun 17 15:29:30 JST 2015
[ティップ]

WLANオプションモジュール(AWL13対応)を使用する場合、RTC_INT1 信号が CON9_2 ピンに接続されます。 リアルタイムクロックにアラーム割り込み発生時刻を設定し、アラーム割り込みを有効にすると、指定した時刻に INT1 信号が High から Low に変化するため、アラーム割り込みを検知することができます。

9.3.12. LED

Armadillo-400 シリーズに搭載されているソフトウェア制御可能なLEDには、GPIOが接続されています。Linuxでは、GPIO接続用LEDドライバ(leds-gpio)で制御することができます。

sysfs LEDクラスディレクトリ

/sys/class/leds/red
/sys/class/leds/green
/sys/class/leds/yellow

関連するソースコード

drivers/leds/led-class.c
drivers/leds/led-core.c
drivers/leds/led-triggers.c
drivers/leds/leds-gpio-register.c
drivers/leds/leds-gpio.c
drivers/leds/trigger/ledtrig-default-on.c
drivers/leds/trigger/ledtrig-heartbeat.c
drivers/leds/trigger/ledtrig-timer.c

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] LED Support  --->                                                      <NEW_LEDS>
          <*>   LED Class Support                                              <LEDS_CLASS>
                *** LED drivers ***
          <*>   LED Support for GPIO connected LEDs                             <LEDS_GPIO>
                *** LED Triggers ***
          [*]   LED Trigger support  --->                                   <LEDS_TRIGGERS>
              <*>   LED Timer Trigger                                  <LEDS_TRIGGER_TIMER>
              <*>   LED Heartbeat Trigger                          <LEDS_TRIGGER_HEARTBEAT>
              <*>   LED Default ON Trigger                        <LEDS_TRIGGER_DEFAULT_ON>

Armadillo-400 シリーズのLED は、LED クラスとして実装されており、 LEDクラスディレクトリ以下のファイルによってLEDの制御を行うことができます。LEDクラスディレクトリと各LEDの対応を次に示します。

表9.5 LEDクラスディレクトリとLEDの対応

LEDクラスディレクトリインターフェースデフォルトトリガ
/sys/class/leds/red/ユーザーLED3(赤色)default-on
/sys/class/leds/green/ユーザーLED4(緑色)default-on
/sys/class/leds/yellow/ユーザーLED5(黄色)none

9.3.13. ユーザースイッチ

Armadillo-400 シリーズに搭載されているユーザースイッチには、GPIOが接続されています。GPIOが接続されユーザー空間でイベント(Press/Release)を検出することができます。Linuxでは、GPIO接続用キーボードドライバ(gpio-keys)で制御することができます。

ユーザースイッチには、次に示すキーコードが割り当てられています。

表9.6 キーコード

ユーザースイッチキーコードイベントコード
SW1KEY_ENTER28
LCD_SW1[a]KEY_BACK158
LCD_SW2[a]KEY_MENU139
LCD_SW3[a]KEY_HOME102

[a] Armadillo-440に、Armadillo-400シリーズLCD拡張ボードを接続した場合に使用可能


ユーザースイッチを制御する GPIO接続用キーボードドライバは次の通りです。

表9.7 GPIO接続用キーボードドライバ

ユーザースイッチGPIO接続用キーボードドライバ
SW1gpio-keys
LCD_SW1gpio-keys
LCD_SW2gpio-keys
LCD_SW3gpio-keys

デバイスファイル
ユーザースイッチデバイスファイル
SW1/dev/input/event0[a]
LCD_SW1/dev/input/event0[a]
LCD_SW2/dev/input/event0[a]
LCD_SW3/dev/input/event0[a]

[a] USBデバイスなどを接続してインプットデバイスを追加している場合は、番号が異なる可能性があります

関連するソースコード

drivers/input/evdev.c
drivers/input/ff-core.c
drivers/input/input-compat.c
drivers/input/input-mt.c
drivers/input/input-polldev.c
drivers/input/input.c
drivers/input/keyboard/gpio_keys.c
drivers/input/keyboard/gpio_keys_polled.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                               <ARCH_MXC>
            Freescale i.MX support  --->
          [*] Support Armadillo-410 platform                         <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                         <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                         <MACH_ARMADILLO440>
                Armadillo-400 Board options  --->
                    [*] Enable GPIO keys at CON11          <ARMADILLO4X0_GPIOKEYS_CON11>
  Device Drivers  --->
      Input device support  --->
          -*- Generic input layer (needed for keyboard, mouse, ...)              <INPUT>
          -*-   Matrix keymap support library                         <INPUT_MATRIXKMAP>
                *** Userland interfaces ***
          <*>   Event interface                                            <INPUT_EVDEV>
                *** Input Device Drivers ***
          [*]   Keyboards  --->                                         <INPUT_KEYBOARD>
              <*>   GPIO Buttons                                         <KEYBOARD_GPIO>
              <*>   IMX keypad support                                    <KEYBOARD_IMX>

9.3.14. I2C

I2Cインターフェースは、i.MX257 の I2C(Inter IC Module) を利用します。 i.MX25 プロセッサは I2C1 から I2C3 までの 3 つの I2C モジュールを内蔵しています。 Armadillo-400 シリーズでは、I2C1 はボード内蔵バスとして使用し、I2C2 は CON14, I2C3 は CON11 に割り当てています。

また、GPIOを利用したI2Cバスドライバ(i2c-gpio)を利用することで、I2Cバスを追加することができます。

標準状態で、CONFIG_I2C_CHARDEVが有効となっているためユーザードライバでI2Cデバイスを制御することができます。

機能

最大転送レート: 400kbps (I2C1, I2C2, I2C3)

デバイスファイル

/dev/i2c-0 (I2C1)
/dev/i2c-1 (I2C2)
/dev/i2c-2 (I2C3)

関連するソースコード

drivers/i2c/i2c-boardinfo.c
drivers/i2c/i2c-core.c
drivers/i2c/i2c-dev.c
drivers/i2c/algos/i2c-algo-bit.c
drivers/i2c/busses/i2c-gpio.c
drivers/i2c/busses/i2c-imx.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                                  <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                              <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                              <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                              <MACH_ARMADILLO440>
                Device options  --->
                    -*- Enable I2C1 module                                <I2C_MXC_SELECT1>
                    -*- Enable I2C2 module                                <I2C_MXC_SELECT2>
                    -*- Enable I2C3 module                                <I2C_MXC_SELECT3>
                Armadillo-400 Board options  --->
                    [*] Enable I2C2 at CON14                      <ARMADILLO4X0_I2C2_CON14>
                    [*] Enable I2C3 at CON11                      <ARMADILLO4X0_I2C3_CON11>
  Device Drivers  --->
      <*> I2C support  --->                                                           <I2C>
          <*>   I2C device interface                                          <I2C_CHARDEV>
          [*]   Autoselect pertinent helper modules                       <I2C_HELPER_AUTO>
                I2C Hardware Bus support  --->
              <*> GPIO-based bitbanging I2C                                      <I2C_GPIO>
              <*> IMX I2C interface                                               <I2C_MXC>

I2C バスにスレーブデバイスを接続し、それを使用可能にするためには、スレーブデバイスに対応したドライバを有効にする必要があります。 また、struct i2c_board_info を適切に設定しなければいけません。 Armadillo-400シリーズでは、linux-3.14-at/arch/arm/mach-imx/armadillo4x0_extif.cのarmadillo4x0_i2cN配列(Nはバスに対応した数値)に記述してください。

static struct i2c_board_info armadillo4x0_i2c1[] = {
	{
		I2C_BOARD_INFO("s35390a", 0x30),
	},
};

図9.1 I2C i2c_board_infoの設定


標準では、I2C1バスの通信速度は40kbpsに設定されています。通信速度は、armadillo4x0_extif.c の以下の場所で設定されています。

static const struct imxi2c_platform_data mx25_i2c1_data __initconst = {
	.bitrate = 40000,
};

図9.2 I2C通信速度の設定


9.3.15. SPI

SPIインターフェースは、i.MX257 の CSPI(Configurable Serial Peripheral Interface)を利用します。Armadillo-400シリーズはカーネルコンフィギュレーションにより、CSP1 及び CSPI3 を CON9に割り当てる事が可能です。

標準状態では無効になっている CONFIG_SPI_SPIDEV を有効化すると、ユーザードライバでSPIデバイスを制御することができます。

機能

SPIマスターモード
複数スレーブセレクト
最大通信速度 約16Mbps

関連するソースコード

drivers/spi/spi-bitbang.c
drivers/spi/spi-imx.c
drivers/spi/spi.c
drivers/spi/spidev.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                              <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                        <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                        <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                        <MACH_ARMADILLO440>
                Device options  --->
                    [*] Enable SPI1 module                            <SPI_MXC_SELECT1>  1
                    [*] Enable SPI3 module                            <SPI_MXC_SELECT3>  2
                Armadillo-400 Board options  --->
                    [ ] Enable UART3 at CON9                  <ARMADILLO4X0_UART3_CON9>  1
                    [ ] Enable UART5 at CON9                  <ARMADILLO4X0_UART5_CON9>  2
                    [*] Enable SPI1 at CON9                    <ARMADILLO4X0_SPI1_CON9>  1
                    [*]   Enable SPI1_SS0 at CON9_25    <ARMADILLO4X0_SPI1_SS0_CON9_25>  1
                    [*]   Enable SPI1_SS1 at CON9_11    <ARMADILLO4X0_SPI1_SS1_CON9_11>  1
                    [*] Enable SPI3 at CON9                    <ARMADILLO4X0_SPI3_CON9>  2
                    [*]   Enable SPI3_SS0 at CON9_16    <ARMADILLO4X0_SPI3_SS0_CON9_16>  2
                    [*]   Enable SPI3_SS1 at CON9_18    <ARMADILLO4X0_SPI3_SS1_CON9_18>  2
                    [*]   Enable SPI3_SS2 at CON9_15    <ARMADILLO4X0_SPI3_SS2_CON9_15>  2
                    [*]   Enable SPI3_SS3 at CON9_17    <ARMADILLO4X0_SPI3_SS3_CON9_17>  2
  Device Drivers  --->
      [*] SPI support  --->                                                       <SPI>  3
                *** SPI Master Controller Drivers ***
          -*-   Utilities for Bitbanging SPI masters                      <SPI_BITBANG>  3
          <*>   Freescale i.MX SPI controllers                                <SPI_MXC>  3
                *** SPI Protocol Masters ***
          < >   User mode SPI device driver support                        <SPI_SPIDEV>

1

CON9にSPI1を割り当てる場合に設定します。デフォルトでは無効化されています。

2

CON9にSPI3を割り当てる場合に設定します。デフォルトでは無効化されています。

3

SPIを有効化する場合に設定します。デフォルトでは無効化されています。

SPI マスタードライバーとスレーブデバイスのドライバーを有効にする必要があります。また、struct spi_board_info を適切に設定しなければいけません。struct spi_board_infoはlinux-3.[version]/arch/arm/mach-imx/armadillo4x0_extif.cのarmadillo4x0_spiN_board_info (Nはバスに対応した数値)に記述してください。SPIバスの通信速度は、それぞれのスレーブデバイスごとに設定します。

SPIのハードウェア、バスナンバー、struct spi_board_infoの対応は次に示す通りです。

ハードウェアバスナンバーstruct spi_bord_info名
CSPI10armadillo4x0_spi0_board_info
CSPI32armadillo4x0_spi2_board_info

9.3.16. ウォッチドッグタイマー

Armadillo-400 シリーズのウォッチドッグタイマーは、i.MX257 の WDOG(Watchdog Timer) を利用します。

ウォッチドッグタイマーは、Hermit-Atブートローダーによって有効化されます。標準状態でタイムアウト時間は10秒に設定されます。Linuxカーネルでは、ウォッチドッグタイマードライバの初期化時に、このタイムアウト時間を上書きします。標準状態のタイムアウト時間は10秒です。カーネルタイマーを利用して定期的にウォッチドッグタイマーをキックします。

何らかの要因でウォッチドッグタイマーのキックができなくなりタイムアウトすると、システムリセットが発生します。

関連するソースコード

drivers/watchdog/imx2_wdt.c

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] Watchdog Timer Support  --->                                           <WATCHDOG>
          <*>   IMX2+ Watchdog                                                   <IMX2_WDT>
[警告]

i.MX257 の WDOG は、一度有効化すると無効化することができません。そのため、haltコマンドなどを実行してLinux カーネルを停止した場合は、ウォッチドッグタイマーのキックができなくなるためシステムリセットが発生します。

WDOGドライバーの終了処理では、タイムアウト時間をWDOGの最大値である128秒に設定します。

9.3.17. 1-wire

Armadillo-400シリーズは、CON9_2とCON9_26を1-wireマスターとして使用する事ができます。CON9_2は i.MX257 の 1-wire(1-wire Module) を利用し、CON9_26はGPIO 1-wireドライバーを用いて機能を実現しています。

デフォルト状態では、1-wire を利用することができません。1-wire を利用するためには、カーネルコンフィギュレーションを行い 1-wire マスタードライバーと 接続するスレーブデバイスのドライバーを有効にする必要があります。

関連するソースコード

drivers/w1/masters/mxc_w1.c
drivers/w1/w1.c
drivers/w1/w1_int.c
drivers/w1/w1_family.c
drivers/w1/w1_netlink.c
drivers/w1/w1_io.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                           <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                     <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                     <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                     <MACH_ARMADILLO440>
                Device options  --->
                  [*] Enable MX25 1-Wire module                     <W1_MXC_SELECT1>  1
                  [*] Enable GPIO 1-Wire module                    <W1_GPIO_SELECT1>  2
                Armadillo-400 Board options  --->
                  [*] Enable one wire at CON9_2             <ARMADILLO4X0_W1_CON9_2>  1
                  [*] Enable one wire at CON9_26           <ARMADILLO4X0_W1_CON9_26>  2
  Device Drivers  --->
      <*> Dallas's 1-wire support  --->                                         <W1>  12
            1-wire Bus Masters  --->
                <*> Freescale MXC 1-wire busmaster                   <W1_MASTER_MXC>  1
                <*> GPIO 1-wire busmaster                           <W1_MASTER_GPIO>  2

1

CON9_2を1-wireとして使用する場合に設定します。デフォルトでは無効化されています。

2

CON9_26を1-wireとして使用する場合に設定します。デフォルトでは無効化されています。

9.3.18. PWM

Armadillo-400 シリーズの PWM は、i.MX257 の PWM(Pulse-Width Modulator) を利用します。

カーネルコンフィギュレーションを変更することにより、PWM2をCON9_25に、PWM4をCON14_3に割り当てる事ができます。

関連するソースコード

drivers/pwm/core.c
drivers/pwm/pwm-imx.c
drivers/pwm/sysfs.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                           <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                     <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                     <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                     <MACH_ARMADILLO440>
                Device options  --->
                  [*] Enable PWM2                                  <MXC_PWM_SELECT2>  1
                  [*] Enable PWM4                                  <MXC_PWM_SELECT4>  2
                Armadillo-400 Board options  --->
                  [ ] Enable I2C2 at CON14                 <ARMADILLO4X0_I2C2_CON14>  2
                  [*] Enable PWM2 at CON9_25             <ARMADILLO4X0_PWM2_CON9_25>  1
                  [*] Enable PWM4 at CON14_3             <ARMADILLO4X0_PWM4_CON14_3>  2
  Device Drivers  --->
      [*] Pulse-Width Modulation (PWM) Support  --->                           <PWM>
          <*>   i.MX PWM support                                           <PWM_IMX>

1

CON9_25をPWM2として使用する場合に設定します。デフォルトでは無効化されています。

2

CON14_3をPWM4として使用する場合に有効化します。デフォルトでは無効化されています。

ARMADILLO4X0_PWM4_CON14_3 は、ARMADILLO4X0_I2C2_CON14 を無効化しなければ、有効化できません。

PWM機能は使用する前にexportする必要があります。exportするためには、/sys/class/pwm/pwmchipN/exportに0を書き込みます。exportすると/sys/class/pwm/pwmchipN/pwm0が生成されます。

[armadillo ~]# echo 0 > /sys/class/pwm/pwmchip0/export

図9.3 pwmchip0をexportする


[ティップ]

/sys/class/pwm/pwmchipN/exportNは、カーネルがPWMを認識した順に連番の値が設定されます。pwmchipNがどこにリンクされているかを調べる事で、i.MX25のどのハードウェアに割当たっているか調べる事ができます。

[armadillo ~]# ls -l /sys/class/pwm/pwmchip0
lrwxrwxrwx    1 root     root             0 Jan  1  1970 /sys/class/pwm/pwmchip0 -> ../../devices/platform/imx27-pwm.1/pwm/pwmchip0/

上記の例では、pwmchip0は、imx27-pwm.1にリンクされています。リンク先のsysfsファイル名と、PWMのハードウェアとの対応は次の通りです。

ハードウェアsysfsファイル名
PWM2 CON9_25imx27-pwm.1
PWM4 CON14_3imx27-pwm.3

PWM機能は、/sys/class/pwm/pwmchipN/pwm0以下のファイルに値を書き込む事で設定変更する事ができます。設定に使用するファイルを、表9.8「PWM sysfs」に示します。

表9.8 PWM sysfs

ファイル名説明

enable

PWMの動作/停止を設定します

1: PWMは動作します。period、duty_cycle、polarityの設定に応じた波形を出力します

0: PWMは停止ます

period

PWMの周期をnsec単位で設定します

設定可能な範囲は、17〜2,147,483,647 (約20nsecから2sec)です

設定変更はenable=0の状態で行います

duty_cycle

PWMのHigh期間(polarity=inversedの場合はLow期間)をnsec単位で設定します

設定可能な範囲は、0 < duty_cycle < period の範囲です

設定変更はenable=0の状態で行います

polarity

PWM波形の極性を設定します

normal: PWM波形は正転状態となります。duty_cycleで指定する時間はHigh期間になります

inversed: PWM波形は反転状態となります。duty_cycleで指定する時間はLow期間になります

設定変更はenable=0の状態で行います


9.3.19. CAN

Armadillo-400シリーズの CAN は、i.MX257 の FlexCAN(Controller Area Network) を利用します。

カーネルコンフィギュレーションを変更する事により、CAN2をCON14に割り当てる事ができます。

関連するソースコード

drivers/net/can/flexcan.c
drivers/net/can/dev.c
net/can/af_can.c
net/can/bcm.c
net/can/gw.c
net/can/proc.c
net/can/raw.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                           <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-410 platform                     <MACH_ARMADILLO410>
          [*] Support Armadillo-420 platform                     <MACH_ARMADILLO420>
          [*] Support Armadillo-440 platform                     <MACH_ARMADILLO440>
                Device options  --->
                  [*] Enable FlexCAN2 module                       <FLEXCAN_SELECT2>  1
                Armadillo-400 Board options  --->
                  [ ] Enable I2C2 at CON14                 <ARMADILLO4X0_I2C2_CON14>  1
                  [*] Enable CAN2 at CON14                 <ARMADILLO4X0_CAN2_CON14>  1
  [*] Networking support  --->                                                 <NET>
      <*>   CAN bus subsystem support  --->                                    <CAN>  1
          <*>   Raw CAN Protocol (raw access with CAN-ID filtering)        <CAN_RAW>
          <*>   Broadcast Manager CAN Protocol (with content filtering)    <CAN_BCM>
          <*>   CAN Gateway/Router (with netlink configuration)             <CAN_GW>
          CAN Device Drivers  --->
              <*> Platform CAN drivers with Netlink support                <CAN_DEV>
              [*]   CAN bit-timing calculation                  <CAN_CALC_BITTIMING>
              <*>   Support for Freescale FLEXCAN based chips          <CAN_FLEXCAN>  1

1

CON9にCAN2を割り当てる場合に設定します。デフォルトでは無効化されています。ARMADILLO4X0_CAN2_CON14 は、ARMADILLO4X0_I2C2_CON14 を無効化しなければ、有効化できません。

CANの転送速度の設定にはipコマンドを使用します。iproute2ipコマンドで、通信速度を125kpbsに設定するには、次のコマンドを実行します。

[armadillo ~]# ip link set can0 type can bitrate 125000 loopback off

転送速度が変更されたかどうかは、次のコマンドで表示される bitrate の数値から確認することができます。

[armadillo ~]# ip -s -d link show can0
2: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN mode DEFAULT group default qlen 10
    link/can  promiscuity 0
    can state STOPPED (berr-counter tx 0 rx 0) restart-ms 0
          bitrate 125000 sample-point 0.857
          tq 571 prop-seg 5 phase-seg1 6 phase-seg2 2 sjw 1
          flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1
          clock 66500000
          re-started bus-errors arbit-lost error-warn error-pass bus-off
          0          0          0          0          0          0
    RX: bytes  packets  errors  dropped overrun mcast
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0
[警告]

Armadillo-400シリーズのユーザーランドに 標準で組み込まれているBusyBoxのipコマンドは、CANの転送速度を設定できません。そのためCAN機能を使用する場合には、ユーザーランドコンフィギュレーションを行い、iproute2を組み込んでおく必要があります。

Userland Configuration
  Network Applications --->
    [*] iproute2                 チェックを入れる


[21] Armadillo-400 シリーズ RTC オプションモジュールでも、PD1をCON9_2ピンに接続すればアラーム割り込みを使用可能です。

[22] 例えば、Armadillo-440 に Armadillo-400シリーズ LCD拡張ボードと WLANオプションモジュール(AWL13対応)を接続した場合、リアルタイムクロックが二つ接続された状態となり、/dev/rtc0 がI2C2に接続されたWLANオプションモジュールのリアルタイムクロックに対応し、/dev/rtc1 がI2C3に接続されたArmadillo-400シリーズLCD拡張ボードのリアルタイムクロックに対応します。

[23] Armadillo-400シリーズの Linux カーネルでは、アラーム割り込み機能は無効になっています。そのため、アラーム割り込み機能を使用するには、Linux カーネルのコンフィギュレーションを有効にしてください。