120 lines
3.7 KiB
C
120 lines
3.7 KiB
C
// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
#include <stdio.h>
|
|
#include "unity.h"
|
|
#include "unity_config.h"
|
|
#include "spi_bus.h"
|
|
#include "esp_system.h"
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
|
|
#define SPI_SCK_IO 18
|
|
#define SPI_MOSI_IO 23
|
|
#define SPI_MISO_IO 19
|
|
|
|
void spi_bus_init_deinit_test()
|
|
{
|
|
spi_bus_handle_t bus_handle = NULL;
|
|
spi_config_t bus_conf = {
|
|
.miso_io_num = SPI_MISO_IO,
|
|
.mosi_io_num = SPI_MOSI_IO,
|
|
.sclk_io_num = SPI_SCK_IO,
|
|
};
|
|
bus_handle = spi_bus_create(SPI2_HOST, &bus_conf);
|
|
TEST_ASSERT(bus_handle != NULL);
|
|
TEST_ASSERT(ESP_OK == spi_bus_delete(&bus_handle));
|
|
TEST_ASSERT(bus_handle == NULL);
|
|
bus_handle = spi_bus_create(SPI3_HOST, &bus_conf);
|
|
TEST_ASSERT(bus_handle != NULL);
|
|
TEST_ASSERT(ESP_OK == spi_bus_delete(&bus_handle));
|
|
TEST_ASSERT(bus_handle == NULL);
|
|
}
|
|
|
|
/* connect mosi with miso for transfer test */
|
|
void spi_bus_transfer_test()
|
|
{
|
|
spi_bus_handle_t bus_handle = NULL;
|
|
spi_config_t bus_conf = {
|
|
.miso_io_num = SPI_MISO_IO,
|
|
.mosi_io_num = SPI_MOSI_IO,
|
|
.sclk_io_num = SPI_SCK_IO,
|
|
};
|
|
|
|
spi_device_config_t device_conf = {
|
|
.cs_io_num = NULL_SPI_CS_PIN,
|
|
.mode = 0,
|
|
.clock_speed_hz = 20 * 1000 * 1000,
|
|
};
|
|
|
|
bus_handle = spi_bus_create(SPI2_HOST, &bus_conf);
|
|
TEST_ASSERT(bus_handle != NULL);
|
|
spi_bus_device_handle_t device_handle = NULL;
|
|
device_handle = spi_bus_device_create(bus_handle, &device_conf);
|
|
TEST_ASSERT(device_handle != NULL);
|
|
|
|
printf("************byte transfer test***************\n");
|
|
for (uint8_t i = 0; i < 200; i++) {
|
|
uint8_t in = 0;
|
|
TEST_ASSERT(ESP_OK == spi_bus_transfer_byte(device_handle, i, &in));
|
|
TEST_ASSERT_EQUAL_UINT8(i, in);
|
|
printf("in=%u\n", in);
|
|
}
|
|
|
|
vTaskDelay(2);
|
|
printf("************bytes transfer test***************\n");
|
|
uint8_t data[200] = {0};
|
|
uint8_t data_in[200] = {0};
|
|
for (uint8_t i = 0; i < 200; i++) {
|
|
data[i] = i;
|
|
}
|
|
TEST_ASSERT(ESP_OK == spi_bus_transfer_bytes(device_handle, data, data_in, 200));
|
|
for (uint8_t i = 0; i < 200; i++) {
|
|
printf("%u ", data_in[i]);
|
|
}
|
|
printf("\n");
|
|
|
|
vTaskDelay(2);
|
|
printf("************reg16 transfer test***************\n");
|
|
for (uint16_t i = (0xffff - 200); i < 0xffff; i++) {
|
|
uint16_t in = 0;
|
|
TEST_ASSERT(ESP_OK == spi_bus_transfer_reg16(device_handle, i, &in));
|
|
TEST_ASSERT_EQUAL_UINT16(i, in);
|
|
printf("in=%u\n", in);
|
|
}
|
|
|
|
vTaskDelay(2);
|
|
printf("************reg32 transfer test***************\n");
|
|
for (uint32_t i = (0xffffffff - 200); i < 0xffffffff; i++) {
|
|
uint32_t in = 0;
|
|
TEST_ASSERT(ESP_OK == spi_bus_transfer_reg32(device_handle, i, &in));
|
|
TEST_ASSERT_EQUAL_UINT32(i, in);
|
|
printf("in=%x\n", in);
|
|
}
|
|
|
|
TEST_ASSERT(ESP_OK == spi_bus_device_delete(&device_handle));
|
|
TEST_ASSERT(device_handle == NULL);
|
|
TEST_ASSERT(ESP_OK == spi_bus_delete(&bus_handle));
|
|
TEST_ASSERT(bus_handle == NULL);
|
|
}
|
|
|
|
TEST_CASE("spi bus init-deinit test", "[bus]spi_bus]")
|
|
{
|
|
spi_bus_init_deinit_test();
|
|
}
|
|
|
|
TEST_CASE("spi bus transfer test", "[bus][spi_bus]")
|
|
{
|
|
spi_bus_transfer_test();
|
|
}
|