OSS-ECAL(呼称:イーキャル)とは、電子部品抽象化レイヤのオープンソースソフトウェア(Open Source Software for Electronic Components Abstraction Layer)の略称です。
背景
電子部品用ソフトウェアは、電子部品の機能があらかじめ仕様が決まっているため、電子製品ごとに新規開発する必要がありません。また、電子部品用ソフトウェアは電子製品において競争優位性を生まない非競争領域であり、不要な開発コストとなっています。このため、組込み製品メーカー様から電子部品メーカー様に対し、電子部品用ソフトウェアの提供を求める声が増加しています。
目的
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 タグ名の接頭語 |
etCMP | OSS-ECAL共通コンポーネントコードの列挙型(enum)定義 |
etSTS | OSS-ECAL共通ステータスコードの列挙型(enum)定義 |
gv(接頭語) | グローバル変数のラベル名の接頭語 |
HAL | Hardware Abstraction Layer、AUTOSARではMCAL |
HALNAME | HALの仮称 HALNAMEはHALサポートを参照してください |
i | イミディエイト定数のラベル名の接頭語 |
o(接頭語) | コマンドAPI関数名の接頭語 |
OSS-ECAL | Open Source Software for Electronic Components Abstraction Layer |
st(接頭語) | 構造体の型struct タグ名の接頭語 |
sv(接頭語) | 静的変数のラベル名の接頭語 |
tbl(接頭語) | テーブル定数の接頭語 |
コンポーネント | 電子部品 |
SWコンポーネント | ソフトウェア・コンポーネント |
API
API関数の基本構成
APIは、次のように電子部品の型番とコマンドによるコマンドAPI関数です。
etSTS oABC_COMMAND( stABC_I, stABC_O* )
関数名 | oABC_COMMAND | ABC用コマンドのAPI関数の名称 |
戻り値の型 | etSTS | OSS-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を返します。
戻り値 | etSTS | OSS-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エラー |
引数 IN | etCMP 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名称 | Ver | HALNAME | Support |
---|---|---|---|---|---|
Arduino | Arduino IDE | Arduino | 1.8.6 | ARDUINO | X |
Arm | Keil MDK v6 | Mbed OS | 6.17.0 | MBED | X |
Debian | – | GNU/Linux | 10.3 | Linux | – |
Infineon | ModusToolbox | mtb-hal-cat1 | 2.4.3 | ModusToolbox | X |
NXP | MCUXpresso SDK | SDK_2.x_EVKB-IMXRT1050 | 2.16 | iMXRT1051B1052B | X |
STMicroelectronics | PlatformSDK_S32K1_2022_02 | AUTOSAR MCAL | 4.4 | MCAL | – |
Renesas | Synergy Software Package | HAL | 2.6.0 | SSP | – |
STMicroelectronics | STM32Cube | STM32CubeF4 | V1.28.1 | STM32F4 | X |
開発環境
OSS-ECAL開発時のMCUおよび開発環境は、次の通りです。
HAL Name | メーカ | 開発ボード | MCU | IDE |
---|---|---|---|---|
ARDUINO | Arduino | 1.Mega 2560 Rev3 2.Arduino Pro Mini 3.3V | ATmega2560 ATmega328P | Arduino IDE 2.3.3 |
MBED | STMicroelectronics | STM32 Nucleo-64 boards | STM32F401RETx | Arm Keil Studio Cloud |
Linux | BeagleBoard | BeagleBone Black | TI AM335x | – |
ModusToolbox | Infineon | CY8CPROTO-063-BLE PSoC 6 BLE Prototyping Kit | CYBLE-416045-02 | ModusToolbox |
iMXRT1051B1052B | NXP | IMXRT1050-EVKB | i.MX RT1050 | MCUXpresso IDE |
MCAL | STMicroelectronics | S32K144EVB-Q100 | S32K144 | S32 Design Studio for S32 Platform |
SSP | Renesas | S7G2 SK | R7FS7G27H3A01CFC | e² studio for Renesas Synergy |
STM32F4 | STMicroelectronics | STM32 Nucleo-64 boards | STM32F401RETx | STM32CubeIDE |
ファイル構成
OSS-ECALのファイル構成は、次の例をご参考にしてください。尚、HALによってファイル構成が異なりますので、各コンポーネントのOSS-ECALページでご確認ください。
例:24xx256 フォルダ構成
フォルダ | ファイル | 概要 |
---|---|---|
24xx256_IMXRT1050_010000/sample | sample.c | サンプル・アプリケーション・プログラム |
sample.h | サンプル・アプリケーション・ヘッダ | |
24xx256_IMXRT1050_010000 | oABC.c | 24xx256用OSS-ECALプログラム |
oABC.h | 24xx256用OSS-ECALヘッダ | |
oss_ecal.h | OSS-ECAL 共通ヘッダ | |
user_setting.c | ユーザ設定定数・テーブル | |
user_setting.h | ユーザ設定ヘッダ | |
readme.md | Readme | |
OSS-ECAL Terms of Use.txt | OSS-ECAL利用条件 |
組込み方法
製品プログラムにコマンドAPI関数を組み込むためには、次の手順で行ってください。
- OSS-ECALファイルの入手
- MCUや製品プログラム情報の設定
- 製品プログラムにコマンドAPI関数追加
- 製品プログラムの開発環境に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_PORTのBOARD_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(異なるMCU機能の電子部品)を組み込む方法
注意事項
OSS-ECAL利用条件を遵守してご利用ください。また、電子製品の検証は組込み製品メーカー様の責任で行ってください。