Datalink layer framing in wireless sensor networks usually faces a trade-off between large frame sizes for high channel bandwidth utilization and small frame sizes for effective error recovery. Given the high error rates of intermote communications, TinyOS opts in favor of small frame sizes at the cost of extremely low channel bandwidth utilization. In this paper, we describe Seda: a streaming datalink layer that resolves the above dilemma by decoupling framing from error recovery. Seda treats the packets from the upper layer as a continuous stream of bytes. It breaks the data stream into blocks, and retransmits erroneous blocks only (as opposed to the entire erroneous frame). Consequently, the frame-error-rate (FER), the main factor that bounds the frame size in the current design, becomes irrelevant to error recovery. A frame can therefore be sufficiently large in great favor of high utilization of the wireless channel bandwidth, without compromising the effectiveness of error recovery. Meanwhile, the size of each block is configured according to the error characteristics of the wireless channel to optimize the performance of error recovery. Seda has been implemented as a new datalink layer in the TinyOS, and evaluated through both simulations and experiments in a testbed of 48 MicaZ motes. Our results show that, by increasing the TinyOS frame size from the default 29 bytes to 100 bytes (limited by the buffer space at MicaZ firmware), Seda improves the throughput around 25% under typical wireless channel conditions. Seda also reduces the retransmission traffic volume by more than 50%, compared to a framebased retransmission scheme. Our analysis also exposes that future sensor motes should be equipped with radios with more packet buffer space on the radio firmware to achieve optimal utilization of the channel capacity.