Mercurial > public > ostc4
view Discovery/Inc/externLogbookFlash.h @ 220:e524a824d8f2 Improve_IPC_Sync
Added schedule point for functions executed once in a second
SPI communication takes place every 100ms triggered by the master (main). Synchronisation is done using the SPI RX complete callback which is called ~4ms after communication was started. In the previous implementation this could happen in parallel to usage of data. To solve this potential problem the execution of functions called once a second was moved from 1000ms to 980ms giving a 20ms window for execution.
author | ideenmodellierer |
---|---|
date | Sun, 31 Mar 2019 15:49:47 +0200 |
parents | 5f11787b4f42 |
children | 1b9847d40e81 |
line wrap: on
line source
/////////////////////////////////////////////////////////////////////////////// /// -*- coding: UTF-8 -*- /// /// \file Discovery/Inc/externLogbookFlash.h /// \brief Header File to access the new 1.8 Volt Spansion S25FS256S 256 Mbit (32 Mbyte) /// \author heinrichs weikamp gmbh /// \date 07-Aug-2014 /// /// $Id$ /////////////////////////////////////////////////////////////////////////////// /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh /// /// This program is free software: you can redistribute it and/or modify /// it under the terms of the GNU General Public License as published by /// the Free Software Foundation, either version 3 of the License, or /// (at your option) any later version. /// /// This program is distributed in the hope that it will be useful, /// but WITHOUT ANY WARRANTY; without even the implied warranty of /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the /// GNU General Public License for more details. /// /// You should have received a copy of the GNU General Public License /// along with this program. If not, see <http://www.gnu.org/licenses/>. ////////////////////////////////////////////////////////////////////////////// /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef EXTERN_LOGBOOK_FLASH_H #define EXTERN_LOGBOOK_FLASH_H /* Includes ------------------------------------------------------------------*/ #include "stm32f4xx_hal.h" #include "logbook.h" /* Exported variables --------------------------------------------------------*/ /* 4 KB * one for the basics like min./max. temperature, max. depth, charge cycles * after that two or more 0for settings (less than one necessary as of 26. March 2015) * */ #define DDSTART 0x00000000 #define DDSTOP 0x00000FFF #define unused1START 0x00001000 #define unused1STOP 0x00007FFF /* 32 KB */ #define unused2START 0x00008000 #define unused2STOP 0x0000FFFF /* 64 KB * 001x used for settings * 001x used for VPM * 005x unused * 008x for header (0.5 MB) * 192x for samples (12 MB) * 016x for firmware ( 1 MB) * 032x for firmware2 ( 2 MB) */ #define SETTINGSSTART 0x00010000 #define SETTINGSSTOP 0x0001FFFF #define VPMSTART 0x00020000 #define VPMSTOP 0x0002FFFF #define unused3START 0x00030000 #define unused3STOP 0x0007FFFF #define HEADERSTART 0x00080000 #define HEADERSTOP 0x000FFFFF #define SAMPLESTART 0x00100000 #define SAMPLESTOP 0x00CFFFFF #define FWSTART 0x00D00000 #define FWSTOP 0x00DFFFFF #define FWSTART2 0x00E00000 #define FWSTOP2 0x00FFFFFF /* 16 MB with 4 Byte addressing */ #define unused4START 0x01000000 #define unused4STOP 0x01FFFFFF #define HEADERSIZE sizeof(SLogbookHeader) #define HEADERSIZEOSTC3 sizeof(SLogbookHeaderOSTC3) /* Exported types ------------------------------------------------------------*/ typedef struct{ uint8_t byteLow; uint8_t byteMidLow; uint8_t byteMidHigh; uint8_t byteHigh; } addressToByte_t; typedef struct{ uint8_t byteLow; uint8_t byteHigh; } WordToByte_t; typedef union{ addressToByte_t u8bit; uint32_t u32bit; } convert_Type; typedef union{ WordToByte_t u8bit; uint16_t u16bit; } convert16_Type; /* Exported functions --------------------------------------------------------*/ void ext_flash_write_settings(void); uint8_t ext_flash_read_settings(void); void ext_flash_write_devicedata(void); uint16_t ext_flash_read_devicedata(uint8_t *buffer, uint16_t max_length); void ext_flash_read_fixed_16_devicedata_blocks_formated_128byte_total(uint8_t *buffer); #ifndef BOOTLOADER_STANDALONE void ext_flash_write_vpm(SVpm *vpmInput); int ext_flash_read_vpm(SVpm *vpmOutput); #endif void ext_flash_start_new_dive_log_and_set_actualPointerSample(uint8_t *pHeaderPreDive); void ext_flash_create_new_dive_log(uint8_t *pHeaderPreDive); void ext_flash_close_new_dive_log(uint8_t *pHeaderPostDive); void ext_flash_write_sample(uint8_t *pSample, uint16_t length); uint8_t ext_flash_count_dive_headers(void); void ext_flash_read_dive_header(uint8_t *pHeaderToFill, uint8_t StepBackwards); void ext_flash_read_dive_header2(uint8_t *pHeaderToFill, uint8_t id, _Bool bOffset); void ext_flash_open_read_sample(uint8_t StepBackwards, uint32_t *totalNumberOfBytes); void ext_flash_read_next_sample_part(uint8_t *pSample, uint8_t length); void ext_flash_close_read_sample(void); void ext_flash_set_entry_point(void); void ext_flash_reopen_read_sample_at_entry_point(void); void ext_flash_write_dive_raw_with_double_header_1K(uint8_t *data, uint32_t length); uint32_t ext_flash_read_dive_raw_with_double_header_1K(uint8_t *data, uint32_t max_size, uint8_t StepBackwards); void ext_flash_read_header_memory(uint8_t *data); void ext_flash_write_header_memory(uint8_t *data); void ext_flash_erase_logbook(void); void ext_flash_erase_chip(void); void ext_flash_erase_firmware(void); void ext_flash_erase_firmware2(void); void ext_flash_disable_protection_for_logbook(void); void ext_flash_enable_protection(void); void ext_flash_read_block_start(void); void ext_flash_repair_dive_log(void); void ext_flash_find_start(void); uint8_t ext_flash_erase_firmware_if_not_empty(void); uint8_t ext_flash_erase_firmware2_if_not_empty(void); void ext_flash_write_firmware(uint8_t *pSample1, uint32_t length1);//,uint8_t *pSample2, uint32_t length2); uint32_t ext_flash_read_firmware(uint8_t *pSample1, uint32_t max_length, uint8_t *magicByte); uint8_t ext_flash_read_firmware_version(char *text); void ext_flash_write_firmware2(uint32_t offset, uint8_t *pSample1, uint32_t length1,uint8_t *pSample2, uint32_t length2); uint32_t ext_flash_read_firmware2(uint32_t *offset, uint8_t *pSample1, uint32_t max_length1, uint8_t *pSample2, uint32_t max_length2); uint16_t ext_flash_repair_SPECIAL_dive_numbers_starting_count_with(uint16_t startCount); #endif /* EXTERN_LOGBOOK_FLASH_H */