infineonのModusToolboxを使用し、「XENSIV™ BGT60TRxx Radar Sensor」に示す手順に従って、S2GO RADAR BGT60LTR11のテストを行います。
S2GO RADAR BGT60LTR11
S2GO RADAR BGT60LTR11は、60Ghz Radar センサーで、動作を検出できます。
- 3.3V電源
- 0.5m – 7mまでの距離で検出
- 検出するとLEDが点滅
- Infineon’s Shield2Go formatを備えた48.80 mm x 24.1 mmボード
Radar Development Kitのインストール
Infineon Developer Centerを使ってRadar Development Kitをインストールします。
- 「Infineon Developer Center Launcher」からInfineon Developer Centerをダウンロードしてインストールします。
- インストールしたInfineon Developer Centerの「Manage tools」タブから、 Radar Development Kitをインストールします。
- インストールしたRadar Development Kitを起動して、メニュー「Software」をクリックします。スクロールして「Tools」をダウンロードします。Tool「bgt60-configurator-cli」が取得できます。
- 次に示すjson形式の次のconfiguration file「presence_radar_settings.json」を作成します。
- 取得した「bgt60-configurator-cli を使って、configuration file「presence_radar_settings.json」からregister file「presence_radar_settings.h」を作成します。
presence_radar_settings.json
{
"device_config": {
"fmcw_single_shape": {
"rx_antennas": [1],
"tx_antennas": [1],
"tx_power_level": 31,
"if_gain_dB": 60,
"lower_frequency_Hz": 61020098000,
"upper_frequency_Hz": 61479902000,
"num_chirps_per_frame": 1,
"num_samples_per_chirp": 128,
"chirp_repetition_time_s": 7e-05,
"frame_repetition_time_s": 5e-3,
"sample_rate_Hz": 2330000
}
}
}
bgt60-configurator-cli -c presence_radar_settings.json -o presence_radar_settings.h
S2GO RADAR BGT60LTR11テストアプリの作成
次の手順でModusToolboxを使ってS2GO RADAR BGT60LTR11テストアプリ「BGT60LTR11_Test」を作成します。
- Quick PanelからNew Applicationを選択して、Project Creatorを起動します。
- Project Creator で「PSoC™ 6 BSPs 」より「PSoC 62S2-43012 」を選択し、「Next」ボタンをクリックします。
- 次のようにサンプルコード「Getting Started」から「Empty PSoC6 App」を選択して、Application Nameに「OLEDTest」を設定して 「Create」ボタンをクリックします。
- Quick PanelからLibrary Managerを選択して、表示されたダイアログの「Add Library」ボタンをクリックし、表示されたダイアログの「Peripheral」から「sensor-xensiv-bgt60trxx」をチェックして、「OK」ボタンをクリックします。
- 作成された「main.c」を次に示すコードに変更し、同じディレクトリに上記で作成した「presence_radar_settings.h」をコピーします。
main.c
#include <inttypes.h>
#include "cyhal.h"
#include "cybsp.h"
#include "cy_retarget_io.h"
#include "xensiv_bgt60trxx_mtb.h"
#define XENSIV_BGT60TRXX_CONF_IMPL
#include "presence_radar_settings.h"
/*******************************************************************************
* Macros
*******************************************************************************/
/* sensor SPI interface */
#define PIN_XENSIV_BGT60TRXX_SPI_SCLK CYBSP_SPI_CLK
#define PIN_XENSIV_BGT60TRXX_SPI_MOSI CYBSP_SPI_MOSI
#define PIN_XENSIV_BGT60TRXX_SPI_MISO CYBSP_SPI_MISO
#define PIN_XENSIV_BGT60TRXX_SPI_CSN CYBSP_SPI_CS
/* sensor interrupt output pin */
//******#define PIN_XENSIV_BGT60TRXX_IRQ CYBSP_GPIO10
#define PIN_XENSIV_BGT60TRXX_IRQ CYBSP_J2_10
/* sensor HW reset pin */
//******#define PIN_XENSIV_BGT60TRXX_RSTN CYBSP_GPIO11
#define PIN_XENSIV_BGT60TRXX_RSTN CYBSP_SPI_CS
/* enable 1V8 LDO on radar wingboard*/
//*****#define PIN_XENSIV_BGT60TRXX_LDO_EN CYBSP_GPIO5
#define PIN_XENSIV_BGT60TRXX_LDO_EN CYBSP_POT
#define XENSIV_BGT60TRXX_SPI_FREQUENCY (25000000UL)
#define NUM_SAMPLES_PER_FRAME (XENSIV_BGT60TRXX_CONF_NUM_RX_ANTENNAS *\
XENSIV_BGT60TRXX_CONF_NUM_CHIRPS_PER_FRAME *\
XENSIV_BGT60TRXX_CONF_NUM_SAMPLES_PER_CHIRP)
/*******************************************************************************
* Global variables
*******************************************************************************/
static cyhal_spi_t cyhal_spi;
static xensiv_bgt60trxx_mtb_t sensor;
static volatile bool data_available = false;
/* Allocate enough memory for the radar dara frame. */
static uint16_t samples[NUM_SAMPLES_PER_FRAME];
/* Interrupt handler to react on sensor indicating the availability of new data */
#if defined(CYHAL_API_VERSION) && (CYHAL_API_VERSION >= 2)
void xensiv_bgt60trxx_mtb_interrupt_handler(void *args, cyhal_gpio_event_t event)
#else
void xensiv_bgt60trxx_mtb_interrupt_handler(void *args, cyhal_gpio_irq_event_t event)
#endif
{
CY_UNUSED_PARAMETER(args);
CY_UNUSED_PARAMETER(event);
data_available = true;
}
int main(void)
{
cy_rslt_t result = CY_RSLT_SUCCESS;
/* Initialize the device and board peripherals. */
result = cybsp_init();
CY_ASSERT(result == CY_RSLT_SUCCESS);
__enable_irq();
/* Initialize retarget-io to use the debug UART port. */
result = cy_retarget_io_init(CYBSP_DEBUG_UART_TX, CYBSP_DEBUG_UART_RX, CY_RETARGET_IO_BAUDRATE);
CY_ASSERT(result == CY_RSLT_SUCCESS);
printf("XENSIV BGT60TRxx Example\r\n");
/* Initialize the SPI interface to BGT60. */
result = cyhal_spi_init(&cyhal_spi,
PIN_XENSIV_BGT60TRXX_SPI_MOSI,
PIN_XENSIV_BGT60TRXX_SPI_MISO,
PIN_XENSIV_BGT60TRXX_SPI_SCLK,
NC,
NULL,
8,
CYHAL_SPI_MODE_00_MSB,
false);
CY_ASSERT(result == CY_RSLT_SUCCESS);
/* Reduce drive strength to improve EMI */
Cy_GPIO_SetSlewRate(CYHAL_GET_PORTADDR(PIN_XENSIV_BGT60TRXX_SPI_MOSI),
CYHAL_GET_PIN(PIN_XENSIV_BGT60TRXX_SPI_MOSI), CY_GPIO_SLEW_FAST);
Cy_GPIO_SetDriveSel(CYHAL_GET_PORTADDR(PIN_XENSIV_BGT60TRXX_SPI_MOSI),
CYHAL_GET_PIN(PIN_XENSIV_BGT60TRXX_SPI_MOSI), CY_GPIO_DRIVE_1_8);
Cy_GPIO_SetSlewRate(CYHAL_GET_PORTADDR(PIN_XENSIV_BGT60TRXX_SPI_SCLK),
CYHAL_GET_PIN(PIN_XENSIV_BGT60TRXX_SPI_SCLK), CY_GPIO_SLEW_FAST);
Cy_GPIO_SetDriveSel(CYHAL_GET_PORTADDR(PIN_XENSIV_BGT60TRXX_SPI_SCLK),
CYHAL_GET_PIN(PIN_XENSIV_BGT60TRXX_SPI_SCLK), CY_GPIO_DRIVE_1_8);
/* Set SPI data rate to communicate with sensor */
result = cyhal_spi_set_frequency(&cyhal_spi, XENSIV_BGT60TRXX_SPI_FREQUENCY);
CY_ASSERT(result == CY_RSLT_SUCCESS);
/* Enable the LDO. */
result = cyhal_gpio_init(PIN_XENSIV_BGT60TRXX_LDO_EN,
CYHAL_GPIO_DIR_OUTPUT,
CYHAL_GPIO_DRIVE_STRONG,
true);
CY_ASSERT(result == CY_RSLT_SUCCESS);
/* Wait LDO stable */
(void)cyhal_system_delay_ms(5);
result = xensiv_bgt60trxx_mtb_init(&sensor,
&cyhal_spi,
PIN_XENSIV_BGT60TRXX_SPI_CSN,
PIN_XENSIV_BGT60TRXX_RSTN,
register_list,
XENSIV_BGT60TRXX_CONF_NUM_REGS);
CY_ASSERT(result == CY_RSLT_SUCCESS);
/* The sensor will generate an interrupt once the sensor FIFO level is
NUM_SAMPLES_PER_FRAME */
result = xensiv_bgt60trxx_mtb_interrupt_init(&sensor,
NUM_SAMPLES_PER_FRAME,
PIN_XENSIV_BGT60TRXX_IRQ,
CYHAL_ISR_PRIORITY_DEFAULT,
xensiv_bgt60trxx_mtb_interrupt_handler,
NULL);
CY_ASSERT(result == CY_RSLT_SUCCESS);
/* Enable sensor data test mode. The data received on antenna RX1 will be overwritten by
a deterministic sequence of data generated by the test pattern generator */
if (xensiv_bgt60trxx_enable_data_test_mode(&sensor.dev, true) != XENSIV_BGT60TRXX_STATUS_OK)
{
CY_ASSERT(0);
}
if (xensiv_bgt60trxx_start_frame(&sensor.dev, true) != XENSIV_BGT60TRXX_STATUS_OK)
{
CY_ASSERT(0);
}
uint32_t frame_idx = 0;
uint16_t test_word = XENSIV_BGT60TRXX_INITIAL_TEST_WORD;
for(;;)
{
/* Wait for the radar device to indicate the availability of the data to fetch. */
while (data_available == false);
data_available = false;
if (xensiv_bgt60trxx_get_fifo_data(&sensor.dev, samples,
NUM_SAMPLES_PER_FRAME) == XENSIV_BGT60TRXX_STATUS_OK)
{
/* Check received data */
for (int32_t sample_idx = 0; sample_idx < NUM_SAMPLES_PER_FRAME; ++sample_idx)
{
if (test_word != samples[sample_idx])
{
printf("Frame %" PRIu32 " error detected. "
"Expected: %" PRIu16 ". "
"Received: %" PRIu16 "\n",
frame_idx, test_word, samples[sample_idx]);
CY_ASSERT(0);
}
// Generate next test_word
test_word = xensiv_bgt60trxx_get_next_test_word(test_word);
}
}
printf("Frame %" PRIu32 " received correctly\n", frame_idx);
frame_idx++;
}
}
PSoC 62S2 Wi-Fi BTパイオニアキットとS2GO RADAR BGT60LTR11の接続
S2GO RADAR BGT60LTR11テストアプリの実行
次の手順で作成したS2GO RADAR BGT60LTR11テストアプリ「BGT60LTR11_Test」をビルドし、PSoC 62S2 Wi-Fi BTパイオニアキットで実行します。
- シリアル端末(Tera Term)を使って、PSoC 62S2 Wi-Fi BTパイオニアキットに接続したCOMポートに、転送速度「115200」で接続します。




