Logo Central

Module Wifi ATWINC1510

Etude du Module ATWINC1510.
Bibliothèque

Mise à jour du firmware du module ATWINC1500 sur circuit

Pour mettre à jour le firmware d’un module ATWINC1500 déjà soudé sur votre circuit, j’ai enfin trouvé une méthode efficace ! Voici les étapes à suivre :

Récupération du firmware

	
	Programme
	// Firmware 19.6.1 du module ATWINC1500
	/* Désactiver le module en mettant CHIP_EN à LOW */
	
	HAL_GPIO_WritePin(GPIOA, CONF_WINC_PIN_CHIP_ENABLE, GPIO_PIN_RESET);
	HAL_Delay(10);  // Attendre 10 ms

	// Tirer RESET_N à LOW puis à HIGH pour réinitialiser le module
	
	HAL_GPIO_WritePin(GPIOA, CONF_WINC_PIN_RESET, GPIO_PIN_RESET);
	HAL_Delay(100);  // Attendre 100 ms
	HAL_GPIO_WritePin(GPIOA, CONF_WINC_PIN_RESET, GPIO_PIN_SET);
	HAL_Delay(10);   // Attendre que le module redémarre

	// Réactiver le module en mettant CHIP_EN à HIGH
	
	HAL_GPIO_WritePin(GPIOA, CONF_WINC_PIN_CHIP_ENABLE, GPIO_PIN_SET);
	HAL_Delay(100);  // Attendre 100 ms	
	
	// Tirer la ligne WAKE à HIGH pour s'assurer que le module est réveillé
	HAL_GPIO_WritePin(GPIOA, CONF_WINC_PIN_WAKE, GPIO_PIN_SET);
	
	// Platform specific initializations.
	ret = m2m_wifi_download_mode();
	if(M2M_SUCCESS != ret) printf(« Unable to enter download mode\r\n »);
	}
	else uint32_t size = spi_flash_get_size();

	// Adapter la taille en fonction du firmware
	if (spi_flash_erase(0x000000, (359356UL + 1)) != M2M_SUCCESS) { 
		printf("Erreur lors de l'effacement de la mémoire flash.");
	} else {
    	printf("Effacement terminé.");
	}

	uint32_t writeAddress = 0x000000;  // Adresse de départ du firmware
	
	// Écrire les données dans la mémoire SPI
	if (spi_flash_write((uint8_t *) &firmware, writeAddress, (359356UL + 1)) != M2M_SUCCESS) {  

	// Correction : data passe en premier
    	printf("Erreur lors de l'écriture du firmware dans la mémoire SPI.");
	} else {
   		 printf("Écriture ok ");
}
	
	

Le firmware du module ATWINC est trop volumineux pour être stocké dans la RAM du processeur. C’est pourquoi il est placé dans la mémoire FLASH du STM32F722. Il existe une autre méthode de mise à jour du firmware, mais celle-ci nécessite une connexion Wi-Fi. Cette méthode est appelée OTA (Over-The-Air) dans la documentation.


Utilisation de la console SWV

Pour utiliser la bibliothèque ATWINC, il est préférable d'utiliser la console SWV, car de nombreuses fonctions font appel à la commande printf("message"). Cela implique de connecter la broche SWO à l'émulateur J-Link.

Il est également nécessaire d'initialiser le module SWO :

	
	void SWO_Init(void) {
    // Activer l'interface trace
	DBGMCU->CR |= DBGMCU_CR_TRACE_IOEN;  // Activer l'interface trace

    // 1. Activer l'horloge pour le GPIOB
	 __HAL_RCC_GPIOB_CLK_ENABLE();  // Activer l'horloge du port B

    /* USER CODE BEGIN SPI2_Init 0 */
    	GPIO_InitTypeDef GPIO_InitStruct = {0};
    	GPIO_InitStruct.Pin = GPIO_PIN_3;
    	GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    	GPIO_InitStruct.Pull = GPIO_NOPULL;
    	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    	GPIO_InitStruct.Alternate = GPIO_AF0_SWJ;
    	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);

    	/* Activer le module ITM et SWO */
    	uint32_t swo_freq = 1000000; // Fréquence SWO
    	uint32_t cpu_freq = HAL_RCC_GetHCLKFreq(); // Fréquence HCLK
    	uint32_t swo_prescaler = (cpu_freq / swo_freq) - 1;

    	CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // Activer le traceur
    	TPI->ACPR = swo_prescaler; // Configurer le prescaler SWO
    	TPI->SPPR = 0x00000002; // Activer la sortie Async SWO
    	TPI->FFCR = 0x00000100; // Activer l'output de trace ITM
    	ITM->LAR = 0xC5ACCE55; // Déverrouiller l'accès au registre ITM
    	ITM->TCR = 0x0001000D; // Activer ITM
    	ITM->TER |= 1; // Activer la trace du port 0
}
	

Bibliothèque

Bibliothèque

1. BSP (Board Support Package)

2. Bus Wrapper (bus_wrapper)