internal.h 845 B

12345678910111213141516171819202122232425262728
  1. #pragma once
  2. #include <common/sys/types.h>
  3. /**
  4. * @brief 根据簇号计算该簇的起始扇区号(LBA地址)
  5. *
  6. * @param first_data_sector 数据区的其实扇区号
  7. * @param sec_per_clus 每个簇的扇区数量
  8. * @param cluster 簇号
  9. * @return uint32_t LBA地址
  10. */
  11. static inline uint32_t __fat32_calculate_LBA(uint32_t first_data_sector, uint32_t sec_per_clus, uint32_t cluster)
  12. {
  13. return first_data_sector + (cluster - 2) * sec_per_clus;
  14. }
  15. /**
  16. * @brief 计算LBA地址所在的簇
  17. *
  18. * @param first_data_sector 数据区的其实扇区号
  19. * @param sec_per_clus 每个簇的扇区数量
  20. * @param LBA LBA地址
  21. * @return uint32_t 所在的簇
  22. */
  23. static inline uint32_t __fat32_LBA_to_cluster(uint32_t first_data_sector, uint32_t sec_per_clus, uint32_t LBA)
  24. {
  25. return ((LBA - first_data_sector) / sec_per_clus) + 2;
  26. }