diff --git a/pw_blob_store/blob_store.cc b/pw_blob_store/blob_store.cc
index 7744a4b..a1181c4 100644
--- a/pw_blob_store/blob_store.cc
+++ b/pw_blob_store/blob_store.cc
@@ -423,7 +423,7 @@
   return partition_.Read(offset, dest.first(read_size));
 }
 
-Result<ByteSpan> BlobStore::GetMemoryMappedBlob() const {
+Result<ConstByteSpan> BlobStore::GetMemoryMappedBlob() const {
   if (!ValidToRead()) {
     return Status::FAILED_PRECONDITION;
   }
@@ -432,7 +432,7 @@
   if (mcu_address == nullptr) {
     return Status::UNIMPLEMENTED;
   }
-  return std::span(mcu_address, ReadableDataBytes());
+  return ConstByteSpan(mcu_address, ReadableDataBytes());
 }
 
 size_t BlobStore::ReadableDataBytes() const {
diff --git a/pw_blob_store/blob_store_chunk_write_test.cc b/pw_blob_store/blob_store_chunk_write_test.cc
index 42dac62..ae9ef68 100644
--- a/pw_blob_store/blob_store_chunk_write_test.cc
+++ b/pw_blob_store/blob_store_chunk_write_test.cc
@@ -84,13 +84,13 @@
     // Use reader to check for valid data.
     BlobStore::BlobReader reader(blob);
     ASSERT_EQ(Status::OK, reader.Open());
-    Result<ByteSpan> result = reader.GetMemoryMappedBlob();
+    Result<ConstByteSpan> result = reader.GetMemoryMappedBlob();
     ASSERT_TRUE(result.ok());
     VerifyFlash(result.value());
     EXPECT_EQ(Status::OK, reader.Close());
   }
 
-  void VerifyFlash(ByteSpan verify_bytes) {
+  void VerifyFlash(ConstByteSpan verify_bytes) {
     // Should be defined as same size.
     EXPECT_EQ(source_buffer_.size(), flash_.buffer().size_bytes());
 
diff --git a/pw_blob_store/blob_store_deferred_write_test.cc b/pw_blob_store/blob_store_deferred_write_test.cc
index a957308..9ccc581 100644
--- a/pw_blob_store/blob_store_deferred_write_test.cc
+++ b/pw_blob_store/blob_store_deferred_write_test.cc
@@ -93,13 +93,13 @@
     // Use reader to check for valid data.
     BlobStore::BlobReader reader(blob);
     ASSERT_EQ(Status::OK, reader.Open());
-    Result<ByteSpan> result = reader.GetMemoryMappedBlob();
+    Result<ConstByteSpan> result = reader.GetMemoryMappedBlob();
     ASSERT_TRUE(result.ok());
     VerifyFlash(result.value());
     EXPECT_EQ(Status::OK, reader.Close());
   }
 
-  void VerifyFlash(ByteSpan verify_bytes) {
+  void VerifyFlash(ConstByteSpan verify_bytes) {
     // Should be defined as same size.
     EXPECT_EQ(buffer_.size(), flash_.buffer().size_bytes());
 
diff --git a/pw_blob_store/blob_store_test.cc b/pw_blob_store/blob_store_test.cc
index 55f98f1..30cd64f 100644
--- a/pw_blob_store/blob_store_test.cc
+++ b/pw_blob_store/blob_store_test.cc
@@ -72,7 +72,7 @@
     // Use reader to check for valid data.
     BlobStore::BlobReader reader(blob);
     ASSERT_EQ(Status::OK, reader.Open());
-    Result<ByteSpan> result = reader.GetMemoryMappedBlob();
+    Result<ConstByteSpan> result = reader.GetMemoryMappedBlob();
     ASSERT_TRUE(result.ok());
     VerifyFlash(result.value());
     EXPECT_EQ(Status::OK, reader.Close());
@@ -91,7 +91,7 @@
     // Use reader to check for valid data.
     BlobStore::BlobReader reader1(blob);
     ASSERT_EQ(Status::OK, reader1.Open());
-    Result<ByteSpan> result = reader1.GetMemoryMappedBlob();
+    Result<ConstByteSpan> result = reader1.GetMemoryMappedBlob();
     ASSERT_TRUE(result.ok());
     VerifyFlash(result.value());
     EXPECT_EQ(Status::OK, reader1.Close());
@@ -119,7 +119,7 @@
     VerifyFlash(read_buffer_);
   }
 
-  void VerifyFlash(ByteSpan verify_bytes, size_t offset = 0) {
+  void VerifyFlash(ConstByteSpan verify_bytes, size_t offset = 0) {
     // Should be defined as same size.
     EXPECT_EQ(source_buffer_.size(), flash_.buffer().size_bytes());
 
diff --git a/pw_blob_store/public/pw_blob_store/blob_store.h b/pw_blob_store/public/pw_blob_store/blob_store.h
index 4c02790..d28c9d7 100644
--- a/pw_blob_store/public/pw_blob_store/blob_store.h
+++ b/pw_blob_store/public/pw_blob_store/blob_store.h
@@ -194,9 +194,14 @@
     // Returns:
     //
     // OK - success.
+    // FAILED_PRECONDITION - No readable blob available.
+    // INVALID_ARGUMENT - Invalid offset.
     // UNAVAILABLE - Unable to open, already open.
     Status Open(size_t offset = 0) {
       PW_DCHECK(!open_);
+      if (!store_.ValidToRead()) {
+        return Status::FAILED_PRECONDITION;
+      }
       if (offset >= store_.ReadableDataBytes()) {
         return Status::INVALID_ARGUMENT;
       }
@@ -232,7 +237,7 @@
     // OK with span - Valid span respresenting the blob data
     // FAILED_PRECONDITION - Reader not open.
     // UNIMPLEMENTED - Memory mapped access not supported for this blob.
-    Result<ByteSpan> GetMemoryMappedBlob() {
+    Result<ConstByteSpan> GetMemoryMappedBlob() {
       PW_DCHECK(open_);
       return store_.GetMemoryMappedBlob();
     }
@@ -417,7 +422,7 @@
   // OK with span - Valid span respresenting the blob data
   // FAILED_PRECONDITION - Blob not in a state to read data
   // UNIMPLEMENTED - Memory mapped access not supported for this blob.
-  Result<ByteSpan> GetMemoryMappedBlob() const;
+  Result<ConstByteSpan> GetMemoryMappedBlob() const;
 
   // Size of blob/readable data, in bytes.
   size_t ReadableDataBytes() const;
