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

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 }
};
OSS-ECAL Japanese
error: コンテンツは保護されている