spi_master: enable 2 tests in CI

The test is previously disabled for the requirement of external
connection. Now the signals are connected by internal connections.
Also change the failure logic of the test.
This commit is contained in:
Michael (XIAO Xufeng) 2018-07-23 18:47:57 +08:00
parent fb15f970d2
commit 0aa52057ed

View file

@ -119,7 +119,7 @@ TEST_CASE("SPI Master clockdiv calculation routines", "[spi]")
static spi_device_handle_t setup_spi_bus(int clkspeed, bool dma) { static spi_device_handle_t setup_spi_bus(int clkspeed, bool dma) {
spi_bus_config_t buscfg={ spi_bus_config_t buscfg={
.mosi_io_num=4, .mosi_io_num=26,
.miso_io_num=26, .miso_io_num=26,
.sclk_io_num=25, .sclk_io_num=25,
.quadwp_io_num=-1, .quadwp_io_num=-1,
@ -138,22 +138,24 @@ static spi_device_handle_t setup_spi_bus(int clkspeed, bool dma) {
}; };
esp_err_t ret; esp_err_t ret;
spi_device_handle_t handle; spi_device_handle_t handle;
printf("THIS TEST NEEDS A JUMPER BETWEEN IO4 AND IO26\n");
ret=spi_bus_initialize(HSPI_HOST, &buscfg, dma?1:0); ret=spi_bus_initialize(HSPI_HOST, &buscfg, dma?1:0);
TEST_ASSERT(ret==ESP_OK); TEST_ASSERT(ret==ESP_OK);
ret=spi_bus_add_device(HSPI_HOST, &devcfg, &handle); ret=spi_bus_add_device(HSPI_HOST, &devcfg, &handle);
TEST_ASSERT(ret==ESP_OK); TEST_ASSERT(ret==ESP_OK);
//connect MOSI to two devices breaks the output, fix it.
gpio_output_sel(26, FUNC_GPIO, HSPID_OUT_IDX);
printf("Bus/dev inited.\n"); printf("Bus/dev inited.\n");
return handle; return handle;
} }
static void spi_test(spi_device_handle_t handle, int num_bytes) { static int spi_test(spi_device_handle_t handle, int num_bytes) {
esp_err_t ret; esp_err_t ret;
int x; int x;
bool success = true;
srand(num_bytes); srand(num_bytes);
char *sendbuf=heap_caps_malloc(num_bytes, MALLOC_CAP_DMA); char *sendbuf=heap_caps_malloc((num_bytes+3)&(~3), MALLOC_CAP_DMA);
char *recvbuf=heap_caps_malloc(num_bytes, MALLOC_CAP_DMA); char *recvbuf=heap_caps_malloc((num_bytes+3)&(~3), MALLOC_CAP_DMA);
for (x=0; x<num_bytes; x++) { for (x=0; x<num_bytes; x++) {
sendbuf[x]=rand()&0xff; sendbuf[x]=rand()&0xff;
recvbuf[x]=0x55; recvbuf[x]=0x55;
@ -182,6 +184,7 @@ static void spi_test(spi_device_handle_t handle, int num_bytes) {
if (x!=num_bytes) { if (x!=num_bytes) {
int from=x-16; int from=x-16;
if (from<0) from=0; if (from<0) from=0;
success = false;
printf("Error at %d! Sent vs recved: (starting from %d)\n" , x, from); printf("Error at %d! Sent vs recved: (starting from %d)\n" , x, from);
for (int i=0; i<32; i++) { for (int i=0; i<32; i++) {
if (i+from<num_bytes) printf("%02X ", sendbuf[from+i]); if (i+from<num_bytes) printf("%02X ", sendbuf[from+i]);
@ -191,13 +194,12 @@ static void spi_test(spi_device_handle_t handle, int num_bytes) {
if (i+from<num_bytes) printf("%02X ", recvbuf[from+i]); if (i+from<num_bytes) printf("%02X ", recvbuf[from+i]);
} }
printf("\n"); printf("\n");
// TEST_ASSERT(0);
} }
printf("Success!\n"); if (success) printf("Success!\n");
free(sendbuf); free(sendbuf);
free(recvbuf); free(recvbuf);
return success;
} }
static void destroy_spi_bus(spi_device_handle_t handle) { static void destroy_spi_bus(spi_device_handle_t handle) {
@ -211,26 +213,27 @@ static void destroy_spi_bus(spi_device_handle_t handle) {
#define TEST_LEN 111 #define TEST_LEN 111
TEST_CASE("SPI Master test", "[spi][ignore]") TEST_CASE("SPI Master test", "[spi]")
{ {
bool success = true;
printf("Testing bus at 80KHz\n"); printf("Testing bus at 80KHz\n");
spi_device_handle_t handle=setup_spi_bus(80000, true); spi_device_handle_t handle=setup_spi_bus(80000, true);
spi_test(handle, 16); //small success &= spi_test(handle, 16); //small
spi_test(handle, 21); //small, unaligned success &= spi_test(handle, 21); //small, unaligned
spi_test(handle, 36); //aligned success &= spi_test(handle, 36); //aligned
spi_test(handle, 128); //aligned success &= spi_test(handle, 128); //aligned
spi_test(handle, 129); //unaligned success &= spi_test(handle, 129); //unaligned
spi_test(handle, 4096-2); //multiple descs, edge case 1 success &= spi_test(handle, 4096-2); //multiple descs, edge case 1
spi_test(handle, 4096-1); //multiple descs, edge case 2 success &= spi_test(handle, 4096-1); //multiple descs, edge case 2
spi_test(handle, 4096*3); //multiple descs success &= spi_test(handle, 4096*3); //multiple descs
destroy_spi_bus(handle); destroy_spi_bus(handle);
printf("Testing bus at 80KHz, non-DMA\n"); printf("Testing bus at 80KHz, non-DMA\n");
handle=setup_spi_bus(80000, false); handle=setup_spi_bus(80000, false);
spi_test(handle, 4); //aligned success &= spi_test(handle, 4); //aligned
spi_test(handle, 16); //small success &= spi_test(handle, 16); //small
spi_test(handle, 21); //small, unaligned success &= spi_test(handle, 21); //small, unaligned
destroy_spi_bus(handle); destroy_spi_bus(handle);
@ -238,21 +241,23 @@ TEST_CASE("SPI Master test", "[spi][ignore]")
printf("Testing bus at 26MHz\n"); printf("Testing bus at 26MHz\n");
handle=setup_spi_bus(20000000, true); handle=setup_spi_bus(20000000, true);
spi_test(handle, 128); //DMA, aligned success &= spi_test(handle, 128); //DMA, aligned
spi_test(handle, 4096*3); //DMA, multiple descs success &= spi_test(handle, 4096*3); //DMA, multiple descs
destroy_spi_bus(handle); destroy_spi_bus(handle);
printf("Testing bus at 900KHz\n"); printf("Testing bus at 900KHz\n");
handle=setup_spi_bus(9000000, true); handle=setup_spi_bus(9000000, true);
spi_test(handle, 128); //DMA, aligned success &= spi_test(handle, 128); //DMA, aligned
spi_test(handle, 4096*3); //DMA, multiple descs success &= spi_test(handle, 4096*3); //DMA, multiple descs
destroy_spi_bus(handle); destroy_spi_bus(handle);
TEST_ASSERT(success);
} }
TEST_CASE("SPI Master test, interaction of multiple devs", "[spi][ignore]") { TEST_CASE("SPI Master test, interaction of multiple devs", "[spi]") {
esp_err_t ret; esp_err_t ret;
bool success = true;
spi_device_interface_config_t devcfg={ spi_device_interface_config_t devcfg={
.command_bits=0, .command_bits=0,
.address_bits=0, .address_bits=0,
@ -268,28 +273,29 @@ TEST_CASE("SPI Master test, interaction of multiple devs", "[spi][ignore]") {
spi_bus_add_device(HSPI_HOST, &devcfg, &handle2); spi_bus_add_device(HSPI_HOST, &devcfg, &handle2);
printf("Sending to dev 1\n"); printf("Sending to dev 1\n");
spi_test(handle1, 7); success &= spi_test(handle1, 7);
printf("Sending to dev 1\n"); printf("Sending to dev 1\n");
spi_test(handle1, 15); success &= spi_test(handle1, 15);
printf("Sending to dev 2\n"); printf("Sending to dev 2\n");
spi_test(handle2, 15); success &= spi_test(handle2, 15);
printf("Sending to dev 1\n"); printf("Sending to dev 1\n");
spi_test(handle1, 32); success &= spi_test(handle1, 32);
printf("Sending to dev 2\n"); printf("Sending to dev 2\n");
spi_test(handle2, 32); success &= spi_test(handle2, 32);
printf("Sending to dev 1\n"); printf("Sending to dev 1\n");
spi_test(handle1, 63); success &= spi_test(handle1, 63);
printf("Sending to dev 2\n"); printf("Sending to dev 2\n");
spi_test(handle2, 63); success &= spi_test(handle2, 63);
printf("Sending to dev 1\n"); printf("Sending to dev 1\n");
spi_test(handle1, 5000); success &= spi_test(handle1, 5000);
printf("Sending to dev 2\n"); printf("Sending to dev 2\n");
spi_test(handle2, 5000); success &= spi_test(handle2, 5000);
ret=spi_bus_remove_device(handle2); ret=spi_bus_remove_device(handle2);
TEST_ASSERT(ret==ESP_OK); TEST_ASSERT(ret==ESP_OK);
destroy_spi_bus(handle1); destroy_spi_bus(handle1);
TEST_ASSERT(success);
} }
TEST_CASE("spi bus setting with different pin configs", "[spi]") TEST_CASE("spi bus setting with different pin configs", "[spi]")