イントロダクション

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
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関数でライトプロテクトを解除してからご利用ください。

参考:
24xx256シリーズには、他にも下記のコマンドAPI関数を用意しています。

etSTS o24xx256_PAGE_WRITE( etCMP cmp, uint16 mem_adr, uint16 len, uint8* buf )
o24xx256_PAGE_WRITE関数は、24xx256シリーズ(24AA256, 24LC256, 24FC256)に対して指定したアドレスmem_adrから順番にbuf[0]からbuf[len-1]の値をWriteするAPI関数です。この関数は、書き込み完了までの時間(i24xx256_WRITE_TIME [ms])が経過するまで、戻り値eSTS_EXEを返します。

etSTS o24xx256_CURRENT_READ( etCMP cmp, uint8* rlt )
o24xx256_CURRENT_READ関数は、24xx256シリーズ(24AA256, 24LC256, 24FC256)に対して前回のReadまたはWriteしたアドレス + 1から1Byte分の値をReadし、rltに保存するAPI関数です。

etSTS o24xx256_RANDOM_READ( etCMP cmp, uint16 mem_adr, uint8* rlt )
o24xx256_RANDOM_READ関数は、24xx256シリーズ(24AA256, 24LC256, 24FC256)に対して指定したアドレスmem_adrから1Byte分の値をReadし、rltに保存するAPI関数です。

etSTS o24xx256_SEQ_READ( etCMP cmp, uint16 mem_adr, uint16 len, uint8* buf )
o24xx256_SEQ_READ関数は、24xx256シリーズ(24AA256, 24LC256, 24FC256)に対して指定したアドレスmem_adrから順番にlen分のデータを読み込み、buf[0]からbuf[len-1]に保存するAPI関数です。

etSTS o24xx256_WP_EN( etCMP cmp )
o24xx256_WP_EN関数は、24xx256シリーズ(24AA256, 24LC256, 24FC256)に対してWrite protect enable (write disable) = “Hi” 出力するAPI関数です。

etSTS o24xx256_WP_DIS( etCMP cmp )
o24xx256_WP_DIS関数は、24xx256シリーズ(24AA256, 24LC256, 24FC256)に対してWrite protect disable (write enable) = “Low” 出力するAPI関数です。

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
開発環境

OSS-ECAL開発時の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. MCUや製品プログラム情報の設定
  3. 製品プログラムにコマンドAPI関数追加
  4. 製品プログラムの開発環境にOSS-ECALファイル追加
1. OSS-ECALファイルの入手

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

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

2. MCUや製品プログラム情報の設定

MCU(NXP i.MX RT1050)にEEPROM 24xx256シリーズを1つ接続した例をもとにOSS-ECALの組込み方法について説明します。青文字のコード部をMCUや製品プログラムに合わせてください。

下図のMCU設定は、NXP MCUXpresso SDKにて設定したラベル名回路設定です。

① コマンドAPI関数の周期の設定

コマンドAPI関数のコール周期をuser_setting.hに設定します。
この例では、50ms周期です。

<pre class="nohighlight">
// Immediate definitions
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define THREAD_OSS_ECAL_PERIOD  50U     // Thread period time[ms]
② Device addressの設定

24xx256シリーズのA0、A1、A2 pinの端子レベルは、以下のコードのように user_setting.hに設定してください。
この例では、A0 pin=Low(b0=0), A1 pin=Low(b1=0), A2 pin=Low(b2=0)にした場合です。

// Device address Code bit2:A2, bit1:A1, bit0:A0
#define M24xx256              0b00000000
// I2C components address
#define I2C_ADR_24xx256       (( 0b00001010 << 3 ) | ( 0x07 & M24xx256 ))
③ 送受信バッファ数の設定

送受信バッファ数は、以下のコードのように user_setting.hに設定してください。24xx256シリーズの送受信バッファ数は最大64Byteです。
この例では、送信バッファ数64Byte、受信バッファ数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
④ Write protectのMCU pinの設定

24xx256シリーズのWrite protect pinと接続しているMCU GPIO pinは、以下のコードのように user_setting.hに設定してください。
この例では、Write protect pinをBOARD_INITPINS_M24xx256_WP_PORTBOARD_INITPINS_M24xx256_WP_PINに接続した場合です。

// OSS-ECAL GPIO hard wiring
#define CMP_GPIO_NUM       1U      // OSS-ECAL GPIO components number
#define GPIO_24xx256_WP  BOARD_INITPINS_M24xx256_WP_PORT
#define PIN_24xx256_WP   BOARD_INITPINS_M24xx256_WP_PIN
⑤ I2C通信の設定

24xx256シリーズと通信するI2Cは、以下のコードのように user_setting.hに設定してください。
この例では、I2C通信 LPI2C1_PERIPHERALに接続し、ボーレート400kHzに設定した場合です。また、I2C通信を行うOSS-ECALを用いたコンポーネントは1つとしています。

// 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通信リトライ数の設定

I2C通信リトライ数は、以下のコードのように user_setting.hに設定してください。
この例では、I2C通信エラーが発生した場合、3回リトライする設定にした場合です。

// I2C settings
#define I2C_RETRY               3U      // Retry times
⑦ Device addressおよびI2Cのテーブル登録

②で設定したDevice addressと⑤で設定したI2Cは、以下のコードのように user_setting.cに設定してください。

// HAL I2C object table for components
const stI2C_MCUX_OBJ tblI2C[ CMP_I2C_NUM ] =
{
        { e24xx256, I2C_ADR_24xx256, I2C_24xx256 }
};
⑧ Write protectのMCU pinのテーブル設定

④で設定したWrite-protect のGPIOは、以下のコードのように user_setting.cに設定してください。

// HAL GPIO object table for components
const stGPIO_MCUX_OBJ tblGPIO[ CMP_GPIO_NUM ] =
{
        { e24xx256, GPIO_24xx256_WP, PIN_24xx256_WP }
};
3. sample.cを参考に製品プログラムにコマンドAPI関数追加

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

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

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

5. その他の組込み方法

OSS-ECAL組み込む方法(複数同じ電子部品)

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

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

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

注意事項

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

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