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」で接続します。