]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
stm32f1xx EEPROM emulation (#3914)
authorTakuya Urakawa <urkwtky@gmail.com>
Fri, 19 Oct 2018 04:33:23 +0000 (13:33 +0900)
committerJack Humbert <jack.humb@gmail.com>
Fri, 19 Oct 2018 04:33:23 +0000 (00:33 -0400)
* * Add stm32f1xx EEPROM emulation
* Fix eeprom update compare bug

Squashed commit of the following:

commit b8f248ae08cec0cd81ecbb8854d9b39221d4d573
Author: hsgw <urkwtky@gmail.com>
Date:   Sat Sep 15 19:13:48 2018 +0900

    fix EEPROM_update wrong compare

commit d4ed4e6ea864e967a3e17f7edee4b0c3b4a25541
Author: hsgw <urkwtky@gmail.com>
Date:   Sat Sep 15 17:43:47 2018 +0900

    eeprom fix initialization define

commit b61aa7c04d70c64df3416d63e5da08b73b6053af
Author: hsgw <urkwtky@gmail.com>
Date:   Sat Sep 15 16:33:40 2018 +0900

    maybe working

* Fix FLASH_KEY defines

tmk_core/common.mk
tmk_core/common/chibios/eeprom_stm32.c
tmk_core/common/chibios/eeprom_stm32.h
tmk_core/common/chibios/flash_stm32.c
tmk_core/common/eeconfig.c
tmk_core/common/eeconfig.h
tmk_core/protocol/chibios/main.c

index 4a0f7dcf9a1f3aa3f500db848de455d1172bfe3a..33bcc97b2ed131768df7e49b6d202cc561a95359 100644 (file)
@@ -34,6 +34,13 @@ ifeq ($(PLATFORM),CHIBIOS)
   ifeq ($(MCU_SERIES), STM32F3xx)
     TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
     TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
+    TMK_COMMON_DEFS += -DEEPROM_EMU_STM32F303xC
+    TMK_COMMON_DEFS += -DSTM32_EEPROM_ENABLE
+  else ifeq ($(MCU_SERIES), STM32F1xx)
+    TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
+    TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
+    TMK_COMMON_DEFS += -DEEPROM_EMU_STM32F103xB
+    TMK_COMMON_DEFS += -DSTM32_EEPROM_ENABLE
   else
     TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom_teensy.c
 endif
index 3c19451223d1a7bef93d8a3b145e5e56aa0257b9..a869985501282495006cc2726d70da0d7d8bae40 100755 (executable)
@@ -10,7 +10,7 @@
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
  *
- * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and 
+ * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and
  * https://github.com/leaflabs/libmaple
  *
  * Modifications for QMK and STM32F303 by Yiancar
@@ -274,7 +274,7 @@ uint16_t EE_VerifyPageFullWriteVariable(uint16_t Address, uint16_t Data)
 
     // Check each active page address starting from begining
     for (idx = pageBase + 4; idx < pageEnd; idx += 4)
-        if ((*(__IO uint32_t*)idx) == 0xFFFFFFFF)               // Verify if element 
+        if ((*(__IO uint32_t*)idx) == 0xFFFFFFFF)               // Verify if element
         {                                                   //  contents are 0xFFFFFFFF
             FlashStatus = FLASH_ProgramHalfWord(idx, Data); // Set variable data
             if (FlashStatus != FLASH_COMPLETE)
@@ -517,7 +517,7 @@ uint16_t EEPROM_read(uint16_t Address, uint16_t *Data)
 
     // Get the valid Page end Address
     pageEnd = pageBase + ((uint32_t)(PageSize - 2));
-    
+
     // Check each active page address starting from end
     for (pageBase += 6; pageEnd >= pageBase; pageEnd -= 4)
         if ((*(__IO uint16_t*)pageEnd) == Address)      // Compare the read address with the virtual address
@@ -574,7 +574,7 @@ uint16_t EEPROM_update(uint16_t Address, uint16_t Data)
 {
     uint16_t temp;
     EEPROM_read(Address, &temp);
-    if (Address == Data)
+    if (temp == Data)
         return EEPROM_SAME_VALUE;
     else
         return EEPROM_write(Address, Data);
index 68aa14f6d485d5e3d72d30125954af4d0ffeac22..09229530ca4f9cd7c210004a2774c4f10dfbdd5f 100755 (executable)
@@ -10,7 +10,7 @@
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
  *
- * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and 
+ * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and
  * https://github.com/leaflabs/libmaple
  *
  * Modifications for QMK and STM32F303 by Yiancar
 #include "flash_stm32.h"
 
 // HACK ALERT. This definition may not match your processor
-// To Do. Work out correct value for EEPROM_PAGE_SIZE on the STM32F103CT6 etc 
-#define MCU_STM32F303CC
+// To Do. Work out correct value for EEPROM_PAGE_SIZE on the STM32F103CT6 etc
+#if defined(EEPROM_EMU_STM32F303xC)
+  #define MCU_STM32F303CC
+#elif defined(EEPROM_EMU_STM32F103xB)
+  #define MCU_STM32F103RB
+#else
+  #error "not implemented."
+#endif
 
 #ifndef EEPROM_PAGE_SIZE
     #if defined (MCU_STM32F103RB)
index e7199ac7b12718cd688737f9e2ab681d355b4ceb..27359348445edbebe1d652028c895ec4bf063456 100755 (executable)
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
  *
- * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and 
+ * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and
  * https://github.com/leaflabs/libmaple
  *
  * Modifications for QMK and STM32F303 by Yiancar
  */
 
-#define STM32F303xC
+#if defined(EEPROM_EMU_STM32F303xC)
+    #define STM32F303xC
+    #include "stm32f3xx.h"
+#elif defined(EEPROM_EMU_STM32F103xB)
+    #define STM32F103xB
+    #include "stm32f1xx.h"
+#else
+    #error "not implemented."
+#endif
 
-#include "stm32f3xx.h"
 #include "flash_stm32.h"
 
-#define FLASH_KEY1          ((uint32_t)0x45670123)
-#define FLASH_KEY2          ((uint32_t)0xCDEF89AB)
+#if defined(EEPROM_EMU_STM32F103xB)
+    #define FLASH_SR_WRPERR FLASH_SR_WRPRTERR
+#endif
 
 /* Delay definition */
 #define EraseTimeout        ((uint32_t)0x00000FFF)
@@ -71,7 +79,7 @@ FLASH_Status FLASH_GetStatus(void)
   *   FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
   */
 FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout)
-{ 
+{
     FLASH_Status status;
 
     /* Check for the Flash Status */
@@ -102,7 +110,7 @@ FLASH_Status FLASH_ErasePage(uint32_t Page_Address)
     ASSERT(IS_FLASH_ADDRESS(Page_Address));
     /* Wait for last operation to be completed */
     status = FLASH_WaitForLastOperation(EraseTimeout);
-  
+
     if(status == FLASH_COMPLETE)
     {
         /* if the previous operation is completed, proceed to erase the page */
@@ -128,7 +136,7 @@ FLASH_Status FLASH_ErasePage(uint32_t Page_Address)
   * @param  Address: specifies the address to be programmed.
   * @param  Data: specifies the data to be programmed.
   * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
-  *   FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. 
+  *   FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
   */
 FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data)
 {
index 0fec410a9ca2c6890629cda04080c3dca4d1b869..d8bab7d2e52c88a243abdbafd6cd5900177051cc 100644 (file)
@@ -3,7 +3,7 @@
 #include "eeprom.h"
 #include "eeconfig.h"
 
-#ifdef STM32F303xC
+#ifdef STM32_EEPROM_ENABLE
 #include "hal.h"
 #include "eeprom_stm32.h"
 #endif
@@ -32,7 +32,7 @@ void eeconfig_init_kb(void) {
  * FIXME: needs doc
  */
 void eeconfig_init_quantum(void) {
-#ifdef STM32F303xC
+#ifdef STM32_EEPROM_ENABLE
     EEPROM_format();
 #endif
   eeprom_update_word(EECONFIG_MAGIC,          EECONFIG_MAGIC_NUMBER);
@@ -73,7 +73,7 @@ void eeconfig_enable(void)
  */
 void eeconfig_disable(void)
 {
-#ifdef STM32F303xC
+#ifdef STM32_EEPROM_ENABLE
     EEPROM_format();
 #endif
     eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER_OFF);
index a45cb8b12d3c7456931b8960390ad72bfdc6ddfa..8d4e1d4d00832af1816fd7a48fb0808f56812684 100644 (file)
@@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define EECONFIG_MAGIC_NUMBER_OFF                   (uint16_t)0xFFFF
 
 /* eeprom parameteter address */
-#if !defined(STM32F303xC)
+#if !defined(STM32_EEPROM_ENABLE)
 #define EECONFIG_MAGIC                              (uint16_t *)0
 #define EECONFIG_DEBUG                               (uint8_t *)2
 #define EECONFIG_DEFAULT_LAYER                       (uint8_t *)3
index dcc6d9d07642e2f2c9fad658d0979b35ca5c5364..6cceccd23c7a67bc480a601f4c6bb8ccb1fd797a 100644 (file)
@@ -44,7 +44,7 @@
 #ifdef MIDI_ENABLE
 #include "qmk_midi.h"
 #endif
-#ifdef STM32F303xC
+#ifdef STM32_EEPROM_ENABLE
 #include "eeprom_stm32.h"
 #endif
 #include "suspend.h"
@@ -112,7 +112,7 @@ int main(void) {
   halInit();
   chSysInit();
 
-#ifdef STM32F303xC
+#ifdef STM32_EEPROM_ENABLE
   EEPROM_init();
 #endif