/**
 ****************************************************************************************
 * @brief Initializes spi and spi_flash drivers, discovers jedec id and releases from power down
 *
 * @param[in] cs_port:  Chip select port
 * @param[in] cs_pin:   Chip select pin
 * 
 * @return  Number of bytes actually written
 ****************************************************************************************
*/
int8_t spi_flash_enable(GPIO_PORT cs_port, GPIO_PIN cs_pin)
{
    int8_t detected_spi_flash_device_index;
    SPI_Pad_t cs_pad_param;
    
    cs_pad_param.pin = cs_pin;
    cs_pad_param.port = cs_port;
    
    spi_init(&cs_pad_param, SPI_MODE_8BIT, SPI_ROLE_MASTER, SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);
    
    spi_flash_release_from_power_down();
    
    detected_spi_flash_device_index = spi_flash_auto_detect();
    
    return detected_spi_flash_device_index;
}
Esempio n. 2
0
static void da14583_spi_flash_init(void)
{
    SPI_Pad_t cs_pad_param;

    // configure internal flash GPIOS
    GPIO_ConfigurePin( DA14583_SPI_FLASH_EN_GPIO_PORT,    DA14583_SPI_FLASH_EN_GPIO_PIN,    OUTPUT, PID_SPI_EN, true );
    GPIO_ConfigurePin( DA14583_SPI_FLASH_CLK_GPIO_PORT,   DA14583_SPI_FLASH_CLK_GPIO_PIN,   OUTPUT, PID_SPI_CLK, false );
    GPIO_ConfigurePin( DA14583_SPI_FLASH_DO_GPIO_PORT,    DA14583_SPI_FLASH_DO_GPIO_PIN,    OUTPUT, PID_SPI_DO, false );
    GPIO_ConfigurePin( DA14583_SPI_FLASH_DI_GPIO_PORT,    DA14583_SPI_FLASH_DI_GPIO_PIN,    INPUT,  PID_SPI_DI, false );

    cs_pad_param.port = DA14583_SPI_FLASH_EN_GPIO_PORT;
    cs_pad_param.pin = DA14583_SPI_FLASH_EN_GPIO_PIN;

    // Initialize SPI driver
    spi_init(&cs_pad_param, SPI_MODE_8BIT, SPI_ROLE_MASTER, SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);
    // Initialize SPI Flash driver
    spi_flash_init(DA14583_SPI_FLASH_SIZE, DA14583_SPI_FLASH_PAGE_SIZE);

    // Power up flash
    spi_flash_release_from_power_down();
}