イントロダクション

OSS-ECAL(呼称:イーキャル)とは、電子部品抽象化レイヤのオープンソースソフトウェア(Open Source Software for Electronic Components Abstraction Layer)の略称です。

OSS-ECALイントロダンス

背景

電子部品用ソフトウェアは、電子部品の機能があらかじめ仕様が決まっているため、電子製品ごとに新規開発する必要がありません。また、電子部品用ソフトウェアは電子製品において競争優位性を生まない非競争領域であり、不要な開発コストとなっています。このため、組込み製品メーカー様から電子部品メーカー様に対し、電子部品用ソフトウェアの提供を求める声が増加しています。

目的

OSS-ECALの目的は、非競争領域である電子部品用ソフトウェアの共通利用を促進することで、組込み製品メーカー様および電子部品メーカー様の開発コスト削減と品質向上を実現することです。

特徴

OSS-ECALは、次の特徴を持つ、ソフトウェアです。

 1. 電子部品に対するソフトウェアとしての標準インタフェース(API)
 2. 各電子部品の特徴に合わせたインタフェース(API)
 3. 電子部品の組み合わせに対応
 4. HALをラッピング
 5. 多種多様なHALに対応

プログラム言語:C言語。尚、MbedおよびArduino用OSS-ECALは、C++に合わせて拡張子を.cppに変更しています。

用語の定義

本サイトで用いる用語およびコーディングの名称の定義は、下表の通りです。

用語意味
ABC電子部品の型番仮称
APIアプリケーション・インタフェース
c(接頭語)Const定数のラベル名の接頭語
COMMANDコマンドの仮称
e(接頭語)列挙型enum メンバー名の接頭語
et(接頭語)列挙型enum タグ名の接頭語
etCMPOSS-ECAL共通コンポーネントコードの列挙型(enum)定義
etSTSOSS-ECAL共通ステータスコードの列挙型(enum)型定義
gv(接頭語)グローバル変数のラベル名の接頭語
HALHardware Abstraction Layer, AUTOSARではMCAL
HALNAMEHALの仮称
HALNAMEはHAL対応表を参照してください
iイミディエイト定数のラベル名の接頭語
o(接頭語)コマンドAPI関数名の接頭語
OSS-ECALOpen Source Software for Electronic Components Abstraction Layer
st(接頭語)構造体の型struct タグ名の接頭語
sv(接頭語)静的変数のラベル名の接頭語
tbl(接頭語)テーブル定数の接頭語
コンポーネント電子部品
SWコンポーネントソフトウェア・コンポーネント

API

API関数の基本構成

APIは、次のように電子部品の型番とコマンドによるコマンドAPI関数です。

etSTS oABC_COMMAND( stABC_I, stABC_O* )

関数名oABC_COMMANDABC用コマンドのAPI関数の名称
戻り値の型etSTSOSS-ECALステータスコード
引数 INの型stABC_I引数の入力型
引数 OUTの型stABC_O*引数の出力型

例 : Microchip Technology製EEPROM 24xx256シリーズのByte WriteコマンドAPI関数

Microchip Technology製EEPROM 24xx256シリーズのByte WriteコマンドAPI関数を例に紹介します。

etSTS o24xx256_BYTE_WRITE( etCMP cmp, uint16 mem_adr, uint8 val )

処理概要:
o24xx256_BYTE_WRITE関数は、24xx256シリーズ(24AA256, 24LC256, 24FC256)に対して指定したアドレスmem_adrにvalの値をWriteするAPI関数です。この関数は、書き込み完了までの時間(i24xx256_WRITE_TIME [ms])が経過するまで、戻り値eSTS_EXEを返します。

戻り値etSTSOSS-ECALステータスコード
 eSTS_FIN
 eSTS_EXE
 eSTS_ERR_PARAMETER
 eSTS_ERR_I2C_OBJECT
 eSTS_ERR_OTHERS_RUN
 eSTS_ERR_HAL_OTHERS_RUN
 eSTS_ERR_HAL_I2C

正常終了
実行中
パラメータエラー(メモリアドレス範囲外)
I2Cオブジェクト選択エラー
他コンポーネントが処理実行中
HALオブジェクト実行中
HAL I2Cエラー
引数 INetCMP cmp共通コンポーネントコードe24xx256 20007U

6.2)⑦のように3つの24xx256をつないだ場合
e24xx256_1 49900U
e24xx256_2 49901U
e24xx256_3 49902U
uint16 mem_adrメモリアドレス範囲 0x0000 to 0x7fff
uint8 val書き込むデータ範囲 0x00 to 0xff

備考:
i24xx256_WRITE_TIME [ms]経過計測は、この関数をコールするThread周期から計算するので、THREAD_OSS_ECAL_PERIOD [ms]にThread周期を設定してください。 この関数を使用する際には、o24xx256_WP_DIS関数でライトプロテクトを解除してからご利用ください。

HALサポート

OSS-ECALのHAL対応は、次の通り(順次拡大中)です。尚、HAL対応は各電子部品のOSS-ECALページでご確認ください。尚、同じHALであってもVerやMCU、開発環境が異なると動作が合わない場合がありますので、ご注意ください。

メーカSDK/IDE ツールHAL名称VerHALNAMESupport
ArduinoArduino IDEArduino1.8.6ARDUINOX
ArmKeil MDK v6Mbed OS6.17.0MBEDX
DebianGNU/Linux10.3Linux
InfineonModusToolboxmtb-hal-cat12.4.3ModusToolboxX
NXPMCUXpresso SDKSDK_2.x_EVKB-IMXRT10502.16iMXRT1051B1052BX
STMicroelectronicsPlatformSDK_S32K1_2022_02AUTOSAR MCAL4.4MCAL
RenesasSynergy Software PackageHAL2.6.0SSP
STMicroelectronicsSTM32CubeSTM32CubeF4V1.28.1STM32F4X
開発環境

開発時のMCUおよび開発環境は、次の通りです。

HAL Nameメーカ開発ボードMCUIDE
ARDUINOArduino1.Mega 2560 Rev3
2.Arduino Pro Mini 3.3V
ATmega2560
ATmega328P
Arduino IDE 2.3.3
MBEDSTMicroelectronicsSTM32 Nucleo-64 boardsSTM32F401RETxArm Keil Studio Cloud
LinuxBeagleBoardBeagleBone BlackTI AM335x
ModusToolboxInfineonCY8CPROTO-063-BLE PSoC 6 BLE Prototyping KitCYBLE-416045-02ModusToolbox
iMXRT1051B1052BNXPIMXRT1050-EVKBi.MX RT1050MCUXpresso IDE
MCALSTMicroelectronicsS32K144EVB-Q100S32K144S32 Design Studio for S32 Platform
SSPRenesasS7G2 SKR7FS7G27H3A01CFCe² studio for Renesas Synergy
STM32F4STMicroelectronicsSTM32 Nucleo-64 boardsSTM32F401RETxSTM32CubeIDE

ファイル構成

OSS-ECALのファイル構成は、次の例をご参考にしてください。尚、HALによってファイル構成が異なりますので、各コンポーネントのOSS-ECALページでご確認ください。

例:24xx256 フォルダ構成

フォルダファイル概要
24xx256_IMXRT1050_010000/samplesample.cサンプル・アプリケーション・プログラム
sample.hサンプル・アプリケーション・ヘッダ
24xx256_IMXRT1050_010000oABC.c24xx256用OSS-ECALプログラム
oABC.h24xx256用OSS-ECALヘッダ
oss_ecal.hOSS-ECAL 共通ヘッダ
user_setting.cユーザ設定定数・テーブル
user_setting.hユーザ設定ヘッダ
readme.mdReadme
OSS-ECAL Terms of Use.txtOSS-ECAL利用条件

組込み方法

製品プログラムにコマンドAPI関数を組み込むためには、次の手順で行ってください。

  1. OSS-ECALファイルの入手
  2. user_setting.hおよびuser_setting.cにMCUや製品プログラム情報を設定
  3. sample.cを参考に製品プログラムのアプリケーションにコマンドAPI関数追加
  4. 製品プログラムの開発環境にOSS-ECALファイル追加
1. OSS-ECALファイルの入手

英語版OSS-ECALサイト(https://oss-ecal.com/)のコンポーネントページからダウンロードのお問合せを行ってください。OSS-ECALファイル(zip形式)は、お問合せいただいたメールアドレスへメールに添付してお送りいたします。

お送りしたファイルを解凍し、ご利用されるHALフォルダ内からsampleフォルダを除いてご利用ください。なお、sampleフォルダ内のファイルは、アプリケーションに組み込む際の参考用コードとしてご活用ください。

2. user_setting.hおよびuser_setting.hにMCUや製品プログラム情報を設定

EEPROM 24xx256シリーズをもとに説明します。青文字のコード部をMCUや製品プログラムに合わせてください。

① コマンドAPI関数のThread(Task)周期をuser_setting.hに設定
// Immediate definitions
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define THREAD_OSS_ECAL_PERIOD  50U     // Thread period time[ms]
② 24xx256のデバイスアドレスをuser_setting.hに設定

24xx256シリーズは、MCUに最大8個まで接続できます。そのデバイスアドレス(24xx256 A0, A1, A2 pinの設定)を設定してください。この例では、24xx256を3個つないだ場合です。

// Device address Code bit2:A2, bit1:A1, bit0:A0
#define M24xx256_1              0b00000000
#define M24xx256_2              0b00000001
#define M24xx256_3              0b00000010
// I2C components address
#define I2C_ADR_24xx256_1       (( 0b00001010 << 3 ) | ( 0x07 & M24xx256_1 ))
#define I2C_ADR_24xx256_2       (( 0b00001010 << 3 ) | ( 0x07 & M24xx256_2 ))
#define I2C_ADR_24xx256_3       (( 0b00001010 << 3 ) | ( 0x07 & M24xx256_3 ))
③ 送受信バッファ数をuser_setting.hに設定

24xx256シリーズの送受信バッファ数は最大64Byteです。その送受信バッファ数を設定してください。

// TX and RX buffer size(bytes) for 24xx256
// CAUTION : Set the minimum value among the following
// - Number of send/receive buffers used by the application
// - Number of send/receive buffers used by HAL
// - Number of 24xx256 send/receive Max 64 bytes
#define TX_N_24xx256            64U
#define RX_N_24xx256            64U
④ 24xx256シリーズのWrite-protectのMCU pinをuser_setting.hに設定

24xx256シリーズのWrite-protect pinと接続しているMCU pinを設定してください。この例では、24xx256を3個つないだ場合です。

// OSS-ECAL GPIO hard wiring
#define CMP_GPIO_NUM       3U      // OSS-ECAL GPIO components number
#define GPIO_24xx256_1_WP  BOARD_INITPINS_M24xx256_1_WP_PORT
#define PIN_24xx256_1_WP   BOARD_INITPINS_M24xx256_1_WP_PIN
#define GPIO_24xx256_2_WP  BOARD_INITPINS_M24xx256_2_WP_PORT
#define PIN_24xx256_2_WP   BOARD_INITPINS_M24xx256_2_WP_PIN
#define GPIO_24xx256_2_WP  BOARD_INITPINS_M24xx256_2_WP_PORT
#define PIN_24xx256_2_WP   BOARD_INITPINS_M24xx256_2_WP_PIN
⑤ I2C通信設定をuser_setting.hに設定

24xx256シリーズと通信するI2Cの設定してください。

// OSS-ECAL I2C components hard wiring
#define CMP_I2C_NUM             1U
#define I2C_HZ                  400000              // MCU I2C frequency
#define I2C_24xx256             LPI2C1_PERIPHERAL   // LPI2C peripheral base address
⑥ I2C通信のリトライ数をuser_setting.hに設定

I2C通信エラー発生した場合の通信リトライ数を設定してください。

// I2C settings
#define I2C_RETRY               3U      // Retry times
⑦ Component number codeをoss_ecal.hに追加

この例では、24xx256を3個つないだので、oss_ecal.hの24xx256のComponent code(A)(B)のように設定してください。

// Components number codes      1 to 49999
typedef enum
{
// ADC components 1 to 19999
        eAD22100A               = 1U    ,       // Analog devices AD22100A
        eAD22100K               = 2U    ,       // Analog devices AD22100K
        eAD22100S               = 3U    ,       // Analog devices AD22100S
        eAD22103K               = 4U    ,       // Analog devices AD22103K
        eBD1020HFV              = 5U    ,       // ROHM BD1020HFV
        eCHS_MSS                = 6U    ,       // TDK CHS-MSS
        eCHS                    = 7U    ,       // TDK CHS-UPS, CHS-UPR, CHS-UGS, CHS-UGR
        eGP2Y0A21YK0F           = 8U    ,       // SHARP GP2Y0A21YK0F
        eGP2Y0A41SK0F           = 9U    ,       // SHARP GP2Y0A41SK0F
        eGP2Y0A51SK0F           = 10U   ,       // SHARP GP2Y0A51SK0F
        eLM35                   = 11U   ,       // Texas Instruments LM35, LM35A
        eLM35C                  = 12U   ,       // Texas Instruments LM35C, LM35CA
        eLM35D                  = 13U   ,       // Texas Instruments LM35D
        eLM45B                  = 14U   ,       // Texas Instruments LM45B, LM45C
        eLM50B                  = 15U   ,       // Texas Instruments LM50B
        eLM50C                  = 16U   ,       // Texas Instruments LM50C, LM50-Q1
        eTMP9A00                = 17U   ,       // Texas Instruments TMP9A00-EP
        eMAX6605                = 18U   ,       // Maxim Integrated MAX6605MXK+T, MAX6605MXK-T
        eMAX6605V               = 19U   ,       // Maxim Integrated MAX6605MXK/V+T
        eMAX6607_8              = 20U   ,       // Maxim Integrated MAX6607IXK-T, MAX6608IUK-T
        eMAX6613                = 21U   ,       // Maxim Integrated MAX6613MXK+T, MAX6613MXK/V+T
        eMPX4250A               = 22U   ,       // NXP MPX4250A, MPXA4250A
        eMPX5999D               = 23U   ,       // NXP MPX5999D
        eMPXH6115A              = 24U   ,       // NXP MPXH6115A
        eMPXHZ6250A             = 25U   ,       // NXP MPXHZ6250A
        eMPXH6400A              = 26U   ,       // NXP MPXH6400A
        eMCP9700                = 27U   ,       // Microchip Technology MCP9700, MCP9700A
        eMCP9701                = 28U   ,       // Microchip Technology MCP9701, MCP9701A
        eTC1046                 = 29U   ,       // Microchip Technology TC1046
        eTC1047                 = 30U   ,       // Microchip Technology TC1047, TC1047A
        eS58LM20A               = 31U   ,       // ABLIC S-58LM20A
        eS5813A                 = 32U   ,       // ABLIC S-5813A, S-5814A
        eS8110C                 = 33U   ,       // ABLIC S-8110C, S-8120C
        eSTLM20DD9F             = 34U   ,       // STMicroelectronics STLM20DD9F
        eSTLM20W87F             = 35U   ,       // STMicroelectronics STLM20W87F
// I2C components 20000 to 39999
        eS35710                 = 20000U,       // ABLIC S-35710            [01.01.00]
        eHDC1080                = 20001U,       // Texas Instruments HDC1080[01.01.00]
        eHS300X                 = 20002U,       // Renesas HS3001, HS3003   [01.01.00]
        eMB85RC256V             = 20003U,       // Fujitsu MB85RC256V       [01.01.00]
        eCAT24C512              = 20004U,       // onsemi CAT24C512         [01.01.00]
        eAT24C256C              = 20005U,       // Microchip Technology AT24C256C   [01.01.01]
        eAT24C08C               = 20006U,       // Microchip Technology AT24C08C    [01.01.01]
  (A)   e24xx256                = 20007U,       // Microchip Technology 24AA256, 24LC256, 24FC256   [01.01.02]
// SPI components 40000 to 49998
        eMAX6675                = 40000U,       // Maxim Integrated MAX6675
// User setting number 49900 to 49998           // User setting number Add  [01.01.00]
  (B)   e24xx256_1              = 49900U,       // Microchip Technology 24AA256, 24LC256, 24FC256
        e24xx256_2              = 49901U,       // Microchip Technology 24AA256, 24LC256, 24FC256
        e24xx256_3              = 49902U,       // Microchip Technology 24AA256, 24LC256, 24FC256

// Non component number
        eNON_CMP                = 49999U        // Non component number
}etCMP;
⑧ 24xx256のデバイスアドレスおよびI2Cオブジェクトをuser_setting.cに設定

②で設定したデバイスアドレスと⑤で設定したI2Cオブジェクト、⑦で設定したComponent codeをHAL I2C objectテーブルに設定してください。

// HAL I2C object table for components
const stI2C_MCUX_OBJ tblI2C[ CMP_I2C_NUM ] =
{
        { e24xx256_1, I2C_ADR_24xx256_1, I2C_24xx256 },
        { e24xx256_2, I2C_ADR_24xx256_2, I2C_24xx256 },
        { e24xx256_3, I2C_ADR_24xx256_3, I2C_24xx256 }
};
⑨ 24xx256のWrite-protectのMCU pinをuser_setting.cに設定

④で設定したWrite-protect のGPIOオブジェクトと⑦で設定したComponent codeをHAL GPIO objectテーブルに設定してください。

// HAL GPIO object table for components
const stGPIO_MCUX_OBJ tblGPIO[ CMP_GPIO_NUM ] =
{
        { e24xx256_1, GPIO_24xx256_1_WP, PIN_24xx256_1_WP },
        { e24xx256_2, GPIO_24xx256_2_WP, PIN_24xx256_2_WP },
        { e24xx256_3, GPIO_24xx256_3_WP, PIN_24xx256_3_WP }
};
3. sample.cを参考に製品プログラムにコマンドAPI関数追加

sample.cを参考に製品プログラムにコマンドAPI関数を追加してください。

4. 製品プログラムの開発環境にOSS-ECALファイル追加

製品プログラムの開発環境にOSS-ECALファイル追加を追加してください。

5. その他の組み込む方法

ユーザプログラムに複数のOSS-ECAL(同じMCU機能の電子部品)を組み込む方法

ユーザプログラムに複数のOSS-ECAL(異なるMCU機能の電子部品)を組み込む方法

ユーザプログラムに複数同じ電子部品を組み込む方法

電子部品の入れ替えによるユーザプログラムへの影響低減方法

注意事項

OSS-ECAL利用条件を遵守してご利用ください。また、電子製品の検証は組込み製品メーカー様の責任で行ってください。

OSS-ECAL Japanese
error: コンテンツは保護されている