Symptoms you may see while bringing up a BMP581, their causes and the fix for each, cheapest check first.
Start with the DriverError of the failing call (ToString(r.error)): Bus and NotInitialized are transport
problems; the others mean the chip answered but did not confirm a step.
A read after the reset failed (the missing ACK of the reset command itself is expected and accepted over I2C), or an SPI port failed to send the command
The same wiring checks as for Init()
InvalidChipId
CHIP_ID read 0 after the reset: the chip did not come back, or (SPI) the port declares Interface::I2c
Check the supply; declare the right kInterface
NvmNotReady
STATUS nvm_rdy = 0 or nvm_err = 1 after the reset
Reset once more; if it persists, the part is faulty
PorSoftReset
Something else read INT_STATUS in between (reading clears it)
Do not poll INT_STATUS from another task during the reset