0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

AWR1642: 在現(xiàn)有mmWave SDK demo中增加I2C驅(qū)動支持

星星科技指導(dǎo)員 ? 來源:TI ? 作者:Wesley He ? 2023-03-31 10:29 ? 次閱讀

在一些特殊的使用場合,有需要使用AWR1642對PMIC的輸出電壓進(jìn)行調(diào)節(jié),或是讀取PMIC 內(nèi)部的工作狀態(tài),此時需要I2C接口對PMIC進(jìn)行讀寫操作,本文介紹了在現(xiàn)有的mmWave SDK demo中集成I2C接口驅(qū)動所需的步驟及操作。

本文的測試環(huán)境如下:

測試軟件版本:mmWave SDK 2.0.0.4

測試硬件:AWR1642BOOST EVM

1. 在mmWave SDK demo中增加I2C驅(qū)動代碼

第一步是添加代碼以包含和初始化I2C驅(qū)動程序。從I2C接口發(fā)送和接收均需要此驅(qū)動程序的支持,以下是在mss_main.c中添加的初始化I2C驅(qū)動程序的C代碼。此測試代碼可以復(fù)制到現(xiàn)有工程中。I2C驅(qū)動操作步驟為:GPIO初始化,I2C驅(qū)動初始化,配置I2C改寫PMIC(LP87524B)寄存器以實現(xiàn)PMIC輸出電壓調(diào)節(jié)。

注意LP87524B寄存器信息來源于其datasheet:LP87524B/J-Q1具有集成開關(guān)的具有集成開關(guān)的 4-A + 2.5-A + 兩個 1.5-A 降壓穩(wěn)壓器 數(shù)據(jù)表 (Rev. A),I2C驅(qū)動參考代碼如下:

#include

static int32_t I2C_GPIOInit(void)

{

#if (defined(SOC_XWR14XX))

/* Setup the PINMUX to bring out the XWR14xx I2C pins */

Pinmux_Set_OverrideCtrl(SOC_XWR14XX_PINR3_PADAH, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR14XX_PINR3_PADAH, SOC_XWR14XX_PINR3_PADAH_I2C_SDA);

Pinmux_Set_OverrideCtrl(SOC_XWR14XX_PINP4_PADAI, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR14XX_PINP4_PADAI, SOC_XWR14XX_PINP4_PADAI_I2C_SCL);

#else

/* Setup the PINMUX to bring out the XWR16xx I2C pins */

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINF13_PADAH, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PINF13_PADAH, SOC_XWR16XX_PINF13_PADAH_I2C_SDA);

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PING14_PADAI, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PING14_PADAI, SOC_XWR16XX_PING14_PADAI_I2C_SCL);

#endif

return 0;

}

static int32_t I2C_Communication_Test()

{

bool retVal = false;

int32_t errCode = 0;

uint32_t arg;

uint8_t rxData[16];

uint8_t txData[16];

I2C_Transaction i2cTransaction;

I2C_Handle i2cHandle;

I2C_Params i2cParams;

/* Reset the transmit and receive buffer */

memset(&rxData, 0, sizeof (rxData));

/* Initializa the I2C driver */

I2C_init();

/* Initialize the I2C driver default parameters */

I2C_Params_init(&i2cParams);

i2cParams.transferMode = I2C_MODE_BLOCKING;

i2cParams.bitRate = I2C_100kHz;

/* Open the I2C driver */

i2cHandle = I2C_open(0, &i2cParams);

if (i2cHandle == NULL)

{

System_printf ("Error: I2C Driver Open failedn");

return -1;

}

/* Configure the I2C device in I2C_CMD_ADDR_MODE mode */

arg = 0;//arg set to 0, and the I2C addr mode is 7-bit.

errCode = I2C_control (i2cHandle, I2C_CMD_ADDR_MODE, (void* )&arg);

if (errCode < 0)

{

System_printf ("Error: I2C control Set I2C_CMD_ADDR_MODE failed [Error code %d]n", errCode);

return -1;

}

//read the LP87524B buck3 output voltage register

txData[0] = 0x10;

i2cTransaction.slaveAddress = 0x60;//LP87524B/J-Q1 Device Address = 0x60

i2cTransaction.writeBuf = txData;

i2cTransaction.writeCount = 1;

i2cTransaction.readBuf = rxData;

i2cTransaction.readCount = 1;

retVal = I2C_transfer(i2cHandle, &i2cTransaction);

if (retVal == false)

{

System_printf ("Error: I2C Transfer failedn");

return -1;

}

System_printf("I2C_READ: addr=0x%x, Val=0x%xn",txData[0],rxData[0]);

//write the LP87524B buck3 output voltage = 2.0V

txData[0] = 0x10;

txData[1] = 0xbb;//default=0xca,2.3V,0xb1=1.8V, 0xbb=2.0V

i2cTransaction.slaveAddress = 0x60;//LP87524B/J-Q1 Device Address = 0x60

i2cTransaction.writeBuf = txData;

i2cTransaction.writeCount = 2;

i2cTransaction.readBuf = rxData;

i2cTransaction.readCount = 0;

retVal = I2C_transfer(i2cHandle, &i2cTransaction);

if (retVal == false)

{

System_printf ("Error: I2C Transfer failedn");

return -1;

}

System_printf("I2C_Write: LP87524B buck3 = 2.0V Donen");

//read the LP87524B buck3 output voltage register

txData[0] = 0x10;

i2cTransaction.slaveAddress = 0x60;//LP87524B/J-Q1 Device Address = 0x60

i2cTransaction.writeBuf = txData;

i2cTransaction.writeCount = 1;

i2cTransaction.readBuf = rxData;

i2cTransaction.readCount = 1;

retVal = I2C_transfer(i2cHandle, &i2cTransaction);

if (retVal == false)

{

System_printf ("Error: I2C Transfer failedn");

return -1;

}

System_printf("I2C_READ: addr=0x%x, Val=0x%xrn",txData[0],rxData[0]);

//write the LP87524B buck2 output voltage = 1.5V

txData[0] = 0x0e;

txData[1] = 0Xa2;//default=0xb1,1.8V, 0x4d=1V 0xa2=1.5V

i2cTransaction.slaveAddress = 0x60;//LP87524B/J-Q1 Device Address = 0x60

i2cTransaction.writeBuf = txData;

i2cTransaction.writeCount = 2;

i2cTransaction.readBuf = rxData;

i2cTransaction.readCount = 0;

retVal = I2C_transfer(i2cHandle, &i2cTransaction);

if (retVal == false)

{

System_printf ("Error: I2C Transfer failedn");

return -1;

}

System_printf("I2C_Write: LP87524B buck2 = 1.5V Donen");

if (retVal == false)

{

System_printf ("Error: I2C combined Transfer to Slave failedn");

return -1;

}

/* Close I2C driver */

I2C_close(i2cHandle);

return 0;

}

//Call these function in void MmwDemo_mssInitTask(UArg arg0, UArg arg1)

errCode = I2C_GPIOInit();

if (errCode == -1)

System_printf("I2C_GPIOInit Errorrn");

errCode = I2C_Communication_Test();

if (errCode == -1)

System_printf("I2C_Communication_Test Errorn");

else

System_printf("I2C_Communication_Test Donen");

2. 將工程鏈接到I2C驅(qū)動庫

最后一步是通過鏈接I2C驅(qū)動程序來構(gòu)建可執(zhí)行文件。 如果使用CCS項目,可以將I2C驅(qū)動程序添加到項目的鏈接器屬性中,如圖1所示。

poYBAGQmRXaAfRjtAADCaMnHFx0160.png

圖1. CCS Project Linker Properties

如果使用makefile編譯工程,執(zhí)行相同的程序。

###################################################################################

# Additional libraries which are required to build the DEMO:

###################################################################################

MSS_MMW_DEMO_STD_LIBS = $(R4F_COMMON_STD_LIB)

-llibpinmux_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

-llibdma_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

-llibcrc_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

-llibuart_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

-llibgpio_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

-llibmailbox_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

-llibmmwavelink_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

-llibmmwave_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

-llibcli_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

-llibi2c_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

MSS_MMW_DEMO_LOC_LIBS = $(R4F_COMMON_LOC_LIB)

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/pinmux/lib

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/uart/lib

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/dma/lib

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/crc/lib

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/gpio/lib

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/mailbox/lib

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/control/mmwavelink/lib

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/control/mmwave/lib

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/utils/cli/lib

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/utils/i2c/lib

3. 運行測試?yán)?/strong>

運行測試程序后,CCS控制臺輸出打印信息如下,使用萬用表測量LP87524輸出電壓即為設(shè)置的電壓,I2C驅(qū)動添加成功。

**********************************************

Debug: Launching the Millimeter Wave Demo

**********************************************

I2C_READ: addr=0x10, Val=0xca

I2C_Write: LP87524B buck3 = 2.0V Done

I2C_READ: addr=0x10, Val=0xbb

I2C_Write: LP87524B buck2 = 1.5V Done

I2C_Communication_Test Done

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • PMIC
    +關(guān)注

    關(guān)注

    15

    文章

    293

    瀏覽量

    109340
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1469

    瀏覽量

    122836
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1184

    瀏覽量

    51758
收藏 人收藏

    評論

    相關(guān)推薦

    請問毫米波雷達(dá)AWR1642 CAN功能如何使用?

    按著sdk的教程使用AWR1642的CAN模塊,但沒有實現(xiàn)CAN數(shù)據(jù)的發(fā)送和接收,求教CAN功能的使用方法
    發(fā)表于 08-19 07:31

    AWR1642單芯片mmWave傳感器與集成DSP車輛乘員檢測參考設(shè)計

    描述This reference design demonstrates the use of the AWR1642 single-chip mmWave sensor
    發(fā)表于 10-17 15:54

    IWR1642/AWR1642毫米波傳感器的GPADC功能介紹與功能實現(xiàn)

    進(jìn)行監(jiān)控。IWR1642/AWR1642上的ADC采樣率為625Ksps,精度為10-bit,提供給用戶6個ADC管腳進(jìn)行測量。其中5個ADC支持緩沖模式和非緩沖模式,一個ADC僅支持
    發(fā)表于 03-04 06:45

    IWR1642/AWR1642上修改代碼改變L3 RAM分布

    本文以AWR1642為例,介紹了AWR1642 ES2.0 EVM上基于mmWave SDK 2.1的mmw
    發(fā)表于 03-12 06:45

    TI AWR1642 學(xué)習(xí)筆記4之串口數(shù)據(jù)流解析 精選資料分享

    )、mmw Demo Data Structure v0.1.pdf(這個我的資源有上傳https://download.csdn.net/download/hali52013/12819379)、SDK
    發(fā)表于 07-27 07:59

    mmWave SDK demo中集成I2C接口驅(qū)動所需的步驟及操作

    介紹了現(xiàn)有mmWave SDK demo中集成I2C接口
    發(fā)表于 11-10 07:55

    如何在IWR1642/AWR1642上修改L3 RAM的分布?

    本文以AWR1642為例,介紹了AWR1642 ES2.0 EVM上基于mmWave SDK 2.1的mmw
    發(fā)表于 11-10 08:06

    實現(xiàn)IWR1642/AWR1642 GPADC的功能

    GPADC功能介紹 IWR1642/AWR1642的毫米波傳感器芯片上集成了通用ADC(GPADC)的功能。用戶可以利用GPADC對外部電壓,例如電源電壓進(jìn)行監(jiān)控。IWR1642/AWR164
    發(fā)表于 11-11 07:30

    德州儀器將開始量產(chǎn)其高度集成的超寬頻AWR1642和IWR1642毫米波傳感器

    據(jù)外媒報道,推出世界上最精確的毫米波(mmWave)單芯片互補金屬氧化物半導(dǎo)體(CMOS)傳感器一年后,美國德州儀器公司(TI)現(xiàn)在宣布將開始量產(chǎn)其高度集成的超寬頻AWR1642和IWR16
    發(fā)表于 06-04 17:30 ?1560次閱讀

    mmWave SDK demo中集成I2C接口驅(qū)動所需的步驟及操作

    的測試環(huán)境如下: 測試軟件版本:mmWave SDK 2.0.0.4 測試硬件:AWR1642BOOST EVM 1.????? m
    的頭像 發(fā)表于 01-14 10:07 ?1743次閱讀
    <b class='flag-5'>mmWave</b> <b class='flag-5'>SDK</b> <b class='flag-5'>demo</b>中集成<b class='flag-5'>I2C</b>接口<b class='flag-5'>驅(qū)動</b>所需的步驟及操作

    AWR1642: 現(xiàn)有mmWave SDK demo增加I2C驅(qū)動支持

    AWR1642: 現(xiàn)有mmWave SDK demo
    發(fā)表于 11-01 08:26 ?3次下載
    <b class='flag-5'>AWR1642</b>: <b class='flag-5'>在</b><b class='flag-5'>現(xiàn)有</b><b class='flag-5'>mmWave</b> <b class='flag-5'>SDK</b> <b class='flag-5'>demo</b><b class='flag-5'>中</b><b class='flag-5'>增加</b><b class='flag-5'>I2C</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>支持</b>

    IWR1642/AWR1642上修改L3 RAM的分布

    IWR1642/AWR1642上修改L3 RAM的分布
    發(fā)表于 11-01 08:26 ?2次下載
    <b class='flag-5'>在</b>IWR<b class='flag-5'>1642</b>/<b class='flag-5'>AWR1642</b>上修改L3 RAM的分布

    IWR1642/AWR1642 GPADC功能介紹與實現(xiàn)

    IWR1642/AWR1642 GPADC功能介紹與實現(xiàn)
    發(fā)表于 11-01 08:26 ?3次下載
    IWR<b class='flag-5'>1642</b>/<b class='flag-5'>AWR1642</b> GPADC功能介紹與實現(xiàn)

    IWR1642/AWR1642上修改L3 RAM的分布

      本文以AWR1642為例,介紹了AWR1642 ES2.0 EVM上基于mmWave SDK 2.1的mmw
    的頭像 發(fā)表于 04-03 09:24 ?1358次閱讀
    <b class='flag-5'>在</b>IWR<b class='flag-5'>1642</b>/<b class='flag-5'>AWR1642</b>上修改L3 RAM的分布

    IWR1642/AWR1642 GPADC功能介紹與實現(xiàn)

    ? IWR1642/AWR1642的毫米波傳感器芯片上集成了通用ADC(GPADC)的功能。用戶可以利用GPADC對外部電壓,例如電源電壓進(jìn)行監(jiān)控。IWR1642/AWR1642上的A
    的頭像 發(fā)表于 04-03 10:13 ?2352次閱讀