sunxi_hal_spinor.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #ifndef SUNXI_HAL_SPINOR_H
  2. #define SUNXI_HAL_SPINOR_H
  3. #include <stdint.h>
  4. #include <sunxi_hal_common.h>
  5. #include <sunxi_hal_spi.h>
  6. #include <hal_sem.h>
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #define SUNXI_HAL_SPINOR_API_VERSION 1
  11. #define SUNXI_HAL_SPINOR_DRV_VERSION 0
  12. typedef enum sunxi_hal_spinor_signal_event
  13. {
  14. ARM_FLASH_EVENT_READY = (1UL << 0),
  15. ARM_FLASH_EVENT_ERROR = (1UL << 1),
  16. } sunxi_hal_spinor_signal_event_t;
  17. typedef struct sunxi_hal_spinor_status
  18. {
  19. uint32_t busy: 1;
  20. uint32_t error: 1;
  21. uint32_t reserved: 30;
  22. } sunxi_hal_spinor_status_t;
  23. typedef struct _sunxi_hal_spinor_sector_info
  24. {
  25. uint32_t start;
  26. uint32_t end;
  27. } sunxi_hal_spinor_sector_info;
  28. typedef struct _sunxi_hal_spinor_info
  29. {
  30. sunxi_hal_spinor_sector_info *sector_info;
  31. uint32_t sector_count;
  32. uint32_t sector_size;
  33. uint32_t page_size;
  34. uint32_t program_unit;
  35. uint8_t erased_value;
  36. uint8_t reserved[3];
  37. } sunxi_hal_spinor_info;
  38. typedef struct sunxi_hal_spinor_capabilities
  39. {
  40. uint32_t event_ready: 1;
  41. uint32_t data_width: 2;
  42. uint32_t erase_chip: 1;
  43. uint32_t reserved: 28;
  44. } sunxi_hal_spinor_capabilities_t;
  45. int32_t hal_spinor_init(sunxi_hal_spinor_signal_event_t cb_event);
  46. int32_t hal_spinor_deinit(void);
  47. sunxi_hal_version_t hal_spinor_get_version(int32_t dev);
  48. sunxi_hal_spinor_capabilities_t hal_spinor_get_capabilities(void);
  49. sunxi_hal_spinor_status_t hal_spinor_get_status(void);
  50. int32_t hal_spinor_power_control(sunxi_hal_power_state_e state);
  51. int32_t hal_spinor_read_data(uint32_t addr, void *buf, uint32_t cnt);
  52. int32_t hal_spinor_program_data(uint32_t addr, const void *buf, uint32_t cnt);
  53. int32_t hal_spinor_erase_sector(uint32_t addr, uint32_t size);
  54. int32_t hal_spinor_erase_chip(void);
  55. int32_t hal_spinor_sync(void);
  56. sunxi_hal_spinor_info *hal_spinor_get_info(void);
  57. void hal_spinor_signal_event(uint32_t event);
  58. int32_t hal_spinor_control(int32_t dev, uint32_t command, uint32_t arg);
  59. #ifdef __cplusplus
  60. }
  61. #endif
  62. #endif /*SUNXI_HAL_SPINOR_H*/