According to the Wikipedia page Segmentation fault, a bus error can be caused by unaligned memory access. The article gives an example about how to trigger a bus er
Consider the following example I have just tested on ARM9:
//Addresses 0 1 2 3 4 5 6 7 8 9
U8 u8Temp[10] = {0x11,0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00};
U32 u32Var;
u32Var = *((U32*)(u16Temp+1)); // Let's read four bytes starting from 0x22
// You would expect that here u32Var will have a value of 0x55443322 (assuming we have little endian)
// But in reallity u32Var will be 0x11443322!
// This is because we are accessing address which %4 is not 0.