MCU(NXP i.MX RT1050)にEPROM 24xx256シリーズを3つ接続した例をもとにOSS-ECALの組み込む方法について説明します。青文字のコード部をMCUや製品プログラムに合わせてください。
下図のMCU設定は、NXP MCUXpresso SDKにて設定したラベル名や回路設定です。
コマンドAPI関数の周期の設定
コマンドAPI関数のコール周期をuser_setting.hに設定します。
この例では、50ms周期です。
// Immediate definitions
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define THREAD_OSS_ECAL_PERIOD 50U // Thread period time[ms]
Device addressの設定
24xx256シリーズのA0、A1、A2 pinの端子レベルは、以下のコードのように user_setting.hに設定してください。
この例では、次の通りです。
M24xx256_0 A0 = Low(b0=0), A1 = Low(b1=0), A2 = Low(b2=0)
M24xx256_1 A0 = Low(b0=1), A1 = Low(b1=0), A2 = Low(b2=0)
M24xx256_2 A0 = Low(b0=0), A1 = Low(b1=2), A2 = Low(b2=0)
// Device address Code bit2:A2, bit1:A1, bit0:A0
#define M24xx256_0 0b00000000
#define M24xx256_1 0b00000001
#define M24xx256_2 0b00000010
// I2C components address
#define I2C_ADR_24xx256_0 (( 0b00001010 << 3 ) | ( 0x07 & M24xx256_0 ))
#define I2C_ADR_24xx256_1 (( 0b00001010 << 3 ) | ( 0x07 & M24xx256_1 ))
#define I2C_ADR_24xx256_2 (( 0b00001010 << 3 ) | ( 0x07 & M24xx256_2 ))
送受信バッファ数の設定
送受信バッファ数は、以下のコードのように 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に設定してください。
この例では、次の通りです。
24xx256_0: BOARD_INITPINS_M24xx256_0_WP_PORT, BOARD_INITPINS_M24xx256_0_WP_PIN
24xx256_1: BOARD_INITPINS_M24xx256_1_WP_PORT, BOARD_INITPINS_M24xx256_1_WP_PIN
24xx256_2: BOARD_INITPINS_M24xx256_2_WP_PORT, BOARD_INITPINS_M24xx256_2_WP_PIN
// OSS-ECAL GPIO hard wiring
#define CMP_GPIO_NUM 3U // OSS-ECAL GPIO components number
#define GPIO_24xx256_0_WP BOARD_INITPINS_M24xx256_0_WP_PORT
#define PIN_24xx256_0_WP BOARD_INITPINS_M24xx256_0_WP_PIN
#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
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
Component number codeの追加
Components number codeは、以下のコードのようにoss_ecal.hに追加してください。Components number codeは、コマンドAPI関数の引数IN etCMP cmp に使用し、24xx256の指定に用います。
この例では、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_0 = 49900U, // Microchip Technology 24AA256, 24LC256, 24FC256
e24xx256_1 = 49901U, // Microchip Technology 24AA256, 24LC256, 24FC256
e24xx256_2 = 49902U, // Microchip Technology 24AA256, 24LC256, 24FC256
// Non component number
eNON_CMP = 49999U // Non component number
}etCMP;
Device addressおよびI2Cのテーブル登録
2項で設定したDevice addressと5項で設定したI2C、7項で設定したComponent number codeは、以下のコードのように user_setting.cに設定してください。
// HAL I2C object table for components
const stI2C_MCUX_OBJ tblI2C[ CMP_I2C_NUM ] =
{
{ e24xx256_0, I2C_ADR_24xx256_0, I2C_24xx256 },
{ e24xx256_1, I2C_ADR_24xx256_1, I2C_24xx256 },
{ e24xx256_2, I2C_ADR_24xx256_2, I2C_24xx256 }
};
Write protectのMCU pinのテーブル設定
4項で設定したWrite protect のGPIOと7項で設定したComponent number codeは、以下のコードのように user_setting.cに設定してください。
// HAL GPIO object table for components
const stGPIO_MCUX_OBJ tblGPIO[ CMP_GPIO_NUM ] =
{
{ e24xx256_0, GPIO_24xx256_0_WP, PIN_24xx256_0_WP },
{ e24xx256_1, GPIO_24xx256_1_WP, PIN_24xx256_1_WP },
{ e24xx256_2, GPIO_24xx256_2_WP, PIN_24xx256_2_WP }
};