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 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名称 | 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 |
開発環境
開発時の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ファイルの入手
- user_setting.hおよびuser_setting.cにMCUや製品プログラム情報を設定
- sample.cを参考に製品プログラムのアプリケーションにコマンドAPI関数追加
- 製品プログラムの開発環境に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利用条件を遵守してご利用ください。また、電子製品の検証は組込み製品メーカー様の責任で行ってください。