Add proper Zephyr module support with updated HAL for v3/v4 compatibility
Summary
This PR introduces first-class support for integrating CryptoAuthLib as a Zephyr module, compatible with Zephyr v3 and v4. It enables seamless integration into modern Zephyr-based applications using CMake and Kconfig, and updates the I2C and SPI HALs to align with Zephyr's evolving include path conventions.
Note: This change breaks compatibility with Zephyr v2.x due to header path and module resolution changes.
Key Changes
- Added
module.ymlto enable Zephyr module recognition via west. - Introduced
ATCA_ZEPHYR_SUPPORTCMake option to toggle Zephyr build mode. - Created
zephyr_options.cmaketo mapCONFIG_ATCA_*Kconfig options to internal CMake flags. - Refactored HAL sources (I2C, SPI) to use updated Zephyr include paths (
zephyr/drivers/...) required in Zephyr ≥ v3. - Updated top-level CMakeLists to:
- Detect Zephyr toolchain
- Build as a
zephyr_library()when enabled - Export include paths and config headers for Zephyr apps
Integration Instructions
To include CryptoAuthLib as a Zephyr module:
Option 1: In-tree
Place CryptoAuthLib under modules/lib/cryptoauthlib and it will be automatically detected.
Option 2: Out-of-tree
If using a separate path:
# Add this line before find_package(Zephyr)
set(EXTRA_ZEPHYR_MODULES ${CMAKE_CURRENT_SOURCE_DIR}/../modules/lib/cryptoauthlib)
Kconfig Support
Once integrated, you can configure CryptoAuthLib via prj.conf using new symbols:
CONFIG_ATCA_HAL_I2C=y
CONFIG_ATCA_CRYPTO_MBEDTLS=y
CONFIG_ATCA_DEVICE_SUPPORT_ECC608=y
These options automatically propagate to the CMake build system, enabling or disabling relevant sources and flags.
Compatibility Notes
- Verified working on Zephyr v3.5 and v4.1.0
- Breaks backward compatibility with Zephyr v2.x
- No functional changes for non-Zephyr builds (Linux/MPLAB/Harmony remain unaffected)
Request
If possible, please test against MPLAB Harmony and existing Linux builds to ensure continued compatibility. Feedback and improvements welcome!
Feature branch: https://github.com/BitConcepts/cryptoauthlib/tree/feature/zephyr-module-support-v3-v4
Follow-Up Update: I2C Send Function Refactored for Zephyr HAL
This follow-up commit introduces a significant improvement to the I2C HAL layer for Zephyr:
Summary
Refactors hal_i2c_send in hal_zephyr_i2c.c to support word-address-based I2C transfers and improve compatibility with Zephyr's I2C API.
Key Changes
-
Updated function signature: uses
word_addressinstead ofaddressfor semantic clarity. -
Reads device address from
ATCAIfaceCfg, supporting bothatcai2c->slave_addressandcfg->dev_addrfor backward compatibility. -
Implements a two-message I2C transfer:
- First message transmits the word address.
- Second (optional) message transmits the data buffer, if
datais provided.
-
Uses
i2c_transfer()instead ofi2c_write()for explicit control over transaction flags. -
Sets appropriate I2C flags:
-
I2C_MSG_WRITE -
I2C_MSG_STOPonly after the final message
-
-
Adds parameter validation for both the Zephyr I2C device and the provided config structure.
Motivation
Many I2C peripherals require a separate word address phase before sending data. This update ensures broader device compatibility and aligns our I2C send logic with Zephyr HAL best practices.
Impact
- Increases robustness and configurability of I2C transactions.
- No API change for external callers of
hal_i2c_send(), aside from the renamed argument. - Improves support for devices with word-addressed registers (e.g., EEPROMs, secure elements).
This PR has been marked as stale and will be automatically closed in 7 days.
This PR has been marked as stale and will be automatically closed in 7 days.
Just checking in on the status of PR #407. I understand things can get busy, but I wanted to keep this from going stale. If there are any updates or concerns, please let me know how I can assist to help move this forward. Thank you!
Hi @tbitcs , We are planning this PR for review and merge at our next CAL release (mostly on v3.8.0 slotted for ~ Mar release - for your note and info.